maven项目多个module工程搭建

创建父工程

maven多模块项目需要一个父工程来聚合各个子模块,不过其实就是需要一个父pomxml,
主要作用是声明子模块,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- maven版本号-->
<groupId>com.iwooto</groupId> <!-- maven包路径-->
<artifactId>maventest</artifactId> <!-- maven包名-->
<packaging>pom</packaging> <!-- maven父工程的packaging类型必须为pom-->
<version>${project.version}</version> <!-- 项目版本-->
<name>maventest</name> <!-- 项目名称-->
<url>http://maven.apache.org</url> <!-- maven库-->
<properties>
<project.version>0.0.1</project.version>
</properties>
<modules>
<module>mavenweb</module> <!-- 第一个web项目子模块-->
<module>mavenadmin</module> <!-- 第二个web项目子模块-->
<module>mavenjava</module> <!-- 第一个java项目子模块,当然也可以已打包的形式引入-->
</modules>
<dependencies> <!-- 父工程下面的所有子模块都会继承的引入下面的依赖包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement> <!-- 只有父工程会引入以下的依赖包,对子模块无影响-->
<dependencies>
<dependency>
<groupId>com.iwooto</groupId>
<artifactId>mavenadmin</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.iwooto</groupId>
<artifactId>mavenweb</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.iwooto</groupId>
<artifactId>mavenjava</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>

创建子模块工程

目录结构

1
2
3
4
5
6
7
8
.
|-- my-module1
| `-- pom.xml 第一个web项目子模块
|-- my-module2
| `-- pom.xml 第二个web项目子模块
|-- my-module3
| `-- pom.xml 第一个java项目子模块
`-- pom.xml 父模块

如果使用的是eclipse的话直接在父工程项目->右键->Maven->Add New Maven Module Project,剩下的和创建普通maven项目流程相同。

第一个web子模块(web项目主模块其他web项目会打包到该模块)pom.xml代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.iwooto</groupId>
<artifactId>maventest</artifactId>
<version>${project.version}</version>
</parent>
<artifactId>mavenweb</artifactId>
<packaging>war</packaging>
<name>mavenweb</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency> <!-- 被合并的子web项目,必须在主项目中添加依赖关系 -->
<groupId>com.iwooto</groupId>
<artifactId>mavenadmin</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.iwooto</groupId>
<artifactId>mavenjava</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>maventest</finalName>
<plugins>
<!-- 合并多个war -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- 过滤其他模块的web.xml文件 -->
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
<overlays>
<overlay>
<groupId>com.iwooto</groupId>
<artifactId>mavenadmin</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
</plugins>
<!-- 配置项目的资源文件,可以是多个项目下的资源文件 -->
<resources>
<resource>
<directory>../mavenadmin/src/main/resources</directory>
<excludes>
<exclude>config/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>

第二个web子模块(该模块会打包到web主模块中)pom.xml代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.iwooto</groupId>
<artifactId>maventest</artifactId>
<version>${project.version}</version>
</parent>
<artifactId>mavenadmin</artifactId>
<packaging>war</packaging>
<name>mavenadmin</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- 如果该模块没有web.xml文件的话,要进行一下声明 -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>

第一个java子模块pom.xml代码

1
2
3
4
5
6
7
8
9
10
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.iwooto</groupId>
<artifactId>maventest</artifactId>
<version>${project.version}</version>
</parent>
<artifactId>mavenjava</artifactId>
<name>mavenjava</name>
</project>

web项目合并当着需要注意一下记得

  1. 被合并的子web项目packaging属性必须是war
  2. 被合并的子web项目,必须在主项目中添加依赖关系。
  3. 被合并的子web项目中,如果没有web.xml,则需要在pom.xml中声明
  4. 在web项目主模块中的java build path 中添加子web项目的依赖,就可以直接调用子项目的方法咯(记得避免循环依赖哦)
  5. 被合并的子web项目中的web.xml你可以选择性的放入合并内容当中(可以看情况需要进行合并)
  6. 配置文件继承相同的继承策略用于为 POM 本身。
    只要配置好以上内容,该多个模块的maven项目的主web模块就可以放到tomcat中运行起来啦。

添加以前的项目作为子模块到新的项目当中

其实只需要修改一下父工程pom.xml引用子模块的pom.xml文件的路径
和子模块引用pom.xml引用父工程的pom.xml的路径就可以啦
父工程与子模块平级的情况
目录结构

1
2
3
4
5
6
7
8
9
.
|-- my-module1
| `-- pom.xml
|-- my-module2
| `-- pom.xml
|-- my-module3
| `-- pom.xml
`-- parent
`-- pom.xml

父工程pom.xml修改如下内容:
修改前:

1
2
3
4
5
<modules>
<module>mavenweb</module> <!-- 第一个web项目子模块-->
<module>mavenadmin</module> <!-- 第二个web项目子模块-->
<module>mavenjava</module> <!-- 第一个java项目子模块,当然也可以已打包的形式引入-->
</modules>

修改后:

1
2
3
4
5
<modules>
<module>../mavenweb</module> <!-- 第一个web项目子模块-->
<module>../mavenadmin</module> <!-- 第二个web项目子模块-->
<module>../mavenjava</module> <!-- 第一个java项目子模块,当然也可以已打包的形式引入-->
</modules>

子模块pom.xml修改以下内容:
修改前:

1
2
3
4
5
<parent>
<groupId>com.iwooto</groupId>
<artifactId>maventest</artifactId>
<version>${project.version}</version>
</parent>

修改后:

1
2
3
4
5
<parent>
<groupId>com.iwooto</groupId>
<artifactId>../maventest</artifactId>
<version>${project.version}</version>
</parent>

项目改造就完成啦。我的demo地址