Maven学习(二):属性、坐标与依赖

前言:

1、pom文件的配置,主要内容为属性、坐标与依赖、插件、仓库以及其他一些配置。

2、理解这些配置的内容,在一定程度上也就理解了Maven 的使用。

一、属性

(一)Maven内置属性:

1、${basedir} 项目根目录,即包含 pom.xml 的目录。

2、${version} 表示项目版本。

(二)Pom属性:使用该类属性引用pom文件内对应元素的值。如

1、${project.xxx} 当前pom文件的任意节点的内容。如${project.artifactId} 就对应了 <project><artifactId>元素的值。

2、${project.build.source.directory} :项目的主源码目录,默认为src/main/java

3、${project.build.directory} 构建项目输出目录,缺省为target

4、${project.build.outputDirectory} :项目主代码编译输出目录,缺省为target/classes

5、${project.build.finalName} 项目打包输出文件的名称,缺省为${project.artifactId}-${project.version}

6、${project.packaging} 打包类型,缺省为jar

(三)自定义属性:<properties >标签

1、实例

<span style="font-family:Arial;font-size:18px;"><properties>
        <project.charset>UTF-8</project.charset>
        <jdk.version>1.6</jdk.version>
        <spring.version>3.2.2.RELEASE</spring.version>
        <springsecurity.version>2.0.5.RELEASE</springsecurity.version>
        <asm.version>3.3</asm.version>
        <srtus2.version>2.3.15.1</srtus2.version>
        <cxf.version>2.7.4</cxf.version>
    </properties></span>

(四)Setting 属性:与pom属性同理

1、引用:以 setting. 开头的属性引用settings.xml 文件中 XML 元素的值,如常用的 ${settings,localRespository} 指向本地仓库。

(五)Java系统属性 与 环境变量属性。

1、Java系统属性:使用Maven属性引用。如 ${user.home}:指向用户目录。

2、环境变量属性:使用 env. 开头的Maven 属性引用。如${env.JAVA_HOME} 指代JAVA_HOME 的值。

3、使用 mvn help : system 插卡所有Java系统变量 与 环境变量变量 。

(六)注意点

1、Maven属性只能在pom中被解析,只有使用过滤后才可以在配置文件中被解析。

2、定义的属性在 pom 的其他地方使用 ${key} 引用。如这边定义的 <a>111</a> 在pom 的其他地方引用${a}使用。

3、使用属性与 Profile、 资源过滤可以实现动态构建。

二、坐标

1、实例

	<groupId>JavaMaven</groupId>
	<artifactId>maven-web-dao</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>maven-web-dao Maven Webapp</name>

 

2、关键字:

1)groupId:定义当前maven项目(模块)隶属的实际项目即一般为项目名。

2)artifactId:当前的maven项目名(模块名),即模块名。

3)version:版本。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。

4)package:定义Maven 的打包的方式,默认为 jar 。

5)classifier:定义一些属性构建。如通过插件生成源码包 xxx.sources.jar 等附属构建,这时sources 就是一个classifier 。

综合理解:如 项目spring-framework 为一个groupId,而其中 spring-core 和 spring-aop为分别的两个 artifactId 。
三、依赖  dependency

(一)简单依赖

1、新建项目JavaMaven的两个模块maven-entity 和 maven-common:common模块依赖于entity模块

2、maven-entity 模块中需要引入log4j 和 hibernate ,jar都在本地仓库的com/web-jar文件下。pom文件如下:

<span style="font-family:Arial;font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;"><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>JavaMaven</groupId>
  <artifactId>maven-entity</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <name>maven-entity</name>
  <url>http://maven.apache.org</url>
 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
			<groupId>com.web-jar</groupId>
			<artifactId>hibernate-jpa</artifactId>
			<version>2.0-api-1.0.1.Final</version>
		</dependency>
 
		<dependency>
			<groupId>com.web-jar</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.2.1.Final</version>
		</dependency>
 
		<dependency>
			<groupId>com.web-jar</groupId>
			<artifactId>hibernate-commons-annotations</artifactId>
			<version>4.0.1.Final</version>
		</dependency>
		
		<dependency>
			<groupId>com.web-jar</groupId>
  			<artifactId>log4j</artifactId>
  			<version>1.2.15</version>
		</dependency>
		
  </dependencies>
</project>
</span></span></span>

 

3、maven-common 模块依赖于 maven-entity 模块:

1)maven-entity 利用 install 打成jar包放入本地仓库:右击 run as--> maven build ,输入  clean install即可。

 

2)编写maven-common 的pom文件:

 

 

<span style="font-family:Arial;font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;"><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>JavaMaven</groupId>
  <artifactId>maven-common</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <name>maven-common</name>
  <url>http://maven.apache.org</url>
 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- Maven内置变量说明 ${project.xxx} 当前pom文件的任意节点的内容-->
    <dependency>
    	  <groupId>${project.groupId}</groupId>
  		  <artifactId>maven-entity</artifactId>
  		  <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>
</span></span></span>

 

 

 

