我在创建有效的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的新手。我真的不知道我做错了什么,并且没有想法去谷歌并尝试。
答案 0 :(得分:3)
您的JAR文件的结构是错误的。您不能将build
目录放在那里。它必须如下所示:
.
├── example
│ └── HelloWorld.class
└── META-INF
└── MANIFEST.MF