昨天在部署公司SpringBoot多工程项目时,用Idea打war包准备发布时遇到了各种各样的问题,具体如下:
1、用idea给项目打war包,发现打出来的war包里面没有lib文件夹,这个问题我查了好多也没找到原因,同样的项目和配置,同事的可以直接打包使用。


解决方案:
改用Maven的打包方式,点击idea右侧栏Maven Projects ,然后找到项目名下面的Lifecycle文件夹,点击clean,先把项目clean一遍、然后再点击package,项目就打包好了。如下:

2、如果子项目有依赖父项目中的类,这时候需要先把父项目打成jar包,然后再对子项目打war包,否则会报错。首先需要确保父项目中的pom文件里packaging为jar,其次,需要在打包时去掉多余的js/css/application启动类等文件,因为父项目也需要最终打成war包,所以我们pom文件中写了2个profile,打jar包时激活第一个<activeByDefault>为true时默认激活,打war包需要激活第二个。配置信息如下:
<packaging>jar</packaging>
<profiles>
<!-- 部署提供给其他工程依赖用的jar包 -->
<profile>
<id>rely</id>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<excludes>
<exclude>**/UrpApplication.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</profile>
<!-- 部署common工程发布用的war包 -->
<profile>
<id>deploy</id>
<build>
<finalName>common</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</profile>
</profiles>
a)、先clean一下父项目,然后点击install,这里需要注意一下,父项目打jar包需要使用install,原因是package功能不会把打包好的jar包放到远程仓库,在执行子项目打包时会报错,提示子项目找不到父项目的依赖,原因就是远程仓库中没有这个jar包,所有需要使用install,不清楚install和package区别的请自行百度。


b)、等每个子项目全部打包完毕后,修改父项目pom文件中packaging为war,激活第二个profile属性,clean项目后执行package即可。
<packaging>war</packaging>
在部署SpringBoot多工程时,使用IDEA进行war包打包遇到问题。解决方法:通过Maven的clean和package操作代替IDEA直接打包。若子项目依赖父项目,需先将父项目打包为jar,确保父项目packaging为jar,设置不同profile。完成jar打包后,将父项目packaging改为war,再次执行package。
2108

被折叠的 条评论
为什么被折叠?