3)这时,entity依赖的hibernate 和 log4j的包,也会被comon所依赖,但是junit4却不会被common依赖:

 

 

 

4)这样,就完成了模块的依赖,可以在 common 中使用 entity ,如:

package com.maven.common;
 
import com.maven.entity.PersonEntity;
 
public class CommonTest {
	public static void main(String[] args) {
		PersonEntity tPersonEntity = new PersonEntity();//可以使用entity
	}
	
}

(二)、scope 属性:

1、compile:缺省值,适用于所有阶段,会随着项目一起发布。(编译、打包都会加入) 

2、provided:编译测试会加入此包,打包的时候不会加入。如 servlet.jar,一般指定为provided。 

3、runtime:编译就不依赖,只在运行时使用,如JDBC驱动,数据库等适用运行和测试阶段。

4、test:只在测试时使用,在编译和打包时都不会使用这个依赖。 

5、system:类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

(三)依赖的传递

1、maven-common 依赖于 maven-entity ,那么maven-entity 所依赖的 hibernate 和 log4j包会传递依赖给 maven-common 。

2、传递的范围:只有scope 等于 compile的依赖才会被传递:如上,给loj4j 添加 <scope>test</scope>

<dependency>
	<groupId>com.web-jar</groupId>
  	<artifactId>log4j</artifactId>
  	<version>1.2.15</version>
  	<scope>test</scope>
</dependency>

 

这样,log4j就不会传递依赖了。

 

(四)间接依赖

1、案例1:同级别

1)A模块依赖于M模块1.0版本(A-->M1.0),B-->M2.0;C-->A、B,那么C会依赖于M的哪个版本?

2)A、B对于M为直接依赖,C对于M为间接依赖。C对于M的依赖决定于C依赖的A、B在Pom文件中依赖的前后顺序,谁在前,就会间接依赖谁依赖的M版本。如A在前,则C依赖M的1.0版本,反之为M2,0版本。

2、案例2:非同级别

1)A-->G-->Z1.0;B-->Z2.0,C-->A、B并且,在C模块的pom文件中,A在B之前,那么C依赖于Z的哪个版本?

2)依赖 Z2.0 。这时的Z模块对于A都是间接依赖,但是 Z2.0 在间接的路径上较短,所以会依赖于 Z2.0 。

(五)限制依赖:<exclusions><exclusion>

1、如想限制Z2.0,就想依赖Z1.0,就可以在C 的pom文件中,B模块的依赖中排除 Z2,0:

<!--排除依赖-->
<dependency>
    <groupId>${project.groupId}</groupId>
  	<artifactId>B</artifactId>
  	<version>${project.version}</version>
  	<exclusions>
  		 <exclusion>
  		  <groupId>Z</groupId>
  		  <artifactId>Z</artifactId><!--不需要使用版本,因为在B模块中只有一个版本的Z-->
  		 </exclusion>
   </exclusions>
</dependency>

四、聚合和继承

(一)聚合:

1、一个项目如果有多个模块,需要对每个模块进行编译等工作,为了统一管理所有的模块,使用聚合。

 

 

2、1)新建一个项目,勾选 create a simple project,不使用maven的 archetype 。

2)选择 packaging 为 pom

3)在maven-parent 模块的pom(超级Pom)文件中,使用 modules 关键字

 

 

<!-- 聚合是模块的位置 -->
<modules>
	<module>../maven-common</module>
	<module>../maven-entity</module>
</modules>

 

 

 

 

 

 

4)pom文件是在 maven-parent 模块中,如果把 pom 文件放在模块外,则可以去掉校对位置的标识。

5)聚合后,编译等工作只需要操作 maven-parent 模块即可。

(二)继承:<parent>

1、如果 maven-common 依赖hibernate,maven-entity也依赖hibernate,就需要分别在两个模块的pom文件中分别依赖于两个包,在实际项目中这种相同依赖的包会很多,那么需要引入继承的概念。

2、在 maven-parent 模块的pom文件中,加入hibernate 的依赖:

<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
		<scope>test</scope>
	</dependency>
 
	<dependency>
		<groupId>com.web-jar</groupId>
		<artifactId>hibernate-jpa</artifactId>
		<version>2.0-api-1.0.1.Final</version>
	</dependency>
 
	<dependency>
		<groupId>com.web-jar</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>4.2.1.Final</version>
	</dependency>
 
	<dependency>
		<groupId>com.web-jar</groupId>
		<artifactId>hibernate-commons-annotations</artifactId>
		<version>4.0.1.Final</version>
	</dependency>
 
	<dependency>
		<groupId>com.web-jar</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.15</version>
		<scope>test</scope>
	</dependency>
</dependencies>

 

 

 

 

 

 

 

 

3、分别在maven-common 和 maven-entity 两个模块中,只要继承 maven-parent 模块就可以是实现 hibernate的依赖:

<parent>
	<groupId>JavaMaven</groupId>
	<artifactId>maven-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<relativePath>../maven-parent/pom.xml</relativePath>
</parent>

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值