1、问题还原,无论怎样操作,打包都是失败
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.4.RELEASE:repackage (repackage) on project guigu-***mon: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.3.4.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR]
2、这个问题,相信不少搬砖民工都遇到过。网上有很多解决的方案,也许有的可以解决,有的不能解决。在这里我罗列几种大家的方案:
① 注释掉 父工程的 plugin
首先,我的maven版本是 3.8.5;
引入的 pring-boot-starter-parent版本号为2.3.4.RELEASE;
最初怀疑这俩地方需要调整。
最后跟着网上的教程,把父pom中的maven-plugin注释掉之后,就成功了。
此处我仍然保留调整上面俩版本的意见,我只是觉着这次恰巧解决了问题而已。
② 此项目不需要做打包,只需要提供公共镜像作为依赖,有两种方案:
一
添加spring-boot启动类
将pom.xml中的spring-boot-maven-plugin相关配置注释掉
pom.xml中spring-boot-maven-plugin相关配置修改为普通的maven--plugin配置即可
对于不需要添加启动类的服务模块,去掉该模块中pom.xml的maven打包插件spring-boot-maven-plugin
二
在此项目上,找个文件夹随意创建个main函数,基本就可以解决掉。
③ 清理IDEA缓存
File -> Invalidate Caches
④ 添加版本号
首先打开pom.xml文件进行查看
Ctrl+F搜索spring-boot-starter-parent
找到<artifactId>spring-boot-starter-parent</artifactId>这一行。
下面一行就是版本号。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
复制 <version>版本号</version>
然后修改
将上面查找到的版本号粘贴到报错的那一行下面即可。
效果:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
</plugin>
⑤ pom中添加报错中提示的 repackage
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
以上6种方案基本可以解决你的问题了。但是不巧的是,我遇到的问题上面的方案都不能解决,在这里跟大家分享下我的踩坑经历,血淋淋的教训,折磨了我几个小时!!!
前提提醒:如果你当前的模块不需要打包jar出来发布,以上的②方案就可以帮你解决。
不巧的是,你用的也是maven父子工程结构,这就导致以上的方案近乎全部失效(反正我没有成功),那么你需要了解父子工程的一些设计,这里就不多说了。
废话不多说,直接上干货:
一、首先你需要在父pom上 进行clean,清理下所有的缓存
二、接着继续操作上图中的package ,就等待着一路 build。。。su***ess就好了。
|
|
|
果真这样,恭喜你,成功解决问题。成功的同学可以略过了、、、、你也可以继续、、、
接着你会发现,那个失败的模块诡异般的又出现的错误,异常是这样的:Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found,大概的意思就是你的打包工具在尝试打包时不能找打模块的main函数。
大家不要被这个异常蒙蔽,虽然说没有找到main。但是我们的appliation中已经有main函数也有run方法,你只需要,操作一下这里:
没错,就是重新编译一下,让target下面生成class文件就好了。这时你只需要操作 pom 的package就可以打包了。切记:不要再次clean,因为一旦执行clean,class文件就会消失,打包还会出错。这是一次痛苦的踩坑,但是同样汗水的付出,换来了问题的解决,值得。