命令行java错误:无法找到或加载主类

时间:2018-04-20 04:39:23

标签: java command-line jar manifest

我试图从命令行运行项目(Ubuntu 14.04)。主类叫Demo,我有一个Demo.java,一个Demo.class和一个Demo $ 1.class都在同一个目录中(我知道最好将它们分开)。

我编写了自己的Manifest文件,MANIFEST.MF,看起来像这样:

Main-Class:Demo

我确保用换行符结束它。

接下来,我想创建我的.jar文件。我用这个命令这样做了:

jar -cfm example.jar MANIFEST.MF *.class

然后,我尝试像这样运行我的项目:

java -Djava.library.path=/path/to/dependencies -jar example.jar

无论我尝试什么,我似乎都会收到以下错误:

Error: Could not find or load main class Demo

我以前从来没有从命令行编译/运行Java项目,可能我犯了一个愚蠢的错误而且无法弄明白。任何帮助表示赞赏!

编辑:根据vim:

,这是example.jar的内容
    " zip.vim version v27
" Browsing zipfile /home/ellen/bendersexample2/src/bendersexample/example.jar
" Select a file with cursor and press ENTER

META-INF/
META-INF/MANIFEST.MF
AnnotatedBenders.class
Demo$1.class
Demo.class
Demo$ModelType.class
ManualBenders$1.class
ManualBenders$BendersCallback.class
ManualBenders.class
Model.class
Problem.class
Solution.class
Solution$Verbosity.class
StandardModel.class

以下是jar中的META-INF / MANIFEST.MF的内容:

Manifest-Version: 1.0
Created-By: 1.8.0_161 (Oracle Corporation)
Main-Class: Demo 

更新:以下是Demo.java的有趣部分:

package bendersexample;

public final class Demo {

   /* Some functions */

  public static void main(final String[] args) {

    /* Some code */

 }

}

我将MANIFEST.MF更改为以下内容:

Main-Class:bendersexample.Demo

并重新生成example.jar文件。我仍然得到以下内容:

Error: Could not find or load main class bendersexample.Demo

我是如何生成类文件的? 要最初生成类文件,我执行了以下操作:

javac -classpath .:/opt/ibm/ILOG/CPLEX_Studio_Community128/cplex/lib/cplex.jar *.java

请告诉我还有什么我应该尝试的!谢谢

1 个答案:

答案 0 :(得分:0)

问题只是在/bendersexample文件夹中有Manifest而且在这个文件夹中也创建了.jar!我只需将这些东西移到父目录中,一切正常!

最终的Manifest文件使用bendersexample.Demo作为Main-Class,jar是从/bendersexample的父目录创建并运行的。

如果有人遇到这个问题,我会建议您在尝试其他任何事情之前先看一下您项目的结构,因为这是一个非常简单的修复!