Idea SpringBoot多模块项目打包

一、打包配置

多模块时候,一般parant的pom中不用配置打包插件,直接在主模块中配置就行,如果有mybatis的模块,也可以配置,如:

主模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com......ApplicationMain</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

有mybatis的模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**.*</include>
<include>**/*.*</include><!-- i18n能读取到 -->
<include>**/*/*.*</include>
</includes>
</resource>
</resources>
</build>

二、打包测试

打包时默认会进行测试,而由于多模块架构,测试一直失败,跳过测试的方法:

1、在pom文件里加插件:因为是多模块结构以及springboot的原因,导致每个pom都要添加,还可能出现意外问题。

1
2
3
4
5
6
7
8
9
10
11
12
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>

2、控制台,cd到父项目下,执行命令:mvn clean install -DskipTests

3、同上,执行命令:mvn clean install -Dmaven.test.skip=true

4、如果在idea中,直接这样:

通常我都是,只在主模块配置打包,其他不处理,mapper文件放在数据层模块的资源文件中,默认spring boot会自动去编译。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.......ApplicationMain</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Maven多模块项目单独编译子模块项目时报错:Failed to execute goal on project/Could not resolve dependencies for project

背景:常规的父子项目搭建的工程,参考:http://www.cnblogs.com/EasonJim/p/6863987.html

解决方法:

1、需要把parent工程,也就是package是pom的那个工程先install一下;之后再install公共引入的模块,最后就可以单独编译子模块。

2、不用install,直接编译parent项目;这种方式只能在parent项目下进行,不能单独编译子模块。