문제

여러 항목을 쉽게 병합할 수 있는 도구나 스크립트가 있습니까? 항아리 파일을 하나의 JAR 파일로 만드시겠습니까?보너스는 기본 파일 매니페스트를 쉽게 설정하고 실행 가능하게 만드는 것입니다.

구체적인 사례는 Java 재구성된 텍스트 도구.다음과 같이 실행하고 싶습니다.

자바 -jar 첫 번째.jar

내가 알 수 있는 한, 쉬운 단일 파일 도구가 되어서는 안 된다는 것을 나타내는 종속성이 없지만 다운로드한 ZIP 파일에는 많은 라이브러리가 포함되어 있습니다.

      0  11-30-07 10:01   jrst-0.8.1/
    922  11-30-07 09:53   jrst-0.8.1/jrst.bat
    898  11-30-07 09:53   jrst-0.8.1/jrst.sh
   2675  11-30-07 09:42   jrst-0.8.1/readmeEN.txt
 108821  11-30-07 09:59   jrst-0.8.1/jrst-0.8.1.jar
   2675  11-30-07 09:42   jrst-0.8.1/readme.txt
      0  11-30-07 10:01   jrst-0.8.1/lib/
  81508  11-30-07 09:49   jrst-0.8.1/lib/batik-util-1.6-1.jar
2450757  11-30-07 09:49   jrst-0.8.1/lib/icu4j-2.6.1.jar
 559366  11-30-07 09:49   jrst-0.8.1/lib/commons-collections-3.1.jar
  83613  11-30-07 09:49   jrst-0.8.1/lib/commons-io-1.3.1.jar
 207723  11-30-07 09:49   jrst-0.8.1/lib/commons-lang-2.1.jar
  52915  11-30-07 09:49   jrst-0.8.1/lib/commons-logging-1.1.jar
 260172  11-30-07 09:49   jrst-0.8.1/lib/commons-primitives-1.0.jar
 313898  11-30-07 09:49   jrst-0.8.1/lib/dom4j-1.6.1.jar
1994150  11-30-07 09:49   jrst-0.8.1/lib/fop-0.93-jdk15.jar
  55147  11-30-07 09:49   jrst-0.8.1/lib/activation-1.0.2.jar
 355030  11-30-07 09:49   jrst-0.8.1/lib/mail-1.3.3.jar
  77977  11-30-07 09:49   jrst-0.8.1/lib/servlet-api-2.3.jar
 226915  11-30-07 09:49   jrst-0.8.1/lib/jaxen-1.1.1.jar
 153253  11-30-07 09:49   jrst-0.8.1/lib/jdom-1.0.jar
  50789  11-30-07 09:49   jrst-0.8.1/lib/jewelcli-0.41.jar
 324952  11-30-07 09:49   jrst-0.8.1/lib/looks-1.2.2.jar
 121070  11-30-07 09:49   jrst-0.8.1/lib/junit-3.8.1.jar
 358085  11-30-07 09:49   jrst-0.8.1/lib/log4j-1.2.12.jar
  72150  11-30-07 09:49   jrst-0.8.1/lib/logkit-1.0.1.jar
 342897  11-30-07 09:49   jrst-0.8.1/lib/lutinwidget-0.9.jar
2160934  11-30-07 09:49   jrst-0.8.1/lib/docbook-xsl-nwalsh-1.71.1.jar
 301249  11-30-07 09:49   jrst-0.8.1/lib/xmlgraphics-commons-1.1.jar
  68610  11-30-07 09:49   jrst-0.8.1/lib/sdoc-0.5.0-beta.jar
3149655  11-30-07 09:49   jrst-0.8.1/lib/xalan-2.6.0.jar
1010675  11-30-07 09:49   jrst-0.8.1/lib/xercesImpl-2.6.2.jar
 194205  11-30-07 09:49   jrst-0.8.1/lib/xml-apis-1.3.02.jar
  78440  11-30-07 09:49   jrst-0.8.1/lib/xmlParserAPIs-2.0.2.jar
  86249  11-30-07 09:49   jrst-0.8.1/lib/xmlunit-1.1.jar
 108874  11-30-07 09:49   jrst-0.8.1/lib/xom-1.0.jar
  63966  11-30-07 09:49   jrst-0.8.1/lib/avalon-framework-4.1.3.jar
 138228  11-30-07 09:49   jrst-0.8.1/lib/batik-gui-util-1.6-1.jar
 216394  11-30-07 09:49   jrst-0.8.1/lib/l2fprod-common-0.1.jar
 121689  11-30-07 09:49   jrst-0.8.1/lib/lutinutil-0.26.jar
  76687  11-30-07 09:49   jrst-0.8.1/lib/batik-ext-1.6-1.jar
 124724  11-30-07 09:49   jrst-0.8.1/lib/xmlParserAPIs-2.6.2.jar

보시다시피, 이 작업을 수동으로 수행할 필요가 없는 것이 다소 바람직합니다.

지금까지 저는 AutoJar와 ProGuard만 사용해 보았지만 둘 다 실행하기 매우 쉬웠습니다.JAR 파일의 상수 풀에 문제가 있는 것 같습니다.

jrst가 약간 손상된 것 같으니 고치도록 하겠습니다.그만큼 메이븐 pom.xml 파일도 깨진 것 같으니 jrst를 고치기 전에 먼저 고쳐야 할 것 같아요...마치 벌레 자석 같은 느낌이에요 :-)


업데이트:이 응용 프로그램을 수정한 적이 없지만 확인했습니다. Fat JAR을 기반으로 하는 의 "Runnable JAR 내보내기 마법사"입니다.나는 이것이 내 자신의 코드를 배포하는 데 사용하기 매우 쉽다는 것을 알았습니다.

다른 훌륭한 제안 중 일부는 Eclipse가 아닌 환경의 빌드에 더 나을 수 있습니다. oss는 아마도 다음을 사용하여 멋진 빌드를 만들어야 할 것입니다. 개미.(Maven은 지금까지 나에게 고통을 주었지만 다른 사람들은 그것을 좋아합니다.)

도움이 되었습니까?

해결책

Eclipse 3.4 JDT의 Runnable JAR 내보내기 마법사.

Eclipse 3.5에서는 이것이 확장되었습니다.이제 참조된 JAR 파일을 처리하는 방법을 선택할 수 있습니다.

다른 팁

개미 zipfileset 일을 한다

<jar id="files" jarfile="all.jar">
    <zipfileset src="first.jar" includes="**/*.java **/*.class"/>
    <zipfileset src="second.jar" includes="**/*.java **/*.class"/>
</jar>

몇 가지 다른 솔루션을 시도한 결과 One-JAR 가장 쉽게 작업할 수 있으며 정확히 다음과 같은 작업을 수행했습니다.필요한 모든 것을 포함하는 단일 실행 가능한 JAR을 생성합니다.

One-JAR은 중첩된 리소스를 탐색할 수 있는 사용자 정의 클래스 로더를 사용합니다.다운로드의 .bat 파일을 보면 jrst-0.8.1.jar의 org.codelutin.jrst.JRST가 메인 클래스이므로 매니페스트는 다음과 같아야 합니다.

Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST

정말 멋진 점은 One-JAR가 명령줄 인수 전달을 처리한다는 것입니다.클래스 경로는 필요한 모든 리소스가 단일 JAR에 번들로 포함되어 있다고 가정하여 사용자 정의 클래스 로더에 의해 처리됩니다.

One-JAR을 사용하는 가장 쉬운 방법은 ant를 사용하는 것입니다.다음과 같이 작동하는 사용자 정의 "one-jar" 개미 작업이 있습니다(매니페스트가 "rst.mf"라고 가정).

<target name="jar-rst">
    <one-jar destfile="rst.jar" manifest="rst.mf">
        <main jar="jrst-0.8.1.jar" />
        <lib>
            <fileset dir="${pathToJars}">
                <include name="batik-util-1.6-1.jar" />
                <include name="icu4j-2.6.1.jar" />
                <include name="commons-collections-3.1.jar" />
                <!-- Snip -->
            </fileset>
        </lib>
    </one-jar>
</target>

당신이 메이븐 사용자는 일반적으로 어셈블리 플러그인이 원하는 작업을 수행하거나 잠재적으로 쉐이드 플러그인을 수행하며 경우에 따라 조합을 수행합니다.

어셈블리 플러그인을 사용하면 필요한 설정이 포함된 매니페스트 파일을 프로젝트에 넣을 수 있지만 일반적으로 기본값이 매우 좋습니다.그런 다음 건물이 완료됩니다.

mvn assembly:assembly

