【问题标题】:"Could not find or load main class" when running executable JAR via "java -jar" [duplicate]通过“java -jar”运行可执行 JAR 时“找不到或加载主类”[重复]
【发布时间】:2020-09-24 19:07:39
【问题描述】:

这是我执行 java -version 时的输出

openjdk 版本“1.8.0_252” OpenJDK 运行时环境 (build 1.8.0_252-8u252-b09-1ubuntu1-b09) OpenJDK 64 位服务器 VM(内部版本 25.252-b09,混合模式)

当我尝试使用 java -jar 执行我的文件时,会显示一条消息,无法找到/加载主类。我确信这行得通,因为我在 Windows 中尝试过它并完成了工作。我在一台 linux 机器上试过,也可以工作。我不知道我做错了什么,顺便说一下我是linux的初学者。

我试图从我的计算机中删除所有 java 的东西并重新安装 java 8 版本但仍然无法正常工作。

这就是我尝试执行命令的方式。我有一个可选的java,用那个让我打开它。

作为管理员是同样的错误,但在西班牙语中。

清单

Ant-Version: Apache Ant 1.9.7
Created-By: 1.8.0_231-b11 (Oracle Corporation)
Class-Path: lib/hamcrest-junit-2.0.0.0.jar lib/java-hamcrest-2.0.0.0.j
 ar lib/testFx-3.1.0.jar lib/testfx-core-4.0.13-alpha.jar lib/testfx-j
 unit-4.0.13-alpha.jar lib/javax.ws.rs-api-2.0.jar lib/asm-all-repacka
 ged-2.2.0-b21.jar lib/cglib-2.2.0-b21.jar lib/guava-14.0.1.jar lib/hk
 2-api-2.2.0-b21.jar lib/hk2-locator-2.2.0-b21.jar lib/hk2-utils-2.2.0
 -b21.jar lib/javax.annotation-api-1.2.jar lib/javax.inject-2.2.0-b21.
 jar lib/javax.servlet-api-3.0.1.jar lib/jaxb-api-2.2.7.jar lib/jersey
 -entity-filtering-2.5.1.jar lib/jersey-media-moxy-2.5.1.jar lib/org.o
 sgi.core-4.2.0.jar lib/osgi-resource-locator-1.0.1.jar lib/persistenc
 e-api-1.0.jar lib/validation-api-1.1.0.Final.jar lib/jersey-client.ja
 r lib/jersey-common.jar lib/jersey-container-servlet.jar lib/jersey-c
 ontainer-servlet-core.jar lib/jersey-server.jar lib/eclipselink.jar l
 ib/UtillitiesProject.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: windowsapplication.WindowsAppicationReto2

有什么想法吗?

【问题讨论】:

  • 你是如何尝试运行 jar 的? java -jar (jar 名称) .如果没有错的话,能不能以管理员身份打开终端试一次?
  • 请使用项目的 MANIFEST.MF 和您尝试运行的整个命令更新您的问题。
  • 当您使用清单和命令更新问题时,还包括实际的错误消息,复制到我们在此处阅读的文本中。
  • @zforgo 完成了。是你要求的吗?
  • @JarssS8 Java 版本将运行该程序的事实表明 jar 文件已正确构建并包含必要的内容。我想知道 java 的 1.8.0_252 安装是否可能有问题并因此导致问题。你能用那个版本编写和执行一个“Hello World”程序吗?没有包,没有库,只需打印出 Hello World。

标签: java ubuntu jar executable-jar ubuntu-20.04


【解决方案1】:

答案很简单:您的清单中有一个拼写错误,这在您的屏幕截图和您发布的清单中都可以清楚地看到:

请更改

Main-Class: windowsapplication.WindowsAppicationReto2

Main-Class: windowsapplication.WindowsApplicationReto2

App~l~用小写“L”表示。

【讨论】:

  • 这是一个很好的捕捉,但留下了一个问题,为什么它在另一个系统上工作。现在我再看一遍,类路径的最后一个 jar 中的拼写“Utilities...”似乎多了一个小写 L。
  • 由于清单中的拼写错误,它无法在其他系统上运行。在构建他在 Linux 上尝试过的版本之前,OP 一定已经更改了拼写错误。或者,也许在他的构建系统中有特定于平台的设置、具有差异的重复文件或其他任何东西。没有MCVE,我只能推测并且我不喜欢。我喜欢分析事实。我不明白为什么大多数在这里提问的人似乎并不关心写出好的问题,即使这意味着他们只会得到推测性的答案而不是解决问题的方法。
猜你喜欢
  • 2019-02-21
  • 2016-02-16
  • 1970-01-01
  • 2016-05-21
  • 2014-09-04
  • 1970-01-01
  • 2021-06-06
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多