2017-10-17 38 views
0

Java 8中的javapackager命令能够创建独立的可执行文件。网上的例子通常只使用一个jar文件,但我有几个需要捆绑到应用程序中的jar文件。该文档指出可以通过-B选项告诉捆绑器发送classPath=path的类路径。然而,在生成的<applicationname>.cfg文件打包的应用程序里面有,说如何为使用javapackager创建的可执行文件指定类路径?

app.classpath= 

这不是由CLASSPATH参数在所有受影响的线路,但我必须手动编辑它以包括由所使用的全部罐子应用程序来使它工作。

所有这些都在macOS上,我无法在另一个平台上试用它。

任何洞察力非常赞赏 - 例如,使用多个jar的工作示例。

回答

0

我有这个问题,并找到了一个不需要修改cfg文件的类路径的替代解决方案。我的方法使用Maven,但可以使用Ant或脚本完成;只需要更多的工作。这个想法是创建一个包含主jar和所有依赖jar的所有内容的jar文件。这可以用一个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,使其应用​​程序绑定前运行,但你可以改变需要。最终结果是一个名为<appName>-<version>-jar-with-dependencies.jar的单个jar包,其中包含所有依赖jar的提取内容。在与javapackager一起使用之前,您可以使用java -jar <jarName>进行测试。

+0

谢谢你的建议。这很有效,但也可能会产生许可证影响,因为它不一定可以重新打包从第三方收到的jar文件。所以,原始问题的解决方案仍然值得赞赏。 – ukor

相关问题