【问题标题】:Trying to run jar file but getting cannot find class试图运行 jar 文件但找不到类
【发布时间】:2015-07-10 14:44:48
【问题描述】:

我正在尝试从 Win7 命令行运行一个 jar 文件,但我很害怕无法找到或加载主类 PRCreateExecution。

我可以在命令行上从 Win7 批处理文件成功构建 jar 文件。

我当前的清单文件名为 PRCreateExecution.mf,位于:C:\WDEclipseIDEWorkspace\MC3\src\PurchaseRequests\

清单文件包含:

Manifest-Version: 1.0
Created-By: 1.8.0_40 (Oracle Corporation)
Main-Class: PurchaseRequests.PRCreateExecution.class

(这里有额外的LF)

我运行 Win7 批处理文件来构建 jar C:\WDEclipseIDEWorkspace\MC3\src\PurchaseRequests:

jar -cvmf PRCreateExecution.jar C:\WDEclipseIDEWorkspace\MC3\bin\PurchaseRequests\PRCreateExecution.mf C:\WDEclipseIDEWorkspace\MC3\bin\PurchaseRequests\PRCreateExecution.class C:\WDJarFiles

jar 文件创建成功。

现在我正在使用这个批处理语句来尝试运行 jar 文件:

java -cp C:\WDEclipseIDEWorkspace\MC3\bin\PurchaseRequests;. PurchaseRequests.PRCreateExecution

从这里开始:

C:\WDEclipseIDEWorkspace\MC3\src\PurchaseRequests

但我找不到主类 PurchaseRequests.PRCreateExecution。

PRCreateExecution source sn-p:

package PurchaseRequests;
public class PRCreateExecution {
public static void main(String[] args)

感谢您的帮助...

【问题讨论】:

  • 通常当我从批处理文件运行.jar文件时,我使用代码java -jar JarFileName.jar
  • 我正在使用一个包,所以我很确定我的需要是 package.jarFilename.jar
  • 如果你去File > Export,你可以用main方法选择class。然后,将其导出为.jar 文件。这样,所有引用的代码都将被放入.jar 文件中。使用java -jar ClassWithMainMethodName.jar 运行它。

标签: java jar


【解决方案1】:

首先,听起来您实际上并没有尝试运行您的 jar 文件。您没有在命令行的任何地方提及它。

其次,您的类路径似乎是错误的 - 应该是

java -cp C:\WDEclipseIDEWorkspace\MC3\bin;. PurchaseRequests.PRCreateExecution

假设bin 目录包含PurchaseRequests 目录,其中包含PRCreateExecution.class

第三,你应该遵循 Java 的包命名约定——它们应该是小写的。

【讨论】:

  • 当我运行您建议的行时:java -cp C:\WDEclipseIDEWorkspace\MC3\bin;。 PurchaseRequests.PRCreateExecution 我得到一个错误:发生了一个 JNI 错误。
  • @user337447:这听起来像是一个不同的问题,我们没有足够的上下文来帮助你进一步。
  • @mp911de 给了我解决方案,但我看不到在哪里点击给他功劳。
  • @user337447:你可以点击打勾。
【解决方案2】:

我在使用 Netbeans 构建可分发的 jar 文件时遇到了类似的问题。我的建议是尝试直接从命令行及其所在位置的目录路径中运行 jar。

您的清单文件中可以看到类似这样的内容:

Manifest-Version: 1.0 Created-By: 1.8.0_40 (Oracle Corporation) Main-Class: PurchaseRequests.PRCreateExecution.class (extra LF is here)

我建议你改成如下:

Manifest-Version: 1.0 Created-By: 1.8.0_40 (Oracle Corporation) (insert CF)
Main-Class: PurchaseRequests.PRCreateExecution.class (extra LF is here)

您可以以此为参考:

https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

这篇文章也可能有用:

http://stackoverflow.com/questions/12767886/use-of-manifest-file-in-java

【讨论】:

    【解决方案3】:

    从清单中删除 .class 后缀。

    应该是这样的:

    Manifest-Version: 1.0
    Created-By: 1.8.0_40 (Oracle Corporation)
    Main-Class: PurchaseRequests.PRCreateExecution
    

    之后运行java -jar (name of your jar-file).jar

    【讨论】:

    • 我从 .mf 文件中删除了 .class。 java -jar PurchaseRequests.PRCreateExecution.jar 错误:无法访问jarfile PurchaseRequests.PRCreateExecution.jar
    • 我有一个错字,但您的回复就是解决方案。我怎么给你功劳?
    猜你喜欢
    • 2016-05-21
    • 2017-08-20
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2013-04-12
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多