参考:https://www.bilibili.com/video/BV1Fz4y167p5
虽然说 IDEA 等工具给我们提供了图形化界面,但其底层还是依靠 maven 命令来驱动,因此,了解 maven 的命令操作并熟练运用常见的 maven 命令很有必要。
maven 命令格式:
mvn [plugin-name]:[goal-name] // 执行 plugin-name 插件的 goal-name 目标。
mvn 插件名:命令名
常用命令
命令 | 描述 |
---|---|
mvn -version | 显示版本信息 |
mvn clean | 清理项目生产的临时文件,一般是模块下的 target 目录 |
mvn compile | 编译源代码,一般编译模块下的 src/main/java 目录 |
mvn package | 项目打包工具,会在模块下的 target 目录生成 jar 或 war 等文件 |
mvn test | 测试命令,或执行 src/test/java/ 下的 junit 的测试用例 |
mvn install | 将打包的 jar/war 文件复制到你的本地仓库中,供其他模块使用 |
mvn verify | 运行任何检查,验证包是否有效且达到质量标准 |
mvn deploy | 将打包的文件发布到远程仓库(指的是可以在settings.xml中指定的私人/组织内部的远程仓库,非国外的那个中央仓库),提供他人进行下载依赖。 |
mvn site | 生成项目相关信息的网站 |
mvn eclipse:eclipse | 将项目转化为 Eclipse 项目 |
mvn dependency:tree | 打印出项目的整个依赖树 |
mvn archetype:generate | 创建 Maven 的普通 java 项目 |
mvn tomcat7:run | 在 tomcat 容器中运行 web 应用 |
mvn jetty:run | 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用 |
注意:运行 maven 命令的时候,首先需要定位到 maven 项目的目录,也就是项目的
pom.xml
所在的目录。否则,需要用参数来指定项目的目录。
命令参数
很多命令可以携带参数,以执行更精准的任务。
-D 传入属性参数
mvn package -Dmaven.test.skip=true
以 -D
开头,将 maven.test.skip
的值设为 true
,就是告诉 maven 打包的时候跳过单元测试。同理, mvn deploy -Dmaven.test.skip=true
代表部署项目并跳过单元测试。
-P 使用指定的 Profile 配置
比如项目开发需要多个环境,一般为:开发、测试、预发、正式4个环境。
各个环境对应的数据库是不同的,其他配置文件也可能是不同的。
可以通过 <profile>
去配置不同的环境。<profiles>
定义了各个环境的变量 id
。
filters
中定义了各个环境配置文件的地址(config/${env}.properties
),其中地址中的环境变量(${env}
)就是上面 profile
中定义的值(<env>
), resources
中是定义哪些目录下的文件会被配置文件中定义的变量替换。
通过 -P
去指定使用不同的环境。
如按不同环境进行打包部署(测试环境就会去找测试环境的数据库及配置文件):
mvn package -Pdev -Dmaven.test.skip=true
表示打包本地(开发)环境,并跳过单元测试。
dev
为本地开发环境的id
-Pdev
就会去找与id
为dev
的<profile>
相关的配置信息。
在 pom.xml
中配置如下:
<profiles>
<profile>
<id>dev</id> // 本地开发环境
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>qa</id> // 测试环境
<properties>
<env>qa</env>
</properties>
</profile>
<profile>
<id>pre</id> // 预发环境
<properties>
<env>pre</env>
</properties>
</profile>
<profile>
<id>prod</id> // 正式环境
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
......
<build>
<filters>
<filter>config/${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
......
</build>