`
g21121
  • 浏览: 694766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Maven多项目聚合配置

 
阅读更多

        在项目中使用Maven可以大大简化开发及构建的过程,但一旦产品线庞大,包含的项目及模块繁多时,各模块间版本管理就会产生不一致现象,从而给维护及开发带来了不少难题。

        一般情况下我们采用 project -- modules形式聚合多个关联项目或模块,这样子模块就可以使用父工程中的相关配置。

 

        一 父子工程配置

        1.创建父工程(parent project)

        1)首先利用开发工具eclipse创建父工程,在workspace中右键——>选择New——>选择project,在创建窗口中找到Maven Project选项,如下图所示:

 

        2)选择工程类型

        这里需要注意的是需要勾选上图两个选项,否则将进入模板选择界面,从而无法创建父工程。


        3)填写工程详细信息

        填写相应工程信息,在Packaging选择项中选择pom,然后点击Finish完成创建。

 

        4)这样创建完的父工程结构如下:


        其中只会含有一个有效的pom文件,src文件夹没有其他作用的话也可以删除。

 

        2.创建子工程(module project)

        1)首先打开父工程(这里为parent.project)的pom.xml文件,打开后,eclipse插件会显示为如下界面:


 

        2)点击Modules标签下的 "Create..."按钮,将弹出子模块的创建界面,类似于创建父工程时的选择界面,在模块详细信息填写界面中可以选择模块的类型(pom、jar、war三种),如下图所示:

       

        3)此里我们选择的打包类型为jar,项目结构则如下所示:


 

        工程中包括了我们熟悉的Java项目的相关目录。

 

        3.pom.xml文件配置

        创建完父子工程后需要修改其pom.xml的配置信息,从而达到子模块复用父工程已配置的参数信息。

        1)配置父工程的pom.xml
        在父工程的pom文件中添加<properties><dependencyManagement>标签。

        <properties>标签的作用类似于properties资源文件的作用,提供key于value键值对的对应关系,这样在其他位置就可以直接输出这些已经配置过的公共参数。

        示例如下:

<!-- 配置参数 -->
<properties>
	<maven.compile.source>1.7</maven.compile.source>
	<maven.compile.target>1.7</maven.compile.target>
	<maven.compiler.version>2.3.2</maven.compiler.version>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<commons.encoding>UTF-8</commons.encoding>
	<jdk.path>${JAVA_HOME}/lib/tools.jar</jdk.path>
	<!-- version -->
	<major.version>1</major.version>
	<minor.version>0</minor.version>
	<!-- SNAPSHOT -->
	<version.type>-SNAPSHOT</version.type>
	<full.version>${major.version}.${minor.version}${version.type}</full.version>
	<configure.maven.version>${full.version}</configure.maven.version>
	<hibernate5.version>5.2.1.Final</hibernate5.version>
</properties>

 

        <dependencyManagement>作用顾名思义是对dependency依赖的管理,在传统项目中我们只需要配置

<dependencies>
    <dependencie>
     ... 
    </dependencie>
</dependencies>

        依赖标签就可以使用Maven来自动装载相关依赖项目,然而在多个项目中这样的配置往往相同,在开发与维护过程中经常会出现偏差。所以Maven就提供了<dependencyManagement>标签来管理这些依赖,在子模块中就可以复用。

        示例如下:

<!-- 依赖 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate5.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>${hibernate5.version}</version>
		</dependency>
	</dependencies>
</dependencyManagement>

        配置完成后,完整的pom文件内容为:

<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>com.example</groupId>
	<artifactId>parent.project</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>parent.project</name>
	<description>Maven父工程</description>
	<modules>
		<module>module.project</module>
	</modules>

	<!-- 配置参数 -->
	<properties>
		<maven.compile.source>1.7</maven.compile.source>
		<maven.compile.target>1.7</maven.compile.target>
		<maven.compiler.version>2.3.2</maven.compiler.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<commons.encoding>UTF-8</commons.encoding>
		<jdk.path>${JAVA_HOME}/lib/tools.jar</jdk.path>
		<!-- version -->
		<major.version>1</major.version>
		<minor.version>0</minor.version>
		<!-- SNAPSHOT -->
		<version.type>-SNAPSHOT</version.type>
		<full.version>${major.version}.${minor.version}${version.type}</full.version>
		<configure.maven.version>${full.version}</configure.maven.version>
		<hibernate5.version>5.2.1.Final</hibernate5.version>
	</properties>

	<!-- 依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>${hibernate5.version}</version>
			</dependency>
			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-entitymanager</artifactId>
				<version>${hibernate5.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
</project>

 

        2)子模块pom.xml文件配置

        父工程中我们看到已经配置了很多公共参数与依赖,接下来我们就要在子模块的pom文件中使用这些配置。

        首先配置dependency,在子模块中我们与其他普通项目一样只需要配置所使用的dependencie即可,如下所示:

<dependencies>
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
	</dependency>
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-entitymanager</artifactId>
	</dependency>
</dependencies>

        可以看到我们在<dependency>中并不再需要配置<version>参数,因为version参数已经在父工程中指定。

 

        然后是复用<properties>中的配置参数,以build插件为例,配置如下:

<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>${maven.compiler.version}</version>
				<configuration>
					<source>${maven.compile.source}</source>
					<target>${maven.compile.target}</target>
					<encoding>${project.build.sourceEncoding}</encoding>
				</configuration>
			</plugin>
		</plugins>
	</pluginManagement>
</build>

        可以看到其中各项参数均使用的是父工程中<properties>所配置的值,这样既配置统一又利于维护。具体值是否引用成功可以在Effective POM标签下直接查看。

 

        二 引用其他工程配置

        虽然一父多子的项目结构可以将整个项目重构的更加整洁,但并未关联的项目间如果也需要有相同的配置Maven将如何处理?

        其实Maven在这一点上支持的还是不够强大,也许是出于安全或其他考虑吧,其只能引用其他项目中的<dependencyManagement>所配置的依赖项目。所以还做不到配置文件的组合。

        1.创建configure项目

        configure项目的作用就是用来存储各种dependency依赖的配置,在创建过程中与创建父子工程相同,不同之处为子模块在打包选择项中也选择pom类型,这样整个工程就变成了一个纯配置文件的工程,只用于存储配置信息。工程创建完成后结构如下所示:



        每一个子模块都是一种框架的依赖配置信息,这样添加与维护及其方便。

        以hibernate为例,打开其(configure.maven.hibernate工程)pom.xml文件,内容如下:

<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.vanilla</groupId>
		<artifactId>configure.maven</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>
	<artifactId>configure.maven.hibernate</artifactId>
	<packaging>pom</packaging>
	<name>configure.maven.hibernate</name>
	<description>hibernate配置</description>
	<!-- 版本配置 -->
	<properties>
		<hibernate5.version>5.2.1.Final</hibernate5.version>
	</properties>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>${hibernate5.version}</version>
			</dependency>
			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-entitymanager</artifactId>
				<version>${hibernate5.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
</project>

        其中没有太特殊的配置,也仅仅声明了hibernate的dependency依赖及版本。

 

        2.引入configure配置信息

        在父工程(parent.project)的pom.xml文件中直接引入相关配置即可,如想引入hibernate的依赖配置,则配置信息如下:

<!-- 依赖 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>com.demo</groupId>
			<artifactId>configure.maven.hibernate</artifactId>
			<version>${configure.maven.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

        这样一来就直接把模块configure.maven.hibernate的<dependencyManagement>部分引入到了这里,也不需要配置版本号什么的了。

 

        3.子模块使用dependencyManagement配置

        在子模块中使用dependency跟之前一样,如下:

<dependencies>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
		</dependency>
</dependencies>

 

        通过以上对Maven的相关配置,我们就可以很好的复用某些重复的配置,并做到统一管理,统一维护的目的。

1
1
分享到:
评论
1 楼 masuweng 2016-08-04  

相关推荐

    maven聚合项目

    在本项目中,我们关注的是"Maven聚合项目",这是一个特殊类型的Maven项目,它可以管理多个相关但独立的子项目。 **一、Maven聚合项目** Maven聚合项目(Aggregator Project)的主要目的是将多个相关的Maven项目...

    maven-聚合项目-springMVC

    5. **测试**:如果项目包含测试代码,可以运行单元测试或集成测试,理解测试在Maven项目中的角色。 通过这个项目,开发者可以深入了解Maven的聚合特性以及Spring MVC在实际项目中的应用,这对于提升Java Web开发...

    maven聚合与继承配置

    Maven聚合允许我们将多个独立的Maven项目组织在一起,形成一个单一的构建单元。在我们的示例中,`parent`项目就是一个聚合项目。它并不包含任何实际的代码,而是用来管理`account-email`和`account-persist`这两个子...

    maven多模块项目构建过程

    每个子项目都是独立的Maven项目,可以有自己的pom.xml配置文件,而父项目主要负责定义共有的构建配置和依赖管理。 2. 创建父项目: 首先,我们需要创建一个空的Maven项目,作为父项目的起点。在IDE如IntelliJ IDEA...

    maven继承与聚合代码

    在提供的资源《一头扎进Maven3》第五讲源码及文档中,你可以找到实际的项目结构和POM配置示例,这将有助于你更深入理解Maven继承和聚合的工作原理。通过阅读和实践这些示例,你将能更好地掌握如何在实际项目中应用这...

    maven聚合项目模板

    "maven聚合项目模板"是指使用Maven创建的一种特殊结构,用于组织多个相关但独立的子项目,使得这些子项目可以作为一个整体进行构建和管理。这种方式在大型项目或者有多个子模块的项目中非常常见。 1. **模块分组**...

    maven 配置多仓库

    Maven默认使用中央仓库,但有时我们需要配置多个仓库,例如私有仓库,以提高依赖下载速度或管理内部私有构件。本文将详细介绍如何在Maven中配置多仓库。 ### Maven仓库类型 1. **中央仓库**:Maven官方维护的公共...

    springboot项目 maven聚合

    在本项目中,Maven的聚合功能被用来管理多个子模块,每个子模块可以是一个独立的功能单元,例如实体类和工具类。这样,开发人员可以独立地开发和测试这些模块,然后将它们聚合到一起形成完整的应用。 **Mybatis** ...

    Maven聚合工程源码

    "工作空间压缩包"通常包含了一个开发者的全部工作环境,可能包括多个Maven项目、配置文件、IDE(如IntelliJ IDEA或Eclipse)的工作空间设置等。解压这个文件后,我们可以看到开发者是如何组织和管理他们的代码。 ...

    创建多层级目录分类的多工程聚合分布式Maven工程 (样例源码)

    在多层级目录分类的多工程聚合中,Maven的聚合功能(aggregation)允许我们将多个子项目组合成一个大的父项目,这样可以在顶层执行构建,一次编译和打包所有子项目,简化了多模块项目的管理。 接下来,模块化设计是...

    maven依赖+继承+聚合

    聚合(Aggregation)是指在单个Maven项目中管理多个子项目的能力。在`pom.xml`中定义`modules`标签,可以将多个子项目包含进来。这样,当我们在顶层项目上执行命令时,Maven会递归地构建所有子项目。例如: ```xml ...

    在java工程中配置maven项目

    本文将详细讲解如何在Java工程中配置Maven项目,帮助开发者高效地进行项目构建。 一、Maven简介 Maven是由Apache软件基金会开发的一个项目管理和综合工具。它通过一个XML格式的配置文件(pom.xml)来管理项目的...

    java maven 聚合项目 分模块 socket 双向通信实例demo

    最后,将这些Java类整合到Maven项目中,按照聚合项目的方式进行构建和部署。 总的来说,这个实例演示了如何使用Java和Maven来构建一个支持双向通信的网络应用,这在实际开发中非常有价值,特别是在分布式系统和实时...

    Maven 多项目依赖关系

    每个Maven项目都有一个核心配置文件——`pom.xml`,它定义了项目的元数据,包括项目名称、版本、描述、开发者信息以及项目依赖。在多项目环境中,`pom.xml`文件还负责声明其他子项目或外部库的依赖关系。 二、模块...

    maven构建项目可以粘贴的内容

    - 聚合:一个项目可以通过`&lt;modules&gt;`元素聚合多个子项目,使得操作多个项目变得简单,如一次性构建所有子项目。 六、Maven profiles Profile是Maven的环境或配置切换机制,可以根据不同的环境条件(如开发、测试...

    maven多模块聚合的springboot+duubo+zokeeper+Redis整合demo

    本项目“maven多模块聚合的springboot+duubo+zookeeper+Redis整合demo”就是一个很好的示例,它展示了如何利用Maven进行模块化管理,并将Spring Boot、Dubbo、Zookeeper和Redis这四大核心组件有效地集成在一起。...

    maven搭建、集成,创建聚合项目问题及错误解决

    安装M2E插件后,可以在Eclipse中直接创建、编辑和管理Maven项目,进行编译、运行和调试,大大提升了开发效率。 四、创建Web项目 使用Maven创建Web项目,可以通过`mvn archetype:generate`命令,选择对应的archetype...

    maven聚合工程demo

    Maven 聚合工程允许我们将多个 Maven 项目组合成一个单一的构建单元。这在处理多模块项目时非常有用,它使得我们能够一次性构建所有子模块,而不需要逐个执行构建命令。在"maven聚合工程demo"中,我们可以看到一个主...

    MAVEN包,用于配置java项目配置

    5. **聚合与模块化**:Maven支持多模块项目,一个顶层POM可以作为聚合项目,包含多个子项目,方便管理大型复杂项目。 使用Maven进行Java项目配置,首先需要在`settings.xml`中配置本地仓库路径,然后在项目根目录下...

    maven聚合web工程--struts2+spring

    从压缩包子文件的文件名称列表来看,"parent-aggregate.txt"可能是一个描述父工程聚合配置的文本文件,它可能包含有关如何组织和构建子模块的信息。而"parent"可能是父工程的源码或者配置文件,包含pom.xml文件,...

Global site tag (gtag.js) - Google Analytics