1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| mvn clean compile mvn clean test mvn clean package mvn clean install 1. maven的约定:在项目的根目录放置pom.xml,在 src/main/java目录中放置项目的主代码,在src/test/java中放置项目的测试代码 2. maven定义了一组规则:世界上任何一个构件都可以使用maven坐标唯一标识,maven坐标的元素包括:groupId、artifactId、version、packaging、classifier groupId: 定义当前maven项目隶属的实际项目。maven项目和实际项目不一定是一对一的关系,一个实际项目往往会被划分成很多模块。groupId不应该对应项目隶属的组织或公司。groupId的表示方式和java包名的表示方式类似,通常与域名反向一一对应 artifactId: 该元素定义实际项目中一个maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀,方便寻找实际构件。默认情况下,maven生成的构件,其文件名会以artifactId作为开头 version: 该元素定义maven项目当前所处的版本 packaging: 该元素定义maven项目的打包方式。打包方式通常与所生成构件的文件扩展名对应。比如packaging为jar,则文件名为xxx.jar,而使用war打包方式的maven项目,最终生成的构件会有一个xxx.war文件,不过这不是绝对的。其次,打包方式会影响到构建的生命周期。当不定义packaging的时候,maven会默认值jar classifier: 该元素用来帮助定义构建输出的一些附属构件。附属构件与主构件对应,如主构件是nexus-indexer-2.0.0.jar,该项目可能还会通过使用一些插件生成如nexus-indexer-2.0.0.-javadoc.jar、nexus-indexer-2.0.0-sources.jar这样的一些附属构件,其包含了java文档和源代码。javadoc和sources就是这两个附属构件的classifier。注意:不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的 注:groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的 项目构件的文件名是与坐标相对应的,一般的规则为artifactId-version[-classifier].packaging,[-classifier]表示可选。强调packaging并非一定与构件扩展名对应。 <scope>test</scope>:用来定义依赖范围 3. 依赖的配置 根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。每个依赖可以包含的元素有: (1) groupId、artifactId、version: 依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,maven根据坐标才能找到需要的依赖 (2) type: 依赖的类型,对应于项目坐标定义的packaging。大部分情况该元素不必声明,其默认值为jar (3) scope: 依赖的范围 (4) optional: 标记依赖是否可选 (5) exclusions: 用来排除传递性依赖
|
依赖范围
依赖范围 |
对于编译classpath有效 |
对于测试classpath有效 |
对于运行时classpath有效 |
例子 |
compile |
Y |
Y |
Y |
spring-core |
test |
|
Y |
|
JUnit |
provided |
Y |
Y |
|
servlet-api |
runtime |
|
Y |
Y |
JDBC驱动实现 |
system |
Y |
Y |
|
本地的。Maven仓库之外的类库文件 |
仓库
仓库分为两类:本地仓库和远程仓库,首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果不存在或者需要查看是否有更新的构件版本,maven会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。
默认情况每个用户在自己的用户目录下都有一个路径名为 .m2/repository/
的仓库目录。此文件默认不存在,需要从maven安装目录复制 $M2_HOME/conf/settings.xml
文件再进行编辑。
maven的 install 插件(mvn install)会将项目的构建输出文件安装到本地仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| maven的中央仓库的配置:打开jar文件 $M2_HOME/lib/maven-model-builder-3.0.jar,访问路径 org/apache/maven/model/pom-4.0.0.xml 可看到配置 <repositories> <repository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> maven自带的中央仓库使用的id为central,如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。 url值指向仓库的地址 releases的enabled值为true,表示开启此仓库的发布版本下载支持 snapshots的enabled值为false,表示关闭仓库的快照版本的下载支持 layout元素值为default表示仓库的布局是maven2及maven3的默认布局,而不是maven1的布局 updatePolicy元素用来配置maven从远程仓库检查更新的频率,默认的值是daily,表示maven每天检查一次。never表示从不检查更新;always表示每次构建都检查更新;interval: X 表示每隔X分钟检查一次更新(X为任意整数) checksumPolicy元素用来配置maven检查校验和文件的策略,当构件被部署到maven仓库中时,会同时部署对应的校验和文件。warn构建时验证失败会警告,fail构建会失败;ignore忽略校验和错误 远程仓库如果需要认证的话,可以将配置认证信息放在setting.xml文件中 <servers> <server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> </server> </servers> server元素的id必须和POM中需要认证的repository元素的id完全一致,这个id将认证信息与仓库配置联系在了一起。
|
部署至远程仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 编辑项目的 pom.xml 文件 <distributionManagement> <snapshotRepository> <id>tencent_public_snapshots</id> <name>tencent_public_snapshot</name> <url>https://mirrors.tencent.com/repository/maven/tencent_public_snapshots/</url> </snapshotRepository> <repository> <!--必须与 settings.xml 的 id 一致--> <id>tencent_public</id> <name>tencent_public_release</name> <url>https://mirrors.tencent.com/repository/maven/tencent_public/</url> </repository> </distributionManagement> repository:表示发布版本构件的仓库 snapshotRepositiry:表示快照版本的仓库 远程仓库部署构件的时候,需要认证。需要在setting.xml 中创建 server 元素,其id与仓库的id 相匹配。 mvn clean deploy: 将项目构建输出的构件部署到配置对应的远程仓库
|
命令行和生命周期
1 2 3 4
| 1. mvn clean: 该命令调用clean生命周期的clean阶段,实际执行的阶段为clean生命周期的 pre-clean 和 clean 阶段 2. mvn test: 该命令调用default生命周期的test阶段,实际执行的阶段为default生命周期的validate、initialize等,直到test的所有阶段。这也解释了为什么在执行测试的时候,项目的代码能够自动得以编译 3. mvn clean install: 该命令调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行的阶段为clean生命周期的pre-clean、clean阶段,以及default生命周期的从validate至install的所有阶段。 4. mvn clean deploy site-deploy: 该命令调用clean生命周期的clean阶段、default生命周期的deploy阶段,以及site生命周期的site-deploy阶段。实际执行的阶段为clean生命周期的pre-clean、clean阶段,default生命周期的所有阶段,以及site生命周期的所有阶段。该命令结合了maven所有三个生命周期,且deploy为default生命周期的最后一个阶段,site-deploy为site生命周期的最后一个阶段。
|