У меня возникла проблема с созданием рабочего файла JAR. Я могу запустить файл.class следующим образом:
$ java -cp build/ example.HelloWorld
Hello World!
Но работает как банка (изнутри моего скрипта сборки):
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
- это скрипт bash, который создает JAR файл. Вот:
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!");
}
}
Запуск JAR файла, как видно build.sh
результатов build.sh
$ ./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. Я действительно не знаю, что я делаю неправильно, и у меня закончились идеи для Google и попробуйте.
Структура вашего JAR файла неверна. Вы не должны размещать каталог build
там. Он должен выглядеть так:
.
├── example
│ └── HelloWorld.class
└── META-INF
└── MANIFEST.MF
cd build && jar ... && cd ..
Есть ли способ получить эту структуру каталогов, которая не требует изменения каталога?
-C
инструмента jar . Если ваш проект станет больше, вы захотите использовать инструмент сборки вместо скрипта bash. Де-факто стандартными инструментами сборки для Java являются Maven и Gradle .