mvn -v, --show-version
現在最新的maven版本是 3.6,我這裏用的還是 2017 年下載的 3.1.1 版本(雖然有點過時,但是大版本不變,指令基本一樣)
mvn -h, --help
使用 help 命令可以看到 maven 命令的幫助文檔,下面主要介紹兩個常用的指令 —— D 和 P。
mvn -D, --define <arg>
mvn -DpropertyName=propertyValue clean package
可以用來臨時定義屬性和值。如果 pom.xml 中已經有該屬性,那麼會替換掉 pom.xml 中的值。
如果需要定義多個變量,可以用空格分隔
mvn -DpropA=valueA -DpropB=valueB -DpropC=valueC clean package
當然這個屬性也可以直接在 pom.xml 文件下配置
<project>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<android.sdk.path>C:\software\android\sdk</android.sdk.path>
<maven.test.skip>true</maven.test.skip>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
</project>
mvn -P, --activate-profiles <arg>
P 表示 Profiles 配置文件,需要在 <profile> 標籤中指定 <id> 才能用 -P 使之生效。
假如 pom.xml 如下:
<project>
...
<profiles>
<profile>
<id>test</id>
...
</profile>
<profile>
<id>dev</id>
...
</profile>
<profile>
<id>prod</id>
...
</profile>
</profiles>
...
</project>
那麼打包時執行 mvn clean package -P prod
將只激活 prod 環境的 profile 配置(也就是說此時 test 和 dev 的配置不會生效)
mvn package 與 mvn install 的區別
命令 | 含義 |
---|---|
mvn clean | 刪除 target 目錄 |
mvn package | 把 jar 打到本項目的 target 目錄下 |
mvn install | 把 jar 打到本項目的 target 目錄下,之後再將它安裝到本地的 maven 倉庫中 |
mvn 打包插件的執行順序
我這裏用的是 maven 3.1.1 打包 android 項目
--- maven-clean-plugin:2.5:clean (default-clean)
--- maven-install-plugin:2.4:install (default-install)
>>> maven-javadoc-plugin:2.6.1:javadoc (default-cli)
<<< maven-javadoc-plugin:2.6.1:javadoc (default-cli)
--- maven-javadoc-plugin:2.6.1:javadoc (default-cli)
--------------------------------------------------------------
--- maven-clean-plugin:2.5:clean (default-clean)
--- maven-resources-plugin:2.6:copy-resources (copy-src)
--- android-maven-plugin:3.8.0:generate-sources (default-generate-sources)
--- maven-resources-plugin:2.6:copy-resources (default-resources)
--- maven-compiler-plugin:2.3.1:compile (default-compile)
--- android-maven-plugin:3.8.0:proguard (default-proguard)
--- maven-resources-plugin:2.6:testResources (default-testResources)
--- maven-compiler-plugin:2.3.1:testCompile (default-testCompile)
--- maven-surefire-plugin:2.14:test (default-test)
--- maven-jar-plugin:2.6:jar (default-jar)
--- android-maven-plugin:3.8.0:apklib (default-apklib)
--- maven-install-plugin:2.3.1:install-file (custom-install)
--- maven-antrun-plugin:1.3:run (to-lib-directory)
>>> maven-javadoc-plugin:2.9:javadoc (default-cli)
--- maven-resources-plugin:2.6:copy-resources (copy-src)
--- android-maven-plugin:3.8.0:generate-sources (default-generate-sources)
<<< maven-javadoc-plugin:2.9:javadoc (default-cli)
--- maven-javadoc-plugin:2.9:javadoc (default-cli)
插件說明
插件 | 說明 |
---|---|
maven-clean-plugin | 刪除已有target目錄 |
maven-resources-plugin | 複製和替換文件 |
maven-compiler-plugin | 編譯所有源文件生成class文件至target\classes目錄下 |
maven-surefire-plugin | 運行測試用例 |
maven-jar-plugin | 對編譯後生成的文件進行打包 包名稱默認爲:artifactId-version-SNAPSHOT.jar,保存在 target 目錄下 |
maven-javadoc-plugin | 生成文檔 |
android-maven-plugin | 生成、混淆 Android 的類文件(apklib是和aar差不多,都是將類和資源打在一起) |
實戰 1
使用 mvn 打包,並跳過測試,然後生成文檔,使用 dev 配置
@echo off
mvn clean package -Dmaven.test.skip=true javadoc:javadoc -Pdev
實戰 2
將模塊A生成的 jar,複製到模塊B的 libs 目錄下。
安裝模塊到 maven 倉庫。
@echo off
copy /y "moduleA/target/target.jar" "moduleB/libs/baseA.jar"
call mvn install:install-file -Dfile=baseA.jar -DgroupId=com.example -DartifactId=baseA -Dversion=1.0.1 -Dpackaging=jar
默認情況下,cmd 的命令發起調用後就立即返回了。而 CALL 是一個調用外部批處理程序的指令,類似於函數調用的執行邏輯,它會一直等到函數執行結束才返回。