2011-01-27 4 views
4

실행 가능한 jar 파일 빌드에 대한 질문. jar 파일 a.jar에 UI.class가 포함되어 있다고 가정합니다. 에 a.jar, b.JAR가와 C - 나는 누군가에게이 실행에 a.jar를 제공하려는 경우, 나는 3 개의 파일을 제공 할 필요가 지금중첩 된 jar 파일

Main-Class: UI 
Class-Path: . b.jar c.jar 

을 말한다 보관에 a.jar에서 메타 파일을 사용하고 있습니다 .항아리. 사용자는 모두 3을 같은 폴더에 넣고 a.jar을 더블 클릭하면됩니다. 단일 파일 (a.jar)을 제공 할 수 있다면 더 간단 할 것이며, JVM은 클래스를 사용하기 위해 b.jar 및 c.jar를 추출 할 수 있습니다. 이 2는 외부 라이브러리이므로 확장하고 클래스 파일을 a.jar에 다시 넣지 않으려합니다.

이 작업을 수행 할 수 있습니까? 그렇다면 jar 명령은 무엇이며 메타 파일에는 무엇이 있어야합니까? 현재 명령은

jar cmf metafile a.jar UI.class 

고맙습니다.

답변

1

이 도구를 보았습니까 OneJar? 또한 this은 OneJar에서 읽을 수있는 좋은 기사입니다.

외부 도구를 사용하지 않으려면 라이브러리/도우미 jar를 매니페스트의 클래스 경로에 넣고 기본 jar에 상대적인 디렉토리 경로에 jar 파일을 복사하는 방법이 있습니다.

EDIT : OP는 MANIFEST.MF 예제를 요구합니다. 이 예제를 One-Jar example jar 파일에서 처리했습니다.

Manifest-Version: 1.0 
Main-Class: com.simontuffs.onejar.Boot 
One-Jar-Expand: expand,doc 
+0

나는이 그것을 시도했습니다 또는

, 당신은 또한 여기에 ANT 태스크를 사용하여이를 달성 할 수는 예제 작동하지만 JAR 파일이 매우 작지 않으면 응용 프로그램이 매우 느리게 시작됩니다. –

+0

나는 이것을 시험해 보았다. 달리기를 시도 할 수 없었다. 문제 : boot-manifest.mf 파일에서 "Main-Class : package.ClassName"을 유지하면 "java -jar composite.jar"을 실행할 때 java를 찾을 수없고 행을 생략하면 "One-Jar-Main-Class : package.ClassName"만이 java는 "Main-class"항목이 없다고 불평합니다. 그래서 나는 갇혀있다 - 당신은이 파일이 어떻게 생겼는지에 대한 예를 들어 줄 수 있겠는가? 고맙습니다, 나는 그 포인터에 감사드립니다. –

+0

@Manidip Sengupta : 위의 편집 내용을 참조하십시오. – CoolBeans

0

OneJar는 몇 가지를 함께 묶는 데 적합하지만 일반적으로 매우 느리고 융통성이 없습니다. OneJar에서 발췌 한 것은 아니지만 작은 프로그램에서 빠르고 쉽게 배포 할 수 있기를 원하지 않는다면 사용하지 않을 것입니다.

잠시 사용했지만 izpack으로 전환했습니다. 그것은 일반적으로 잘 작동하는 것으로 밝혀진 단일 항아리로 설치 프로그램을 제공하고 Windows 관련 단축키와 같은 것을 지원합니다. 개미와도 쉽게 통합 할 수 있습니다.

0

다른 방법으로 사용 가능한 여러 도구 중 하나를 사용하여 설치 프로그램을 만들 수 있으며 설치 팩을 설치하면 응용 프로그램의 압축이 풀립니다.

1

사람들이 언급 한 것처럼 OneJar가 있지만 (특히 이클립스를 사용하는 경우) fatjar도 고려할 수 있습니다.

가 가
<target name="dist" depends="compile,static" description="Compiles and builds jar files"> 

    <mkdir dir="${dist}"/> 

    <jar destfile="${dist}/MYAPP.jar"> 
     <zipfileset src="${dist}/MY_OTHER_APP.jar"/>  
     <zipfileset src="${lib}/commons-io-1.4/commons-io-1.4.jar"/> 
     <zipfileset src="${lib}/commons-math-2.1/commons-math-2.1.jar"/> 

     <fileset dir="${res}" includes="*"/> 

     <manifest> 
      <attribute name="Main-Class" value=<where your main class is>/> 
     </manifest> 
    </jar> 
</target>