运行JAR文件时找不到或加载主类

5

我知道这是一个普遍的问题,但我尝试了很多方法来使它工作。

主类名:Test

我已经包含了一个带有Main-Class属性的MANIFEST.MF文件,如下所示:

  1. Main-Class: src.client.Test
  2. Main-Class: classes.client.Test
  3. Main-Class: client.Test
  4. Main-Class: Test

以上所有方法都没有起作用。(jar文件位于deploy目录中)

这是我的项目内容:

enter image description here

在我的部署配置文件中,我已经包括了:

  1. MANIFEST.MF
  2. lib目录
  3. 文件组贡献者的所有合并内容(Test.class,我正在使用的一个外部jar文件)

注意:我正在使用JDeveloper 12c IDE


我尝试过的相关文章:

无法在Jar文件中找到或加载主类

无法运行jar文件:无法找到或加载主类Hello


请问您能否提供您所遇到的确切异常信息?也许是未解决的依赖关系导致主程序加载失败?我们需要完整的堆栈跟踪。 - Anand Vaidya
2个回答

1

我正确地提到了Main-Class属性,尽管Class-Path是错误的


"

.jar文件的结构如下:

"

myjar/client/Test.class

myjar/META-INF/MANIFEST.MF

myjar/myexternal.jar


我必须在MANIFEST.MF中提到myexternal.jar,如下所示:

正确:Class-Path: ../myexternal.jar

错误:Class-Path: myexternal.jar

我不知道这是否有意义,因为错误的提及myexternal.jar不能导致加载主类时出现异常。

尽管如此,这样做可以解决问题!


据我所知,两者都是错误的。对于普通的Java来说,不可能以那种方式指定包含在其他jar中的jar文件。也许相对于加载包含应用程序的代码库存在一个有效的..\myexternal.jar文件? - EOhm

1
你的 Jar 文件应该具有以下结构:
  yourjar.jar
  |-client
  | |-Test.class
  |-com
  | |-external
  |   |-package
  |     |-SomeClass.class
  |     |-SomeOtherClass.class
  | ....
  |-META-INF
    |-MANIFEST.MF

你的MANIFEST.MF文件应该包含

Main-Class: client.test


我应该使用java命令打包吗?我正在尝试通过IDE以自动化方式完成。 - Phill Alexakis
仍然无法识别 Main-Class,我有你提到的完全相同的结构(除了 com/external/package 等)。 - Phill Alexakis
这真的很奇怪,如果我在同一个“dir”中提取“jar”并执行“java -jar myjar.jar”,它就可以运行!只有当“external.jar”和“myjar.jar”在同一个“dir”中时才有效。这怎么可能?(即使我从我的“dir”中删除了“Test.class”,它仍然可以运行我的“myjar.jar”(“myjar.jar”包含“external.jar”,“client”,“META-INF”) - Phill Alexakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接