Ошибка: не удалось найти или загрузить основной класс - файл JAR

1

У меня возникла проблема с созданием рабочего файла 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 и попробуйте.

  • 0
    Почему вы делаете это вручную, а не с помощью Maven или Gradle?
  • 1
    Я начинаю с Java и не хочу прыгать в нее без каких-либо базовых знаний. В основном, пытаясь сделать все вручную в начале.
Теги:
jar

1 ответ

3
Лучший ответ

Структура вашего JAR файла неверна. Вы не должны размещать каталог build там. Он должен выглядеть так:

.
├── example
│   └── HelloWorld.class
└── META-INF
    └── MANIFEST.MF
  • 0
    Большое спасибо. Это сработало. Тем не менее, я делаю это прямо сейчас с cd build && jar ... && cd .. Есть ли способ получить эту структуру каталогов, которая не требует изменения каталога?
  • 1
    Вы можете использовать опцию -C инструмента jar . Если ваш проект станет больше, вы захотите использовать инструмент сборки вместо скрипта bash. Де-факто стандартными инструментами сборки для Java являются Maven и Gradle .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню