maven构建多模块项目

时间:2023-01-17 22:18:45

点击下载案例代码

在eclipse下构建maven项目,该项目由多个子模块组成。

我这里演示构建一个项目,分别包含三个模块:
前台模块(djweb)
中间模块(djcommon)
后台模块(djadmin)

一,创建一个父项目(dreamjoin)

NEW –>project–>maven–>maven Project,
点击下一步,
进入new maven Project的Select project name and location界面

maven构建多模块项目

什么也不做,直接 next(下一步 )到Select an Archetype界面。
maven构建多模块项目

在这个界面中选择maven-Archetype-site-simple,
然后选择 next (下一步),
进入选择Enter a group id for the artifact的界面
maven构建多模块项目

在group id 和artifact id中输入你的group和artifact名称。
我用的分别是dream和dreamjoin,选择完成。
这时会在eclipse中生成一个项目,项目名是dreamjoin

此时dreamjoin的pom文件如下所示:
maven构建多模块项目

将项目dreamjoin中的src文件删除(可有可无,主要看个人需要)

二,创建前台子模块(dreamweb)

选中项目dreamjoin,点击右键,
选择NEW -->project-->maven-->maven Module,
点击下一步,在出现的界面中输入子模块的名称dreamweb,
点击下一步,出现Select an Archetype界面。
这时选择maven-Archetype-webapp(构建web层),
然后选择完成,即生成子项目dreamweb

此时dreamweb的pom文件如下所示:
maven构建多模块项目

三,创建中间子模块(djcommon)

选中项目dreamjoin,点击右键,
选择NEW -->project-->maven-->maven Module,
点击下一步,在出现的界面中输入子模块的名称djcommon,
点击下一步,出现Select an Archetype界面。
这时选择maven-Archetype-site-quickStart(该模块不构建web层),
然后选择完成,即生成子项目djcommon

此时djcommon的pom文件如下所示:
maven构建多模块项目

四,创建后台子模块(djadmin)

选中项目dreamjoin,点击右键,
选择NEW -->project-->maven-->maven Module,
点击下一步,在出现的界面中输入子模块的名称djadmin,
点击下一步,出现Select an Archetype界面。
这时选择maven-Archetype-webapp(构建web层),
然后选择完成,即生成子项目djadmin

此时djadmin的pom文件如下所示:
maven构建多模块项目

此时项目就建好了,大家可以根据自己的需要修改pom文件,
我稍微改了下刚建好的pom文件,如下:

dreamjoin的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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>

<groupId>dream</groupId>
<artifactId>dreamjoin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<distributionManagement>
<site>
<id>website</id>
<url>scp://webhost.company.com/www/website</url>
</site>
</distributionManagement>

<!-- 子模块开始 -->
<modules>
<module>djadmin</module>
<module>djcommon</module>
<module>djweb</module>
</modules>
<!-- 子模块结束 -->

<build>
<!-- 默认编译器是javax.tools.JavaCompiler 设置jdk为1.7版本 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>utf8</encoding>
</configuration>
</plugin>
</plugins>
</build>

<!-- 属性开始 -->
<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>

<version.servlet>2.5</version.servlet>
<version.servlet-jsp>2.1</version.servlet-jsp>
<version.junit>4.12</version.junit>

</properties>
<!-- 属性结束 -->

<!-- 引入包开始 -->
<dependencies>

<!-- provided(只在编译时需要)开始 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${version.servlet}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${version.servlet-jsp}</version>
<scope>provided</scope>
</dependency>
<!-- provided(只在编译时需要)结束 -->

<!-- 测试时需要用到的包 开始 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${version.junit}</version>
<scope>test</scope>
</dependency>
<!-- 测试时需要用到的包 结束 -->

</dependencies>
<!-- 引入包结束 -->

</project>

djweb 的 pom文件

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


<parent>
<groupId>dream</groupId>
<artifactId>dreamjoin</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>djweb</artifactId>
<packaging>war</packaging>
<name>djweb</name>
<version>${project.all.version}</version>

<build>
<finalName>djweb</finalName>
</build>

<!-- 属性开始 -->
<properties>

</properties>
<!-- 属性结束 -->

<!-- 引入包开始 -->
<dependencies>

</dependencies>
<!-- 引入包结束 -->

</project>

djcommon的pom文件如下

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


<parent>
<groupId>dream</groupId>
<artifactId>dreamjoin</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>djcommon</artifactId>
<name>djcommon</name>
<version>${project.all.version}</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>


<!-- 引入包开始 -->
<dependencies>

</dependencies>
<!-- 引入包结束 -->

</project>

djadmin的pom文件如下

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


<parent>
<groupId>dream</groupId>
<artifactId>dreamjoin</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>djadmin</artifactId>
<packaging>war</packaging>
<name>djadmin</name>
<version>${project.all.version}</version>


<build>
<finalName>djadmin</finalName>
</build>

<!-- 属性开始 -->
<properties>


</properties>
<!-- 属性结束 -->

<!-- 引入包开始 -->
<dependencies>

</dependencies>
<!-- 引入包结束 -->

</project>

最后说几句

对于这些非常规类型的项目,如果想要成为父项目,需要做如下一些改动:
1.将pom.xml文件中的<packaging>jar</packaging>
改为<packaging>pom</packaging>
若不换为pom则在打包的时候父项目会产生一个target文件;
如果没有<packaging>pom</packaging>的可以在
<version>0.0.1-SNAPSHOT</version>后面添加上这句话即可。

2.删除除pom.xml外的所有文件,
其中JRE System Library是不能直接删除的,需要选择中,
并单击右键Bulid Path-->Remove from bilud path即可移除。
这时的父项目就显得很干净整洁了。

其实在普通的项目上是不允许构建子模块的,能否在一个项目下创建子模块,
主要取决于是否有<packaging>pom</packaging>这个配置。
如果有这个配置则任何项目都可以创建子模块,
硬要这样创建的话整个项目会变的不伦不类。
看来maven在判断一个项目是否可以创建子模块其实是取决于这个配置的。