SpringBoot без основного атрибута манифеста (maven)

При запуске моего файла jar: java -jar target/places-1.0-SNAPSHOT.jar я получаю следующую ошибку:

no main manifest attribute, in target/places-1.0-SNAPSHOT.jar

Мой pom.xml содержит плагин spring-boot-maven:

 <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.places.Main</mainClass>
            </configuration>
 </plugin>

Я также пытался создать ФАЙЛ MANIFEST.MF и указать класс, но это не помогло.

Кроме того, я также пробовал:

<properties>
      <!-- The main class to start by executing "java -jar" -->
      <start-class>com.places.Main</start-class>
</properties>

Мой основной :

@SpringBootApplication
 public class Main {
public static void main(String[] args) throws InterruptedException {
    SpringApplication.run(Main.class,args);
  }
  }

Любая идея, что еще я могу попробовать?

у вас есть основной класс @SpringBootApplication?

Laksitha Ranasingha 25.02.2019 14:42

Конечно, внутри класса Main. Я вставил в исходный пост

JeyJ 25.02.2019 14:42

можете ли вы указать дополнительную информацию, версию spring-boot и версию maven.

Laksitha Ranasingha 25.02.2019 14:43

maven3 и спрингбут 2.1.1

JeyJ 25.02.2019 14:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
47
5
66 020
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Попробуйте добавить repackage цель к целям выполнения. В противном случае вам нужно будет явно вызывать плагин как mvn package spring-boot:repackage. При добавлении цели нужно звонить только mvn package.

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <mainClass>com.places.Main</mainClass>
        </configuration>

        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
       </executions>

</plugin>

Это помогло! Можете ли вы объяснить, почему мне нужно его упаковать?

JeyJ 25.02.2019 15:02

Если у вас есть spring-boot-starter-parent в вашем pom, вам не нужно определять repackage цель в плагине. Официальный документ: docs.spring.io/spring-boot/docs/2.3.0.RELEASE/maven-plugin/…

Bandham Manikanta 17.06.2020 19:42

Причина этого в том, что вы не используете Spring в качестве родителя. Я предполагаю, что вы установили его в dependencyManagement, тогда вам нужно явно указать, какую цель нужно подключить для spring-boot-maven-plugin, чтобы получить исполняемый файл jar. В этом случае переупаковать.

Kevin Valdez 02.07.2020 06:11

На этапе жизненного цикла Мавенpackage архив банка дополняется файлом Плагин Spring Boot Maven, а исходный файл банка (который должен был быть создан с использованием стандартного файла maven-jar-плагин) заменяется jar-файлом повышеннаяисполняемый.

Следовательно, вы должны либо сами задать цель spring-boot:repackage при создании своего модуля:

mvn package spring-boot:repackage

Или добавьте goal явно в конфигурацию плагина:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.places.Main</mainClass>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Вы можете найти более подробную информацию о Плагин Spring Boot Mavenrepackage гол в официальной документации.

github.com/ajeetkumarv/healthlog Пробовал и переупаковку, и плагин, но не помогло. основной метод находится в модуле приложения
Ajeetkumar 23.09.2020 13:19

Привет @Ajeetkumar, не могли бы вы сообщить о новом вопросе с конфигурацией сборки и указать на него. Я буду рад помочь.

tmarwen 24.09.2020 15:49

Вы можете указать родительский POM, например:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>

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

3 вещи:
- У вас есть родительская запись в вашем pom.
- Убедитесь, что ваш плагин находится в части сборки pom.
- У вас есть класс с аннотацией @SpringBootApplication.

пом.xml:

...  
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
  </parent>

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

И класс, который выглядит примерно так:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Reback your jar or war using the following command

mvn package spring-boot:repackage

Add the plugin in plugins parent node like below in pom.xml

<plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.sify.scdm.solutionconfigurator.ScdmApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
   



        

Добавьте плагин ниже. Это сработало для меня

 <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>1.6</version>
      <executions>
           <!-- Run shade goal on package phase -->
           <execution>
                <phase>package</phase>
                <goals>
                     <goal>shade</goal>
                </goals>
                <configuration>
                     <transformers>
                          <!-- add Main-Class to manifest file -->
                          <transformer implementation = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                               <mainClass>MainClass</mainClass>
                               <manifestEntries>
                                    <Class-Path>.</Class-Path>
                                </manifestEntries>
                          </transformer>
                          <transformer
                                 implementation = "org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                 <resource>META-INF/spring.handlers</resource>
                          </transformer>
                          <transformer
                                 implementation = "org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                 <resource>META-INF/spring.schemas</resource>
                          </transformer>
                     </transformers>
                </configuration>
           </execution>
      </executions>
</plugin>

добавлен тег сборки в pom.xml, как показано ниже, для меня решена проблема.

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

Другие вопросы по теме