maven не добавил основной класс должным образом - PullRequest
3 голосов
/ 25 апреля 2019

Я хочу скомпилировать свой Java-проект с помощью maven, но он не добавил основной класс в файл манифеста.Так что я не могу запустить банку за пределами Intellij.Я добавил основной класс в свой файл pom.xml, но он не отображается в файле манифеста.

Я использую функцию сборки intellij на компьютере с Win10 и maven3 (IntelliJ IDEA 2018.3.1 / plugins / maven / lib / maven3).

Если я запускаю jar, я получаю ошибку

$java -jar myJar.jar
kein Hauptmanifestattribut, in myJar.jar

(по-немецки: без атрибута основного манифеста, в myJar.jar , я не знаю точного английского перевода для этого, но это означает: основной класс не указан )

Я пробовал несколько плагинов maven (maven-compile,maven-jar, maven-shade) и способы указать основной класс, но ни один из них не добавил его в файл манифеста.Единственный способ заставить это работать, это когда я добавил строку

Main-Class: Main

вручную.

мой файл pom (да, мой основной класс называется Main и да, он отлично работает, когда я добавил его вручную)

...

    <groupId>com.myname</groupId>
    <artifactId>myProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

...

файл манифеста

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dspicuzz
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_65

Если я добавил строку вручную, он отлично работает

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dspicuzz
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_65
Main-Class: Main

Но я не могу заставить Мэйвена сгенерировать его для меня таким образом.

1 Ответ

1 голос
/ 25 апреля 2019

Я использую функцию сборки intellij на машине с Win10 и maven3 (IntelliJ IDEA 2018.3.1 / plugins / maven / lib / maven3).

Сборка IntelliJ не восстановит ваш файл jar. Попробуйте запустить цель пакета, чтобы воссоздать файл jar.

Убедитесь, что имя вашего пакета соответствует структуре каталогов: com.mytest.Main

Если нет пакета, он также будет работать, но убедитесь, что структура каталогов также не имеет структуры пакета.

Это будет работать:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.myname</groupId>
    <artifactId>runnable</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.myname.Hello</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

</project>

Hello.java

package com.myname;

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

пробег:

C:\runnable>java -jar target\runnable-1.0-SNAPSHOT.jar
Hello

И это сгенерированный файл манифеста с помощью плагина maven-jar:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: egallardo
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_181
Main-Class: com.myname.Hello

Также убедитесь, что каталог исходных файлов правильно помечен в intellij (светло-голубым). Это изображение для версии без пакета.

enter image description here

Это пошаговые инструкции по созданию проекта с нуля с помощью IntelliJ:

  • Создать новый проект
  • Выберите Maven
  • Выберите свой SDK (Java 1.8 или около того)
  • Оставить «Создать из архетипа» не отмеченным
  • Нажмите Далее
  • Идентификатор группы: com.myapp
  • Идентификатор артефакта: работает
  • Версия: 1.0-SNAPSHOT (по умолчанию)
  • Нажмите далее
  • Название проекта: выполняется (по умолчанию)
  • Расположение проекта: C: \ code \ java \ runnable
  • Нажмите Готово
  • Выберите «Включить автоматический импорт», если будет предложено
  • Скопируйте и вставьте разделы <build> и <properties> в файл pom.xml
  • Развернуть работающий -> src -> main -> java
  • щелкните правой кнопкой мыши папку Java и выберите Создать -> класс Java
  • Введите Main в качестве имени нового класса и вида: class (по умолчанию)
  • Введите psvm и нажмите вкладку для генерации основного метода
  • Добавить оператор печати: System.out.println ("Hello");
  • Использование двойного щелчка на вкладке maven
  • Файл JAR будет создан в C: \ code \ java \ runnable \ target \ runnable-1.0-SNAPSHOT.jar
  • попробуйте запустить его с:

java -jar C:\code\java\runnable\target\runnable-1.0-SNAPSHOT.jar

Убедитесь, что дата файла JAR соответствует времени, когда вы щелкнули пакет. Если вышеупомянутое не работает, возможно, вы нашли ошибку. Попробуйте другую версию JDK.

...