创建父工程
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项目合并当着需要注意一下记得
- 被合并的子web项目packaging属性必须是war
- 被合并的子web项目,必须在主项目中添加依赖关系。
- 被合并的子web项目中,如果没有web.xml,则需要在pom.xml中声明
- 在web项目主模块中的java build path 中添加子web项目的依赖,就可以直接调用子项目的方法咯(记得避免循环依赖哦)
- 被合并的子web项目中的web.xml你可以选择性的放入合并内容当中(可以看情况需要进行合并)
- 配置文件继承相同的继承策略用于为 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> |