如何为使用 javapackager 创建的可执行文件指定类路径?

How can I specify a classpath for executables created with javapackager?

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

app.classpath=

它完全不受 classPath 参数的影响,但我必须手动编辑它以包含应用程序使用的所有 jar 以使其工作。

所有这些都是在 macOS 上,我还不能在其他平台上尝试。

非常感谢任何见解 - 例如,一个使用多个 jar 的工作示例。

我遇到了这个问题,并找到了一个不需要修改 cfg 文件的 class 路径的替代解决方案。我的方法使用 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 的提取内容。您可以先使用 java -jar <jarName> 对其进行测试,然后再将其与 javapackager.

一起使用

文档略有缺陷:

-Bclasspath=

小写 p 而不是大写 P 有效(在 Windows 和 MacOS 上测试)。