SpringBoot 没有主清单属性(maven)
SpringBoot no main manifest attribute (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
:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.places.Main</mainClass>
</configuration>
</plugin>
我也尝试创建一个 MANIFEST.MF
文件并指定 class,但它没有帮助。
另外,我也试过:
<properties>
<!-- The main class to start by executing "java -jar" -->
<start-class>com.places.Main</start-class>
</properties>
主要class:
@SpringBootApplication
public class Main {
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(Main.class,args);
}
}
知道我还能尝试什么吗?
尝试将 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>
在 Maven package
生命周期阶段,jar 存档由 [=43 增强=] Boot Maven Plugin 和原始 jar 文件(应该使用标准 maven-jar-plugin 构建)替换为 增强 可执行文件 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 Maven 插件 repackage
goal 的更多详细信息。
您可以指定父级 POM 例如:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
在打包目标期间,将执行重新打包目标,然后您将获得一个可执行的 jar。
3 件事:
- 你的 pom 中有父项。
- 确认您的插件位于 pom 的构建部分。
- 你有一个带有 @SpringBootApplicaion 注释的 class。
pom.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>
...
还有一个看起来像这样的 class:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
使用以下命令恢复您的 jar 或 war:
mvn package spring-boot:repackage
在 plugins
父节点中添加插件,如下所示 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>
添加插件 below.This 对我有用
<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>
当运行我的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
:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.places.Main</mainClass>
</configuration>
</plugin>
我也尝试创建一个 MANIFEST.MF
文件并指定 class,但它没有帮助。
另外,我也试过:
<properties>
<!-- The main class to start by executing "java -jar" -->
<start-class>com.places.Main</start-class>
</properties>
主要class:
@SpringBootApplication
public class Main {
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(Main.class,args);
}
}
知道我还能尝试什么吗?
尝试将 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>
在 Maven package
生命周期阶段,jar 存档由 [=43 增强=] Boot Maven Plugin 和原始 jar 文件(应该使用标准 maven-jar-plugin 构建)替换为 增强 可执行文件 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 Maven 插件 repackage
goal 的更多详细信息。
您可以指定父级 POM 例如:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
在打包目标期间,将执行重新打包目标,然后您将获得一个可执行的 jar。
3 件事:
- 你的 pom 中有父项。
- 确认您的插件位于 pom 的构建部分。
- 你有一个带有 @SpringBootApplicaion 注释的 class。
pom.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>
...
还有一个看起来像这样的 class:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
使用以下命令恢复您的 jar 或 war:
mvn package spring-boot:repackage
在 plugins
父节点中添加插件,如下所示 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>
添加插件 below.This 对我有用
<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>