IntelliJ строит неправильный JAR: не удалось найти или загрузить основной класс

У меня есть простой пример

public class FileSystemReadFile {
    public static void main(String[] args) throws IOException {
        System.out.println("Reading the file" + args[0]);
    }
}

который создается в IntelliJ, где я хочу создать JAR файл; Итак, что я сделал:

  • Добавлен артефакт с зависимостями (предположительно у меня есть);
  • Убедитесь, что MANIFEST.MF находится в src\main\resources\META-INF\, как уже упоминалось здесь, на сайте.
  • Запустите сборку Artifact, которая дала мне JAR файл в папке out, и я запустил этот файл jar, который сказал мне: "Не удалось найти или загрузить основной класс"
    java <name>.jar

Вы можете увидеть, что основной класс добавлен в MANIFEST, и расположение манифеста также прекрасное.

Структура проекта

Когда я открываю созданный JAR файл, я вижу одно и то же содержимое MANIFEST, я вижу множество модулей зависимостей, но я не вижу свой класс!

введите описание изображения здесь

Я подозреваю, что это причина. Любые идеи?

Ответ 1

Не уверен, что было с IntellJ, но я снова восстановил артефакты, и все было в порядке.

hadoop jar <Jar-name>
java -jar <Jar-name>

Все работает нормально.

Ответ 2

Если вы включите какие-либо подписанные JAR в ваше приложение, а затем используйте IntelliJ для сборки артефактов, он будет извлекать JARS и связывать их с вашим скомпилированным выводом.

В этом случае возникает исключение безопасности JAVA. Я видел это с Eclipse Paho и Bouncy Castle, которые подписаны.

Вы можете проверить, подписан ли какой-либо из JAR-библиотек библиотеки, используя инструмент jarsigner.

jarsigner -verify -verbose  <path to library JAR>

Измените настройку артефакта IntelliJ так, чтобы они попадали в виде библиотек, а не извлекались. Извлечение отменяет сертификат, как вы ожидали.

Посмотрите, как Paho и BCP не извлекаются при создании артефакта

Попробуйте создать фиктивный проект только с Main. Добавьте 1 библиотеку JAR (которую вы пытаетесь построить вместе) за раз. Каждый раз создавайте выходной JAR до разрыва Main. Вот как я нашел это.

IntelliJ должен предупредить вас.....