아니면 좀 더 특별한 처리해야 할 일이 있다면 다른 목표 중 하나를 선택하세요.포함할 모든 JAR 파일은 Maven의 종속성 해결 프로그램에 의해 선택됩니다.쉐이드 플러그인을 사용하는 경우 이는 일반적으로 설치 목표의 일부이며 제가 지금 하고 있는 특정 프로젝트에서는 그렇게 합니다.

mvn install
mvn assembly:single

그만큼 assembly:single 목표는 평생 문제를 해결하는 것입니다. 이 경우에는 애플리케이션.

당신이 사용할 수있는 JarJar 패키지 섀도잉을 사용하여 JAR 파일이 다른 파일과 충돌하지 않는지 확인합니다.

있다 프로가드 이는 JAR 파일을 하나로 묶을 뿐만 아니라 클래스 파일을 최적화, 정리 또는 난독화하여 결과 JAR 파일을 이전의 모든 JAR 파일 합계보다 훨씬 작게 만듭니다.

실제로 JRST 도구를 사용하여 ProGuard를 사용해 보았는데, 보고하신 대로입니다.나는 문제를 추적하려고 노력했고 그것이 관련이 있음을 발견했습니다. 버그 jrst가 참조하는 ICU4J 라이브러리에 있습니다.문제는 사용된 ICU 버전이 현재 훨씬 구식이라는 것입니다.그래서 교체했어요 icu.jar ICU4J 버전 3.2가 포함된 파일입니다.이제 ProGuard는 JRST 라이브러리의 불일치에 대한 여러 가지 다른 오류/경고를 찾습니다.

내 생각엔 ProGuard가 예상대로 작동하지만 jrst의 라이브러리가 일관성이 없는 것 같습니다.개발자가 프로젝트의 종속성을 확인하고 업데이트해야 하기 때문에 개발자와 대화하는 것보다 더 많은 일을 할 수 있는지 모르겠습니다.

(Andrian의 기준):

<jar id="files" jarfile="all.jar">
  <zipgroupfileset dir="${library.dir}" includes="*.jar" excludes="test-helper.jar"/>
  <zipfileset src="first.jar" includes="**/*.java **/*.class"/>
  <zipfileset src="second.jar" includes="**/*.java **/*.class"/>
  <fileset dir=".">
    <include name="LICENSE"/>
    <include name="NOTICE"/>
  </fileset>
</jar>

One-JAR 0.97이 방금 출시되었습니다. http://one-jar.sourceforge.net, 다음과 같은 프레임워크에 대한 지원으로 확장되었습니다. 그리고 기이스, 이는 다른 접근 방식에 문제를 일으킬 수 있습니다.또한 일부 JAR 파일이 One-JAR 외부에 있는 클래스 로더 반전도 처리합니다(예: JDBC 번들로 배송되지 않는 드라이버).

One-JAR은 명령줄입니다. 개미 그리고 메이븐 플러그인 2개."jar" 도구를 사용하여 빌드하는 것도 간단합니다.

또한 Ference Hechler가 작성한 Eclipse Jar 내보내기(실행 가능)를 추천할 수 있습니다.그는 JAR 파일 세트를 래핑하는 간단한 접근 방식을 고안하는 데 훌륭한 일을 했습니다.그와 나는 One-JAR 작업을 했지만 Jar 내보내기는 다른 코드베이스를 기반으로 합니다.

라는 도구가 있습니다. 자동항아리 그러면 바이트코드를 스캔하고 참조된(가져온) 클래스를 포함하여 찾은 클래스로 .jar 파일을 컴파일합니다.

그러나 구성에서 클래스 이름을 지정하고 프레임워크에 의해 로드되는 Spring과 같은 것과 항상 작동하는 것은 아닙니다.

또는 Maven 어셈블리 플러그인(mvn 어셈블리:어셈블리)을 사용합니다.

여기서 필요한 도구는 다음과 같습니다. JarSplice: http://ninjacave.com/jarsplice

그렇습니다 ~ 아니다 Ant 또는 Maven이 필요하고, 자체 GUI가 있으며, 사용하기 쉽고 요청한 대로 정확하게 수행할 수 있습니다. --> 여러 jar 파일의 내용을 하나의 파일로 병합합니다. (여전히 자체 클래스로더를 추가해야 합니다.)

이를 위해서는 Maven Shading 플러그인을 사용해야 합니다.나는 종종 독립 실행형 jar 파일을 만들기 위해 maven을 사용하는데, 그것은 매우 강력합니다.

더보기:

http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

처럼 들리다 아파치 앤트 당신이 찾고있는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top