Проблема с .jar “No main manifest attribute”

135
23 января 2020, 19:30

Ситуация такая: Есть maven проект, в нем несколько модулей (так нужно), есть класс с методом main(), в котором вызываются определенные методы, но это не суть. Я мало знаком с maven'ом, но мне нужно создать запускаемый jar файл этого проекта. Я работаю в intellij idea, чтобы создать jar я выполняю maven: clean + install, у меня создалось 3 папки target в каждом модуле. Метод main() находиться в модуле calc-console.

В консоли я выполняю java -jar calc-console-1.0-SNAPSHOT.jar и получаю no main manifest attribute in calc-console-1.0-SNAPSHOT.jar.

Может у меня проблема с pom.xml? Родительский pom я не трогал, а во внутренних pom я указывал только зависимости между модулями (не считая того, что уже было изначально сгенерировано).

Answer 1

JVM понятия не имеет, в каком именно классе есть метод main, ей надо подсказать. В тексте ошибки даже написано, как это сделать: нужно в манифесте определить атрибут Main-Class, в значении которого будет полное имя класса. Чтобы Maven сгенерировал этот атрибут автоматически, нужно добавить в pom.xml

<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/maven-v4_0_0.xsd">
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.1.1</version>
        <configuration>
          <archive>
            <manifest>
              <mainClass>ЗДЕСЬ ДОЛЖНО БЫТЬ ИМЯ КЛАССА</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
READ ALSO
java: Как в рантайм узнать откуда в коде выполняется обращение к элементам определенного пакета?

java: Как в рантайм узнать откуда в коде выполняется обращение к элементам определенного пакета?

Необходимо узнать в рантайме откуда выполняется обращение, к элементам определенного пакета (comdata

134
Не дать выйти курсору за пределы окна

Не дать выйти курсору за пределы окна

Хотел сделать 3d игру на javafx

133