您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Maven項目中如何配置pom.xml,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
maven 命令行打包
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差不多,都是將類和資源打在一起) |
實戰
案例一
使用 mvn 打包,并跳過測試,然后生成文檔,使用 dev 配置
@echo off mvn clean package -Dmaven.test.skip=true javadoc:javadoc -Pdev
案例二
將模塊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 是一個調用外部批處理程序的指令,類似于函數調用的執行邏輯,它會一直等到函數執行結束才返回。
pom.xml的常用配置
denpendencyManagement 與 pluginManagement
denpendencyManagement是用于管理項目jar包依賴,pluginManagement是用于管理plugin。
它們的作用是列出依賴的jar包或者plugin包,讓子pom來決定是否引用。
對不同的配置賦予不同的屬性
<profiles> <profile> <id>dev</id> <properties> <mysql.url>http://localhost:3306</mysql.url> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <mysql.url>http://192.168.1.10:3306</mysql.url> </properties> </profile> </profiles>
activation 元素用來指定激活條件。當沒有指定條件,然后指定 activeByDefault 為 true 的時候,就表示沒有指明 profile 的情況下默認激活。也就是說 mvn package
將使用 dev 的配置,而 mvn package -P prod
的時候使用的才是 prod 的配置。
根據不同配置使用不同的源文件
<profiles> <profile> <id>dev</id> <properties> <debug.enable>true</debug.enable> </properties> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-id</id> <goals> <goal>copy-goal</goal> </goals> <phase>validate</phase> <configuration> <outputDirectory>${basedir}/src/com/companyName/global/</outputDirectory> <resources> <directory>${basedir}/profiles/dev/</directory> <filtering>true</filtering> <includes> <include>**/*.java</include> </includes> </resources> </configuration> </execution> </executions> </plugin> </profile> </profiles>
然后在 profiles/dev 目錄下新建 java 文件
(略) private boolean isDebugEnable = ${debug.enable} (略)
執行打包命令 mvn clean package -DskipTests -Pdev
,就可以看到 /profiles/dev 目錄下的 java 文件全部被復制到了 /src/com/companyName/global 目錄下了,并且 isDebugEnable 的值也被替換了。
配置項說明:
parse 用來指明具體在 maven 的哪個生命周期執行該任務
maven 的生命周期表
生命周期階段 | 描述 |
---|---|
validate | 驗證項目是否正確,并且所有必要的信息可用于完成構建過程 |
initialize | 建立初始化狀態,例如設置屬性 |
generate-sources | 產生任何的源代碼包含在編譯階段 |
process-sources | 處理源代碼,例如,過濾器值 |
generate-resources | 包含在包中產生的資源 |
process-resources | 復制和處理資源到目標目錄,準備打包階段 |
compile | 編譯該項目的源代碼 |
process-classes | 從編譯生成的文件提交處理,例如:Java類的字節碼增強/優化 |
generate-test-sources | 生成任何測試的源代碼包含在編譯階段 |
process-test-sources | 處理測試源代碼,例如,過濾器任何值 |
test-compile | 編譯測試源代碼到測試目標目錄 |
process-test-classes | 處理測試代碼文件編譯生成的文件 |
test | 運行測試使用合適的單元測試框架(JUnit) |
prepare-package | 執行必要的任何操作的實際打包之前準備一個包 |
package | 提取編譯后的代碼,并在其分發格式打包,如JAR,WAR或EAR文件 |
pre-integration-test | 完成執行集成測試之前所需操作。例如,設置所需的環境 |
integration-test | 處理并在必要時部署軟件包到集成測試可以運行的環境 |
pre-integration-test | 完成集成測試已全部執行后所需操作。例如,清理環境 |
verify | 運行任何檢查,驗證包是有效的,符合質量審核規定 |
install | 將包安裝到本地存儲庫,它可以用作當地其他項目的依賴 |
deploy | 復制最終的包到遠程倉庫與其他開發者和項目共享 |
inherited 用來指明 execution 是否傳遞到子 pom.xml 里
filtering屬性用來表示資源文件中的 “EL表達式占位符” 是否需要被替換,true為需要替換
上述就是小編為大家分享的Maven項目中如何配置pom.xml了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。