2017-10-17 10 views
0

Java 8의 javapackager 명령은 독립형 실행 파일을 작성할 수 있습니다. 웹상의 예는 대개 하나의 jar 파일 만 사용하지만 응용 프로그램에 번들로 제공해야하는 jar 파일이 여러 개 있습니다. 문서에서는 번들러에 -B 옵션을 통해 classPath=path을 보내는 클래스 경로를 알리는 것이 가능하다고 명시합니다. 그러나, 패키지 애플리케이션 내부의 결과 <applicationname>.cfg 파일이 클래스 경로 인수에 의해 전혀 영향을받지 않는다javapackager로 만든 실행 파일에 클래스 경로를 어떻게 지정합니까?

app.classpath= 

를 말한다 라인입니다,하지만 난 수동으로 사용하는 모든 단지를 포함하도록 수정해야 응용 프로그램을 작동 시키십시오.

이 모든 것이 macOS에 관한 것이므로 다른 플랫폼에서 아직 시도 할 수 없습니다.

어떤 통찰력이라도 대단히 감사합니다. 예를 들어 둘 이상의 항아리를 사용하는 작업 예제.

답변

0

이 문제가있어서 cfg 파일의 클래스 경로를 수정할 필요가없는 대체 솔루션을 발견했습니다. 내 접근 방식은 Maven을 사용하지만 Ant 또는 스크립팅을 통해 수행 할 수 있습니다. 단지 더 많은 작업이 필요합니다. 주 항아리의 모든 내용과 모든 종속 항아리가있는 단일 항아리 파일을 만드는 것이 아이디어입니다. 이것은과 같이 하나의 Maven 플러그인으로 수행 할 수 있습니다 : 그것은 응용 프로그램 번들링하기 전에 실행되도록

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2-beta-4</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>com.yourapp.MainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

나는 prepare-package에 실행 단계를 설정,하지만 당신은 필요한 것을 변경할 수 있습니다. 최종 결과는 모든 종속 jar의 추출 된 내용을 포함하는 <appName>-<version>-jar-with-dependencies.jar이라는 단일 jar입니다. javapackager과 함께 사용하기 전에 java -jar <jarName>을 사용하여 테스트 할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 아마 작동하지만, 라이센스에 영향을 미칠 수도 있습니다. 왜냐하면 제 3 자로부터받은 jar 파일을 언제나 재 패키징 할 수있는 것은 아니기 때문입니다. 그래서, 원래의 문제에 대한 해결책은 여전히 ​​인정 될 것입니다. – ukor