При запуске моего файла 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);
}
}
Любая идея, что еще я могу попробовать?
Конечно, внутри класса Main. Я вставил в исходный пост
можете ли вы указать дополнительную информацию, версию spring-boot и версию maven.
maven3 и спрингбут 2.1.1
Возможный дубликат Не удалось загрузить атрибут манифеста основного класса при запуске java -jar




Попробуйте добавить 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>
Это помогло! Можете ли вы объяснить, почему мне нужно его упаковать?
Если у вас есть spring-boot-starter-parent в вашем pom, вам не нужно определять repackage цель в плагине. Официальный документ: docs.spring.io/spring-boot/docs/2.3.0.RELEASE/maven-plugin/…
Причина этого в том, что вы не используете Spring в качестве родителя. Я предполагаю, что вы установили его в dependencyManagement, тогда вам нужно явно указать, какую цель нужно подключить для spring-boot-maven-plugin, чтобы получить исполняемый файл jar. В этом случае переупаковать.
На этапе жизненного цикла Мавен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 гол в официальной документации.
Привет @Ajeetkumar, не могли бы вы сообщить о новом вопросе с конфигурацией сборки и указать на него. Я буду рад помочь.
Вы можете указать родительский 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>
у вас есть основной класс @SpringBootApplication?