错误:无法找到或加载主类--JAR文件

时间:2015-04-10 19:44:07

标签: java jar

我在创建有效的JAR文件时遇到问题。我可以按如下方式运行我的.class文件:

$ java -cp build/ example.HelloWorld 
Hello World!

但是作为jar(从我的构建脚本中)运行失败:

java -cp build/ -jar dist/HelloWorld.jar
Error: Could not find or load main class example.HelloWorld

我将使用简单的Hello World项目简化我遇到的问题:

.
├── build
│   └── example
│       └── HelloWorld.class
├── build.sh
├── dist
│   └── HelloWorld.jar
└── src
    └── example
        └── HelloWorld.java

class个文件需要进入build文件夹。 JAR文件需要位于dist文件夹中。 build.sh是一个构建JAR文件的bash脚本。这是:

mkdir -p build && \
mkdir -p dist && \                                         
javac -cp src/ src/example/HelloWorld.java -d build && \
jar -cfe dist/HelloWorld.jar example.HelloWorld build/ && \
java -cp build/ -jar dist/HelloWorld.jar

HelloWorld.java:

package example;

public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}

build.sh中可以看到运行JAR文件会导致

$ ./build.sh 
Error: Could not find or load main class example.HelloWorld

如上所述,直接运行应用程序非常有效。

以下是HelloWorld.jar的结构。

.
├── build
│   └── example
│       └── HelloWorld.class
└── META-INF
    └── MANIFEST.MF

MANIFEST.MF的内容。

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

我已经工作了6年,只有C和C ++。认为我是Java的新手。我真的不知道我做错了什么,并且没有想法去谷歌并尝试。

1 个答案:

答案 0 :(得分:3)

您的JAR文件的结构是错误的。您不能将build目录放在那里。它必须如下所示:

.
├── example
│   └── HelloWorld.class
└── META-INF
    └── MANIFEST.MF