java - 在嵌入式 jar 中创建带有入口点的可执行 jar

标签 java eclipse jar

我有一个 Eclipse 项目,它使用许多 .jar 文件作为依赖项,但没有源文件。有一个运行配置设置,它将主方法(入口点)定义为所包含的 jar 之一中的方法。它在 Eclipse 中运行良好,但是当我尝试使用可执行 jar 向导时,出现错误“无法从给定的启动配置中找到 main 方法。”

根据this tutorial ,可以使用 jar 命令行工具手动设置 jar 的入口点,但是我应该使用什么作为 main 方法的 .class 文件的路径,因为我没有直接拥有任何 .class 文件,只是嵌入 jar ?

或者,还有其他方法可以正确设置入口点吗?

最佳答案

标准 JAR 文件格式允许 list 和一组类/资源文件。当然,您可以将 JAR 文件打包在 JAR 文件中,但是标准 Java 类加载器无法以这种方式(从嵌入的 JAR 文件中)加载类。因此,您需要展开所有 JAR 文件并根据包重新打包它们。同样,如果您没有编写自己的类加载器,则情况确实如此。

如果您使用 Maven,幸运的是,Maven 提供了一些插件来完成此重新打包任务。请参阅Maven JAR plugin ,或 Maven Shade Plugin帮助创建所谓的 Uber JAR,它可以选择使用 Main-Class list 属性。或者,在没有 Maven 的情况下,您始终可以使用简单的 shell 脚本来扩展和重新加载类。

完成此操作后,您可以使用 java -jar myjar.jarjava -cp myjar.jar my.main.Class

关于java - 在嵌入式 jar 中创建带有入口点的可执行 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465133/

相关文章:

java - 将java随机数生成偏向某个数字

java - 不同JDK版本的Maven编译

java - 启动tomcat7 :run maven plugin within eclipse and debug

java - 无法在Hadoop jar上加载application.properties(NullPointerException)

java - VS 代码中的外部 Jar

java - 具有实例变量的通用内部类,该实例变量是另一个通用内部类的对象

java - Servlet 重定向

java - JMeter - 同时有多个请求但具有不同的值

java - 在 Eclipse 中启用断言检查的通用设置

linux - jar 文件的 Systemd 服务在几分钟后出现 "operation timed out"错误或停留在 "activating mode"