Maven的聚合、继承(NEW)

 模块的聚合

聚合的好处:

统一对各个模块的编译,测试,打包,安装,发布操作,不用每个模块都单独编译,测试等

集中管理,批量执行Maven的命令(注:命令即插件,执行一个命令等同于运行一个插件!)

 用法:

新建一个Maven项目,修改POM,将package属性改为pom

使用Module标签引入其它模块

由于该聚合模块是新建的Maven项目,在指定路径时需回退到上一级目录,才能定位到其它模块。

 

<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.gc.user</groupId>
  <artifactId>user-aggregation</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!-- 此处,类型为pom -->
  <packaging>pom</packaging>
	
  <!-- 将其它模块放到一起,集中执行命令 -->
  <modules>
  	<module>../user-core</module>
  	<module>../user-dao</module>
  </modules>
  
</project>

 

 

====================================================================

 

模块的继承

引入继承带来的好处:

将各个模块中相同的配置定义到一个文件中,由其它模块来继承

提高pom文件配置的重用性,而且可以单点维护---单一职责原则!

 

用法:

新建一个Maven项目,将其artifactId设置为user-parent

修改package属性为pom

 

parent模块

<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.gc.user</groupId>
	<artifactId>user-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<name>user-parent</name>
	
	<url>http://maven.apache.org</url>

	<!-- 常量的定义,子模块中通过${}就能使用此处定义的常量:单点维护 -->
	<properties>
		<project.version>0.0.1-SNAPSHOT</project.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<my.jar.source>d:/</my.jar.source>
		<junit.version>4.10</junit.version>
	</properties>

	<!-- 如果不通过 dependencyManagement管理依赖,虽然子模块能够继承这些依赖, 但是会继承所有parent中的依赖!应该根据各个子模块的需求,灵活继承依赖, 
		所以使用dependencyManagement来管理,这样子模块声明了那些依赖,就继承哪些依赖 子类没有声明的依赖,就不会继承下去。 -->
	<dependencyManagement>
		<dependencies>
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-core</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-dao</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 其它依赖 -->			
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>4.2.6.Final</version>
			</dependency>

			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>5.1.26</version>
			</dependency>

			<dependency>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
				<version>1.2.16</version>
			</dependency>

			<dependency>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>servlet-api</artifactId>
				<version>2.5-6.0.0</version>
				<scope>provided</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>


</project>

  

 

子模块user-core模块继承parent模块

<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.gc.user</groupId>
		<artifactId>user-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<artifactId>user-core</artifactId>
	<!-- groupId和version将从parent继承,无需定义 -->
	<packaging>jar</packaging>

    <!-- properties将从parent继承,无需定义  -->
    
	<name>user-core</name>
	
	
	
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
                        <!-- version无需定义,会从parent继承下来 -->
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
		</dependency>

		<dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>

	</dependencies>
</project>

 

 

子模块user-dao模块继承parent模块

  

<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.gc.user</groupId>
  	<artifactId>user-parent</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>user-dao</artifactId>
  <packaging>jar</packaging>

  <name>user-dao</name>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    
    <!-- 引入user-core,将会发生传递性依赖:user-core中的依赖是否会导入到本模块中,还要根据scope决定! -->
  	<dependency>
  		<groupId>com.gc.user</groupId>
  		<artifactId>user-core</artifactId>
  		<exclusions>
	  		<!-- 排除user-core模块中关于log4j的依赖 -->
  			<exclusion>
  				<groupId>log4j</groupId>
  				<artifactId>log4j</artifactId>
  			</exclusion>
  		</exclusions>
  	</dependency>
  	
  </dependencies>
</project>

 

 

====================================================================

 

  

将聚合与继承集中到parent模块的POM中 

 

user-parent模块,既提供聚合又提供继承

 

<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.gc.user</groupId>
	<artifactId>user-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>


	<!-- 将其它模块放到一起,集中执行命令 -->
	<modules>
		<module>../user-core</module>
		<module>../user-dao</module>
	</modules>


	<name>user-parent</name>
	
	<url>http://maven.apache.org</url>

	<!-- 常量的定义,子模块中通过${}就能使用此处定义的常量:单点维护 -->
	<properties>
		<project.version>0.0.1-SNAPSHOT</project.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<my.jar.source>d:/</my.jar.source>
		<junit.version>4.10</junit.version>
	</properties>

	<!-- 如果不通过 dependencyManagement管理依赖,虽然子模块能够继承这些依赖, 但是会继承所有parent中的依赖!应该根据各个子模块的需求,灵活继承依赖, 
		所以使用dependencyManagement来管理,这样子模块声明了那些依赖,就继承哪些依赖 子类没有声明的依赖,就不会继承下去。 -->
	<dependencyManagement>
		<dependencies>
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-core</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 子模块的依赖 -->
			<dependency>
				<groupId>com.gc.user</groupId>
				<artifactId>user-dao</artifactId>
				<version>${project.version}</version>
			</dependency>
			
			<!-- 其它依赖 -->			
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>4.2.6.Final</version>
			</dependency>

			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>5.1.26</version>
			</dependency>

			<dependency>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
				<version>1.2.16</version>
			</dependency>

			<dependency>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>servlet-api</artifactId>
				<version>2.5-6.0.0</version>
				<scope>provided</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>


</project>

 

猜你喜欢

转载自schy-hqh.iteye.com/blog/1950221