【问题标题】:Creating Jar archive gives "Could not find or load main class"创建 Jar 存档给出“无法找到或加载主类”
【发布时间】:2015-11-13 09:13:39
【问题描述】:
$ cat Manifest.txt 
Main-Class: org.fenix.llanfair.Llanfair

$ cat org/fenix/llanfair/Llanfair.java | grep main
public static void main(String[] args) {
$ jar cfm Llanfair.jar Manifest.txt org
$ java -jar Llanfair.jar 
Error: Could not find or load main class org.fenix.llanfair.Llanfair
$ jar -xf Llanfair.jar
$ cat Llanfair/META-INF/MANIFEST.MF 
Manifest-Version: 1.0
Created-By: 1.8.0_25 (Oracle Corporation)
Main-Class: org.fenix.llanfair.Llanfair

$ ls Llanfair/org/fenix/llanfair/ | grep Llanfair
Llanfair$1.class
Llanfair$2.class
Llanfair$MenuItem.class
Llanfair$RecentMenuItem.class
Llanfair.class
$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

我希望 java -jar Llanfair.jar 启动我的应用程序,所以我不确定我在这里做错了什么。当我正常运行 java 代码时,lib/ 中有几个文件位于我的类路径中,是否需要包含这些文件?

如果重要的话,我的操作系统是 Mac OS 10.11.1。

【问题讨论】:

  • 你确定它是一个 RUNNABLE jar 文件吗?
  • -rwxr-xr-x 1 jbzdarkid 员工 185844 Nov 13 04:08 Llanfair.jar
  • 在调用 -java Llanfair.jar 时,尝试在 jar 中包含完整的誓言。示例:-java C:\Llanfair\Llanfair.jar
  • $ java -jar /Users/jbzdarkid/Github/Llanfair_decompile/Llanfair.jar 错误:无法找到或加载主类 org.fenix.llanfair.Llanfair
  • 你可以通过点击来启动jar吗?

标签: java jar manifest


【解决方案1】:

好像Llanfair.jar中的文件结构不对。

根据您的评论 jar -xf Llanfair.jar 创建一个类似的结构

Llanfair/META-INF/MANIFEST.MF 
Llanfair/org/fenix/llanfair/Llanfair.class

但是jar文件里面的结构必须是

META-INF/MANIFEST.MF 
org/fenix/llanfair/Llanfair.class

【讨论】:

  • jar -xf Llanfair.jar 创建一个名为 Llanfair 的文件夹,我没有 cd 进入该文件夹。
  • @jbzdarkid 此评论与您的​​其他答案jar -xf Llanfair.jarls Llanfair 不一致,后者导致ls: Llanfair: No such file or directory。然后你<manually extracted Llanfair.jar using Archive Utility>
  • 手动提取会创建该文件夹。抱歉不清楚。
【解决方案2】:

我错过了清单中的 Class-Path: 值,为什么它会以这种方式出现我无法理解。

$ cat Manifest.txt
Class-Path: lib/ui.jar lib/jnativehook-2.0.2.jar
Main-Class: org.fenix.llanfair.Llanfair

$ jar cfm Llanfair.jar Manifest.txt org lib
$ java -jar Llanfair.jar 
<normal application output>
^C$ jar -xf Llanfair.jar
$ ls Llanfair
ls: Llanfair: No such file or directory
<manually extracted Llanfair.jar using Archive Utility>
$ cat Llanfair/META-INF/MANIFEST.MF 
Manifest-Version: 1.0
Class-Path: lib/ui.jar lib/jnativehook-2.0.2.jar
Created-By: 1.8.0_25 (Oracle Corporation)
Main-Class: org.fenix.llanfair.Llanfair

$

编辑:它有点复杂。我试图在 Llanfair.jar 中包含 jar 依赖项。这是不允许的,因为 /reasons/.上面的工作是因为我在同一目录中运行 jar - 所以 lib/ui.jar 存在是因为我正在使用它来构建。

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 2017-11-06
    • 2015-03-05
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    相关资源
    最近更新 更多