使用弹簧引导对Maven插件与进行打包时出现异常如何解决

  介绍

使用弹簧引导对Maven插件与进行打包时出现异常如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

【背景】spring-boot项目,打包成可执行jar,项目内有两个带主要有方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个主要的方法并且所在类都没有使用@SpringBootApplication注解),砰的一声。xml如下

& lt; plugin>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-maven-plugin   & lt; version> 1.5.3.RELEASE   & lt; executions>   & lt; execution>   & lt; goals>   & lt; goal> repackage   & lt;/goals>   & lt;/execution>   & lt;/executions>   & lt;/plugin>

【问题】

执行mvn清洁计划,报错如下(说点不相关的,使用安装同理。因为spring-boot:重新包装目标(目标)(下文会说)被绑定在包构建阶段(阶段),而包阶段在安装阶段之前,指定构建阶段之前的阶段都会执行。详细参见:介绍构建生命周期)

(错误)未能执行目标org.springframework.boot: spring-boot-maven-plugin: 1.5.3。更正发布:重新包装(默认)> & lt; plugin>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-maven-plugin   & lt; version> 1.5.3.RELEASE   & lt; configuration>   & lt; mainClass> com.xx.webapps.api.main.WebappsApiBidMain   & lt;/configuration>   & lt; executions>   & lt; execution>   & lt; goals>   & lt; goal> repackage   & lt;/goals>   & lt;/execution>   & lt;/executions>   & lt;/plugin>

弹簧引导Maven插件提供了几个目标(目标),我们在& lt; executions>标签里配置的& lt; goal> repackage对应spring-boot:重新包装这个目标。

    <李>重新包装:auto-executable创建一个jar或war文件。它可以取代常规工件或可以被附加到一个单独的分类器的构建角度。李李 <> run:跑弹簧启动应用程序和几个选项来将参数传递给它。李李 <>启动和停止:弹簧启动应用程序集成到集成测试阶段,应用程序开始之前。

插件重写你的清单,特别是它管理theMain-ClassandStart-Classentries,如果默认不要# 39;t工作你需要配置这些(而不是震惊的插件)。TheMain-Classin清单实际上是由thelayoutproperty引导插件的

(译)该插件重写了清单文件(清单。曼氏金融,也就是罐子里面的清单文件),此文件管理着主类(主类)和开始类(上课)入口。清单文件中的主类由布局控制

这里的上课就是我们配置的& lt; mainClass>,而主类受布局属性的控制,别被名字搞乱了(是不是很诡异?看看解决方法二就明白为啥如此诡异了)....来张图直观的感受下,对应使用上面xml配置打包后的清单文件(清单。MF):

使用弹簧引导对Maven插件与进行打包时出现异常如何解决

布局属性默认不需要配置,插件会自动推断。不同的布局属性清单文件里面的主类也会相应的不同,比如布局不配置或者配置为JAR对应的主类是JarLauncher,布局配置为战争对应的主类是WarLauncher。

[有限制条件]解决方法二:如果你的pom继承自spring-boot-starter-parent(注意此前提),也可以直接在& lt; properties>配置& lt; start-class>(其实这里的上课直接对应清单文件里的上课):

& lt; properties>   & lt; start-class> com.xx.webapps.api.main.WebappsApiBidMain   & lt;/properties>

解决方法三:打包的的时候注释掉其他的@SpringBootApplication……或者你有两处主要方法并且都没有使用@SpringBootApplication注解,注释掉一个主方法.....这就是第三种解决方法233333

【随便说说】

说说spring-boot:重新包装这个目标.Spring引导Maven插件这个插件包含一系列目标(目标),我们在& lt; executions>标签里配置的& lt; goal> repackage对应spring-boot:重新包装这个目标,看下官方介绍:

spring-boot:重新包装把可执行jar/战争。

把现有JAR和战争档案,这样他们可以从命令行执行使用java JAR。Withlayout=NONEcan也仅仅是用来包与嵌套依赖JAR(和没有主类,所以无法执行)。

简单点说,这货重新打包个可执行的jar/战争,可以在命令行使用jar执行。如果指定布局为没有那就没有主类只是打个普通的jar(不可执行),一般不会这么做。

一般情况,这个目标会打一个新的jar/战争,并把maven默认打的jar或war添加。原后缀,在目标目录下可以看到:

使用弹簧引导对Maven插件与进行打包时出现异常如何解决