it-swarm-ko.tech

릴리스를 하나의 JAR 파일로 병합하는 가장 쉬운 방법

많은 JAR 파일을 하나의 JAR 파일로 쉽게 병합하는 도구 또는 스크립트가 있습니까? 보너스는 주 파일 매니페스트를 쉽게 설정하고 실행 파일로 만드는 것입니다.

구체적인 사례는 Java restructured text tool 입니다. 나는 그것을 다음과 같이 실행하고 싶다 :

자바 -jar rst.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가 약간 깨져서 고칠 것입니다. Mavenpom.xml 파일도 분명히 손상되었으므로 jrst를 수정하기 전에 수정해야합니다 ... 버그 자석처럼 느껴집니다 :-)


업데이트 :이 응용 프로그램을 고칠 수는 없었지만 지방 JAR을 기반으로 한 Eclipse 의 "실행 가능한 JAR 내보내기 마법사"를 확인했습니다. 내 코드를 배포하는 데 사용하기가 매우 쉽다는 것을 알았습니다.

다른 우수한 제안 중 일부는 Eclipse가 아닌 환경에서 빌드하는 것이 더 좋을 수도 있습니다. oss는 Ant 를 사용하여 Nice 빌드를 만들어야합니다. (Maven, 지금까지 방금 고통을 주었지만 다른 사람들은 그것을 좋아합니다.)

70
tovare

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

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

33
Stephen Denne

개미의 zipfileset가 일을한다

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

몇 가지 다른 솔루션을 시도한 결과 One-JAR 작업하기가 가장 쉬우 며 정확하게 수행 할 수있었습니다. 필요한 모든 것을 포함하는 하나의 실행 가능한 JAR을 생성합니다.

1-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을 사용하는 가장 쉬운 방법은 개미와 함께하는 것입니다. 다음과 같이 작동하는 사용자 정의 "한 개의 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>
27
Ashley Mercer

Maven 사용자 인 경우 일반적으로 어셈블리 플러그인은 원하는 것을 수행하거나 잠재적으로 음영 플러그인을 수행하며 경우에 따라 조합을 수행합니다.

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

mvn Assembly:assembly

또는 더 다루어야 할 특별한 것이 있다면 다른 목표 중 하나입니다. 포함시킬 모든 JAR 파일은 Maven의 종속성 해결 프로그램에 의해 선택됩니다. 쉐이드 플러그인을 사용하는 경우 일반적으로 설치 목표의 일부이며 특정 프로젝트에서 지금하고 있습니다.

mvn install
mvn Assembly:single

Assembly:single 목표는이 경우 Spring 응용 프로그램에서 수명 문제를 해결하는 것입니다.

14
larsivi

JarJar 를 사용하면 JAR 파일이 다른 파일과 충돌하지 않도록 패키지 섀도 잉을 사용합니다.

8
Steve g

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

실제로 JRST 도구를 사용하여 ProGuard를 시도했지만보고 한대로입니다. 문제를 추적하려고 시도하여 jrst가 참조하는 ICU4J 라이브러리의 bug 와 관련이 있음을 발견했습니다. 문제는 사용 된 ICU 버전이 지금 매우 구식입니다. 따라서 icu.jar ICU4J 버전 3.2가있는 파일. 이제 ProGuard는 JRST 라이브러리와의 불일치에 대한 다른 많은 오류/경고를 발견합니다.

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

8
jrudolph

(앤드 리안을 기반으로) :

<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>
7
象嘉道

1 월 1 일 0.97이 http://one-jar.sourceforge.net 에 릴리스되었으며 Spring 및-와 같은 프레임 워크에 대한 지원이 확장되었습니다. Guice 다른 접근 방식에 문제가 발생할 수 있습니다. 또한 일부 JAR 파일이 One-JAR 외부에있는 클래스 로더 반전을 처리합니다 (예 : JDBC 번들로 제공되지 않는 드라이버).

1-JAR은 명령 줄이며 AntMaven 2 개의 플러그인이 있습니다. "jar"도구를 사용하여 빌드하는 것도 간단합니다.

Ference Hechler가 작성한 Eclipse Jar Exporter (Runnable)를 추천 할 수도 있습니다 .JAR 파일 세트를 래핑하는 간단한 접근 방식을 생각해 냈습니다. 그와 나는 One-JAR에서 일했지만 Jar Exporter는 다른 코드베이스를 기반으로합니다.

5
simontuffs

또는 Maven Assembly 플러그인 (mvn Assembly : assembly) 사용

3
Philip Helger

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

구성에서 클래스 이름을 지정하고 프레임 워크에 의해로드되는 Spring과 같은 경우 항상 작동하지는 않습니다.

3
user7094

여기에 필요한 도구는 JarSplice 라고 생각합니다. http://ninjacave.com/jarsplice

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

2
Nadir

그렇게하려면 maven shading plugin을 사용해야합니다. 나는 종종 독립형 jar 파일을 빌드하기 위해 maven을 사용하며 너무 강력합니다.

더보기:

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

0
hoang