【问题标题】:Manifest.mf: reference Main-class in jar fileManifest.mf:引用 jar 文件中的 Main-class
【发布时间】:2014-03-12 18:28:14
【问题描述】:

我正在制作一个可运行的 jar,其中我的主类是 eclipse 的 JarRsrcLoader。

这是我的包结构

org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

还有我的清单

Manifest-Version: 1.0
Rsrc-Class-Path: ./selenium-server-standalone-2.39.0.jar
Class-Path: . 
Rsrc-Main-Class: test.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

以及我的 jar 中的目录结构:

当我尝试从命令行运行 jar 时:

java -jar output.jar

我明白了:

Error: Could not find or load main class org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

谁能看出我哪里出错了?当我将org 文件夹与output.jar 放在同一目录中时,它运行良好。我希望从 jar 中找到它,这样就没有外部依赖项。谢谢

更新

类文件在 jar 中:

【问题讨论】:

  • 混淆 org 和 output.jar.org 文件夹在哪里?
  • 您是否确认您的 output.jar 中的文件 org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.**class** 存在?
  • @Absurd-请注意文件存在,请参阅更新。
  • @NiksTyagi org 文件夹在 output.jar 中。当我将它移动到与 jar 相同的目录时,jar 运行。我希望它在所有内容都包含在 jar 中时运行。
  • java -version 的输出是什么以及你在 Eclipse 中使用的源代码级别是什么?

标签: java jar manifest executable-jar


【解决方案1】:

虽然很久以前就有人问过这个问题,但这对我有用

尝试在您的工作区中创建一个包,例如 com.eclipse.jdt.internal.jarinjarloader 并放置所有可以从 google 下载的文件 JarRsrcLoader.java、RsrcURLConnection.java、RsrcURLStreamHandler.java 和 RsrcURLStreamHandlerFactory.java。 然后如图写Manifest

 Build-Jdk: 1.7.0_55
    Class-Path: .
    Rsrc-Main-Class: com.abc.Master
    Main-Class: com.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
    Rsrc-Class-Path: ./ lib/xyz.jar 

【讨论】:

  • 我也喜欢这个解决方案。但是:你能用 maven 自动化它吗?
  • @user1414745 我认为 maven shade 插件会有所帮助。
【解决方案2】:

尝试其他几种 Uber jar 工具之一:

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 2012-11-12
    • 2021-03-02
    • 1970-01-01
    • 2015-03-23
    • 2015-03-25
    • 2011-04-16
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多