Maven目录结构 src –main—java src---test---java 所有maven项目都是这样的结构
什么是pom?
pom作为项目对象模型。
通过xml表示maven项目,使用pom.xml来实现。
主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
依赖范围:
compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。
test: 测试依赖范围。
provided: 对于编译和测试classpath有效
runtime: 运行时依赖范围。
system: 系统依赖范围。
常用命令:
mvn compile
编译主程序源代码,不会编译test目录的源代码。第一次运行时,会下载相关的依赖包,
可能会比较费时间。
mvn test-compile编译测试代码, compile之会后生成target文件夹,主程序编译在classes下面,测试程序放在test-classes下。
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除目标目录中的生成结果
mvn package 依据项目生成jar文件,打包之前会进行编译,测试。
mvn install 在本地Repository中安装jar。
基本内容:
POM包括了所有的项目信息
其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。 一般情况下,前
面三项就可以组成项目的唯一坐标了。
POM关系:主要为依赖,继承,合成
Repositories: pom里面的仓库与setting.xml里的仓库功能是一样的。
主要的区别在于, pom里的仓库是个性化的。
比如一家大公司里的setting文件是公用
的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要
在pom里设置自己需要的仓库地址。
repositories:要成为maven2的repository
artifact,必须具有pom文件在$BASE_REPO/groupId/artifactId/version/artifactIdversion.pom
BASE_REPO可以是本地,也可以是远程的。 repository元素就是声明那些去查找的reposit
ories
默认的central Maven repository在http://repo1.maven.org/maven2/
聚合
为了能够使用一条命令就能构建 account-email和 accountpersist两个模块,我们需要建立一个额外的名为 accountaggregator的模块,然后通过该模块构建整个项目的所有模块。 accountaggregator本身也是个 Maven项目,它的 POM如下
Xml代码
注意: packaging的类型为pom , module的值是一个以当前POM为主目录的相对路径。
继承
可声明父POM供子 POM继承
父模块POM如下:
Xml代码
子模块声明继承如下:
Xml代码
什么是pom?
pom作为项目对象模型。
通过xml表示maven项目,使用pom.xml来实现。
主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
依赖范围:
compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。
test: 测试依赖范围。
provided: 对于编译和测试classpath有效
runtime: 运行时依赖范围。
system: 系统依赖范围。
常用命令:
mvn compile
编译主程序源代码,不会编译test目录的源代码。第一次运行时,会下载相关的依赖包,
可能会比较费时间。
mvn test-compile编译测试代码, compile之会后生成target文件夹,主程序编译在classes下面,测试程序放在test-classes下。
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除目标目录中的生成结果
mvn package 依据项目生成jar文件,打包之前会进行编译,测试。
mvn install 在本地Repository中安装jar。
基本内容:
POM包括了所有的项目信息
groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject. mojo生成的相对路径为: /org/myproject/mojo 项目名 artifactId:项目模块名称 version:项目的版本 packaging:打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par name:用户描述项目的名称,无关紧要的东西,可选 url:应该是只是写明开发团队的网站,无关紧要,可选 classifer:分类
其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。 一般情况下,前
面三项就可以组成项目的唯一坐标了。
POM关系:主要为依赖,继承,合成
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <type>jar</type> <scope>test</scope> <optional>true</optional> </dependency>
Repositories: pom里面的仓库与setting.xml里的仓库功能是一样的。
主要的区别在于, pom里的仓库是个性化的。
比如一家大公司里的setting文件是公用
的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要
在pom里设置自己需要的仓库地址。
repositories:要成为maven2的repository
artifact,必须具有pom文件在$BASE_REPO/groupId/artifactId/version/artifactIdversion.pom
BASE_REPO可以是本地,也可以是远程的。 repository元素就是声明那些去查找的reposit
ories
默认的central Maven repository在http://repo1.maven.org/maven2/
<repositories> <repository> <releases> <enabled>false</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> <id>codehausSnapshots</id> <name>Codehaus Snapshots</name> <url>http://snapshots.maven.codehaus.org/maven2</url> <layout>default</layout> </repository> </repositories>
聚合
为了能够使用一条命令就能构建 account-email和 accountpersist两个模块,我们需要建立一个额外的名为 accountaggregator的模块,然后通过该模块构建整个项目的所有模块。 accountaggregator本身也是个 Maven项目,它的 POM如下
Xml代码
1. <project> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-aggregator</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Account Aggregator</name> <modules> <module>account-email</module> <module>account-persist</module> </modules> </project>
注意: packaging的类型为pom , module的值是一个以当前POM为主目录的相对路径。
继承
可声明父POM供子 POM继承
父模块POM如下:
Xml代码
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId> account-parent </artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Account Parent</name> </project>
子模块声明继承如下:
Xml代码
<project> <modelVersion>4.0.0</modelVersion> < parent > <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId> account-parent </artifactId> <version>1.0.0-SNAPSHOT</version> < relativePath >../account-parent/pom.xml</ relativePath> </ parent > <artifactId> account-email </artifactId> <name>Account Email</name> . ... </project>