基本命令
- 打印系统所有的系统属性和环境变量:
mvn help:system
- 查看版本:
mvn -v
mvn -version
- 编译:
mvn compile
- 删除 target :
mvn clean
- 安装构件到本地仓库:
mvn install
- 发布构件到远程仓库:
mvn deploy
- 发布构件(不包含子模块):
mvn clean deploy -N
- 打包:
mvn package
- 只打 jar 包:
mvn jar:jar
- 已解析依赖树:
mvn dependency:tree
- 已解析依赖列表:
mvn dependency:resolve
mvn dependency:list
- 分析依赖:
mvn dependency:analyze
- 获取插件帮助
- 跳过Test:
-DskipTests(编译但是不运行)
-Dmaven.test.skip=true(不编译不运行)
- build一个失败后,继续执行其他:
-fn
- 已解析的插件树:
mvn dependency:resolve-plugins
- 下载Sources文件:
mven dependency:sources
- FS常用:
mvn -am -U clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -pl <artifactId>
archetype插件
- 创建mvn项目:
mvn archetype:generate
mvn archetype:generate -DgroupId=<your-groupId> -DartifactId=<your-artifactId> -Dversion=<version> -Dpackage=<package-name>
web容器中间件插件
- 运行项目于 jetty 上:
mvn -Djetty.port=<port> jetty:run
- 运行项目于 tomcat上:
mvn -Dmaven.tomcat.port=<port> tomcat7:run
依赖
依赖范围
依赖范围 | 对于编译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仓库之外的类库文件 |
传递性依赖
第一依赖↓\第二依赖→ | compile | test | provided | runtime |
---|---|---|---|---|
compile | compile | - | _ | runtime |
test | test | - | - | test |
provided | provided | - | provided | provided |
runtime | runtime | - | - | runtime |
依赖调解
- 第一原则:路径最近者优先;
- 第二原则:第一声明者优先;
生命周期
- clean生命周期:清理项目
- pre-clean: 执行一些清理前需要完成的工作;
- clean: 清理上一次构建生成的文件;
- post-clean:执行一些清理后需要完成的工作;
- default生命周期:构建项目
- validate
- initialize
- generate-sources
- process-sources:处理项目主资源文件。一般来说是对/src/main/resources目录的内容进行变量替换等工作,复制到项目输出的主classpath目录中。
- genarate-resources
- compile:编译项目的主源码。一般来说是编译/src/main/java目录下得Java文件到项目输出的主classpath目录中。
- process-classes
- generate-test-sources
- process-test-sources:处理项目测试资源文件。一般来说是对/src/test/resources目录的内容进行变量替换等工作,复制到项目输出的测试classpath目录中。
- generate-test-resources
- test-compile:编译项目的测试源码。一般来说是编译/src/test/java目录下得Java文件到项目输出的测试classpath目录中。
- process-test-classes
- test:使用单元测试框架运行测试,测试代码不会被打包或部署。
- prepare-package
- package:接受编译好的代码,打包成可发布的格式,如JAR。
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install:将包安装到Maven本地仓库,供本地其他Maven项目使用。
- deploy:将最终的包复制到远程仓库。
- site生命周期:建立项目站点
- pre-site:执行一些在生成项目站点之前需要完成的工作。
- site:生成项目站点文档。
- post-site:执行一些在生成项目站点之后需要完成的工作。
- site-deploy:将生成的项目站点发布到服务器上。
继承
可继承的元素
- groupId:项目组ID,项目坐标的核心元素;
- version:项目版本,项目坐标的核心元素;
- description:项目的描述信息;
- organization:项目的组织信息;
- inceptionYear:项目的创始年份;
- url: 项目的URL地址;
- developers:项目的开发者信息;
- contributors:项目的贡献者信息;
- distributionManagement:项目的部署配置;
- isssueManagement:项目的绝仙跟踪集成系统;
- ciManagement:项目的持续集成系统信息;
- scm:项目的版本控制系统信息;
- mailingLists:项目的邮件列表;
- properties:自定义的Maven属性;
- dependencies:项目的依赖配置;
- dependencyManagement:项目的依赖管理配置;
- repositories:项目的仓库配置;
- build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;
- reporting:项目的报告输出目录配置、报告插件配置等;
属性
- 内置属性:
- ${basedir}表示项目根目录,即pom.xml所在的目录,
- ${version}表示项目版本;
- POM属性:
- ${project.groupId}:项目的groupId;
- ${project.artifactId}:项目的artifactId;
- ${project.version}:项目的版本;
- ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java
- ${project.build.testSourceDireactory}:项目的测试源码目录,默认为src/test/java
- ${project.build.directory}:项目构建输出目录,默认为target/
- ${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes
- ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes;
- ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}-${project.version}
- 自定义属性
- Settings属性:settings.xml文件元素的值,如${settings.localRepository}表示用户本地仓库的地址;
- Java系统属性:所有Java系统属性都可以使用Maven属性引用,例如${user.home}指向了用户目录。可以通过mvn help:system来查看所有的系统变量;
- 环境变量属性:以env.开头的maven属性引用,例如${env.JAVA_HOME}指向了JAVA_HOME环境变脸的值,可以通过mvn help:system查看所有的环境变量;
标签详解
dependency标签
|
|
- groupId
- artifactId
- version
- type
- 依赖的类型,可选
jar
,war
,pom
,默认jar
;
- 依赖的类型,可选
- classifier
- 构建类型,比如
sources
,javadoc
,jdk17
,jdk18
等;
- 构建类型,比如
optional
- 有依赖A -> B -> C,如果A不想依赖C,那么在B依赖C的时候,声明C的optional为true,则A引入B依赖的时候,不会引入C依赖;1234567pom.xml(ProjectB)<dependency><groupId>sample.ProjectC</groupId><artifactId>ProjectC</artifactId><version>1.0-SNAPSHOT</version><optional>true</optional></dependency>
- 有依赖A -> B -> C,如果A不想依赖C,那么在B依赖C的时候,声明C的optional为true,则A引入B依赖的时候,不会引入C依赖;
exclusions
- 依赖排除,就是有时候引入某一个依赖的时候,该依赖下有jar包冲突,可以排除掉,不引用该jar;
- scope
- 可选 compile、test、runntime、provided,system,import;默认 compile;
- systemPath
- 当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径;1234567<dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId><version>1.5</version><scope>system</scope><systemPath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systemPath></dependency>
- 当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径;