Maven学习(二):属性、坐标与依赖
来源:互联网 发布:c语言多个else if 编辑:程序博客网 时间:2024/05/18 00:15
前言:
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>
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 ,如:
<span style="font-family:Arial;font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;">package com.maven.common;import com.maven.entity.PersonEntity;public class CommonTest {public static void main(String[] args) {PersonEntity tPersonEntity = new PersonEntity();//可以使用entity}}</span></span></span>
(二)、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>
<span style="font-family:Arial;font-size:18px;"><dependency><groupId>com.web-jar</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <scope>test</scope></dependency></span></span></span>
这样,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:
<span style="font-family:Arial;font-size:18px;"><!--排除依赖--><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></span></span></span>
四、聚合和继承
(一)聚合:
1、一个项目如果有多个模块,需要对每个模块进行编译等工作,为了统一管理所有的模块,使用聚合。
2、
1)新建一个项目,勾选 create a simple project,不使用maven的 archetype 。
2)选择 packaging 为 pom
3)在maven-parent 模块的pom(超级Pom)文件中,使用 modules 关键字
<span style="font-family:Arial;font-size:18px;"><!-- 聚合是模块的位置 --><modules><module>../maven-common</module><module>../maven-entity</module></modules></span></span></span>
4)pom文件是在 maven-parent 模块中,如果把 pom 文件放在模块外,则可以去掉校对位置的标识。
5)聚合后,编译等工作只需要操作 maven-parent 模块即可。
(二)继承:<parent>
1、如果 maven-common 依赖hibernate,maven-entity也依赖hibernate,就需要分别在两个模块的pom文件中分别依赖于两个包,在实际项目中这种相同依赖的包会很多,那么需要引入继承的概念。
2、在 maven-parent 模块的pom文件中,加入hibernate 的依赖:
<span style="font-family:Arial;font-size:18px;"><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></span></span></span>
3、分别在maven-common 和 maven-entity 两个模块中,只要继承 maven-parent 模块就可以是实现 hibernate的依赖:
<span style="font-family:Arial;font-size:18px;"><parent><groupId>JavaMaven</groupId><artifactId>maven-parent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../maven-parent/pom.xml</relativePath></parent></span></span>
- Maven学习(二):属性、坐标与依赖
- 《maven实战》读书笔记(二)——坐标与依赖
- maven入门二-------坐标与依赖
- Maven学习笔记(十)坐标与依赖
- Maven学习笔记(四):坐标与依赖
- Maven学习笔记2-坐标与依赖
- maven坐标与依赖
- Maven学习笔记(坐标和依赖)
- Maven(三)坐标与依赖
- 【maven总结】(1) 坐标与依赖
- Maven学习笔记(二)--坐标、依赖和仓库
- Maven 坐标与依赖管理
- Maven核心:坐标与依赖
- MAVEN学习(3)------MAVEN的坐标及依赖
- Maven学习总结系列四:坐标与依赖
- 《Maven实战》学习总结(三)——坐标与依赖管理
- Maven学习笔记之Maven坐标依赖
- maven 教程二 坐标和依赖
- iOS图片和按钮的使用
- HTML5简明教程-1.1.HTML5画布Canvas
- springMVC web项目 数据库用户名密码加密解密
- 亚克力箱体尺寸
- 构建最小根文件系统
- Maven学习(二):属性、坐标与依赖
- Android基础系列之Activity(二)
- JAVA技术总监需求
- leetcode divide two int
- UPC 条形码的介绍及计算校验码
- php操作html元素,使用PHP Simple HTML DOM Parser
- C#抽象类及其方法的学习
- Javascript自学积累(将不时更新)
- 对按时间先后顺序的列表按同一天进行分组