Не удалось загрузить атрибут манифеста Main-Class во время запуска java -jar

Я успешно построил проект Spring MVC с mvn clean package, выполнив этот учебник.

Теперь я пытаюсь запустить службу с помощью:

mvn clean package && java -jar target/gs-serving-web-content-0.1.0.jar

Но я получаю эту ошибку:

Не удалось загрузить атрибут манифеста Main-Class из целевой/GS-Порция-веб-контент 0.1.0.jar

Я что-то пропустил?

Ответы

Ответ 1

Если вы работаете с Spring Boot, это решит вашу проблему:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.2.5.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Справочное руководство | Spring Boot Maven Плагин

Ответ 2

Возможно, вам не хватает Spring плагина Boot Maven.

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

Ответ 3

Вы должны указать его в своем pom.xml - это сделает ваш jar исполняемым со всеми зависимостями (замените your.main.class):

<!-- setup jar manifest to executable with dependencies -->
<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
      <manifest>
        <mainClass>your.main.class</mainClass>
      </manifest>
    </archive>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
       <goal>single</goal>
      </goals>  
    </execution>
  </executions>
</plugin>

Ответ 4

Вам не хватает maven-jar-plugin, в котором вам нужно добавить тег manifest.

Ответ 5

Для весенней загрузки я создал файл MANIFEST.MF в папке META-INF.

в моей STS IDE я поместил папку META-INFO в папку src/main/resources следующим образом:

screenshot from STS IDE (eclipse project)

содержимое файла MANIFEST.MF:

Manifest-Version: 1.0
Implementation-Title: bankim
Implementation-Version: 1.5.6.RELEASE
Archiver-Version: Plexus Archiver
Built-By: Yourname
Implementation-Vendor-Id: com.bankim
Spring-Boot-Version: 1.5.6.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.bankim.BankimApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_131
Implementation-URL: http://projects.spring.io/spring-boot/bankim/
  1. Каждое упоминание о "bankim"/"Bankim" относится к названию моего проекта, поэтому замените его на название вашего проекта, которое
  2. обратите особое внимание на значение "Start-Class". он должен содержать "путь" к классу, в котором есть ваш метод main.
  3. строка: Main-Class: org.springframework.boot.loader.JarLaunchers следует оставить как есть.

**** вышеупомянутый манифест был создан для меня с помощью "spring-boot-maven-plugin", упомянутого выше "Mradul Pandey" (ответ 2 сентября 15 в 4:50)

Надеюсь это поможет

Ответ 6

проверить порядок

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

это должно быть выше

dockerfile-maven-plugin, иначе произойдет переупаковка

это решило мою проблему отсутствия основного атрибута в манифесте.

Ответ 7

При экспорте проекта вы забыли создать файл манифеста

Ответ 8

У меня был spring-boot-maven-plugin но все равно я получал сообщение об ошибке в отношении основного класса.

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

Наконец мне пришлось использовать maven-jar-plugin и добавить mainClass

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <archive>
            <manifest>
            <mainClass>com.org.proj.App</mainClass>
            </manifest>
          </archive>
        </configuration>
    </plugin>

И это было хорошо идти!