您好,登錄后才能下訂單哦!
maven的基本使用是怎樣的,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
Apache Maven 是一套軟件工程管理和整合工具。 它是基于工程對象模型( Project Object Model ,POM)的概念,通過一個中央信息管理模塊,Maven 能夠管理項目的構(gòu)建、報告和文檔。說白了maven項目就是通過一個pom.xml實現(xiàn)對工程的管理,項目的測試、打包、部署等一應(yīng)俱全的功能,用好了maven插件,簡直事半功倍!Maven 是基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。
Maven 能夠幫助開發(fā)者完成以下工作:
構(gòu)建
文檔生成
報告
依賴
SCMs
發(fā)布
分發(fā)
郵件列表
總的來說,Maven 簡化了工程的構(gòu)建過程,并對其標準化。它無縫銜接了編譯、發(fā)布、文檔生成、團隊合作和其他任務(wù)。Maven 提高了重用性,負責(zé)了大部分構(gòu)建相關(guān)的任務(wù)。
開發(fā)者不需要再關(guān)心每一個配置細節(jié)。Maven 為工程提供了合理的默認行為。當(dāng)創(chuàng)建 Maven 工程時,Maven 會創(chuàng)建默認的工程結(jié)構(gòu)。開發(fā)者只需要合理的放置文件,而在 pom.xml 中不再需要定義任何配置。
Maven 使用約定而不是配置,意味著開發(fā)者不需要再自己創(chuàng)建構(gòu)建過程。maven內(nèi)置變量如下:
${basedir}表示項目根目錄,即包含pom.xml文件的目錄; ${version}表示項目版本; ${project.basedir}同${basedir}; ${project.baseUri}表示項目文件地址; ${maven.build.timestamp}表示項目構(gòu)件開始時間; ${maven.build.timestamp.format}表示屬性${maven.build.timestamp}的展示格式,默認值為yyyyMMdd-HHmm,可自定義其格式,其類型可參考java.text.SimpleDateFormat。 ${project.build.directory}表示主源碼路徑; ${project.build.sourceEncoding}表示主源碼的編碼格式; ${project.build.sourceDirectory}表示主源碼路徑; ${project.build.finalName}表示輸出文件名稱; ${project.version}表示項目版本,與${version}相同; ${project.xxx} 當(dāng)前pom文件的任意節(jié)點的內(nèi)容 ${env.xxx} 獲取系統(tǒng)環(huán)境變量。 ${settings.xxx} 指代了settings.xml中對應(yīng)元素的值。
一個工程僅有一個pom文件,那么如何唯一標記當(dāng)前 工程呢?
所有的 POM 文件需要 project 元素和三個必須的字段:groupId, artifactId,version。
在倉庫中的工程標識為 groupId:artifactId:version
POM.xml 的根元素是 project,它有三個主要的子節(jié)點:
<groupId>com.companyname.project-group</groupId> <artifactId>project</artifactId> <version>1.0</version>
groupId:公司域名倒寫 artifactId: 當(dāng)前項目名稱 version: 版本號
當(dāng)執(zhí)行一個任務(wù)或者目標時,Maven 會查找當(dāng)前目錄下的 POM,從其中讀取所需要的配置信息,然后執(zhí)行目標。能夠在 POM 中設(shè)置的一些配置如下:
project dependencies
plugins
goals
build profiles
project version
developers
mailing list
更加詳細的內(nèi)容可以 到 pom.xml 所在的目錄下執(zhí)行以下 mvn 命令 mvn help:effective-pom ,查看完整的內(nèi)容。
maven對構(gòu)建(build)的過程進行了抽象和定義,這個過程被稱為構(gòu)建的生命周期(lifecycle)。生命周期(lifecycle)由多個階段(phase)組成,每個階段(phase)會掛接一到多個goal。goal是maven里定義任務(wù)的最小單元,goal分為兩類,一類是綁定phase的,就是執(zhí)行到某個phase,那么這個goal就會觸發(fā),另外一類不綁定,就是單獨任務(wù),這就相當(dāng)于ant里的target。
以clean生命周期為例,當(dāng)我們執(zhí)行 mvn post-clean 命令時,Maven 調(diào)用 clean 生命周期,它包含以下階段:
pre-clean:執(zhí)行一些需要在clean之前完成的工作
clean:移除所有上一次構(gòu)建生成的文件
post-clean:執(zhí)行一些需要在clean之后立刻完成的工作
mvn clean 中的 clean 就是上面的 clean,在一個生命周期中,運行某個階段的時候,它之前的所有階段都會被運行,也就是說,如果執(zhí)行 mvn clean 將運行以下兩個生命周期階段:
pre-clean, clean
如果我們運行 mvn post-clean ,則運行以下三個生命周期階段:
pre-clean, clean, post-clean
使用構(gòu)建配置文件,你可以為不同的環(huán)境,比如說生產(chǎn)環(huán)境(Production)和開發(fā)(Development)環(huán)境,定制構(gòu)建方式。
配置文件在 pom.xml 文件中使用 activeProfiles 或者 profiles 元素指定,并且可以通過各種方式觸發(fā)。配置文件在構(gòu)建時修改 POM,并且用來給參數(shù)設(shè)定不同的目標環(huán)境(比如說,開發(fā)(Development)、測試(Testing)和生產(chǎn)環(huán)境(Production)中數(shù)據(jù)庫服務(wù)器的地址)。
場景:開發(fā)環(huán)境下和生產(chǎn)環(huán)境下的配置文件肯定不一樣,如何通過profile來控制呢?
假設(shè) 在src/main/resources文件夾下有三個用于測試文件:
那么在pom.xml文件下做如下配置:
<profile> <id>normal</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>Using env.properties</echo> <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>prod</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>Using env.prod.properties</echo> <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
使用 pom.xml 來定義不同的 profile,并使用 maven 命令可以激活不同的 profile。
mvn test -Pnormal
將會激活id為normal的環(huán)境
打開 %USER_HOME%/.m2 目錄下的 settings.xml 文件,其中 %USER_HOME% 代表用戶主目錄。如果 setting.xml 文件不存在就直接拷貝 %M2_HOME%/conf/settings.xml 到 .m2 目錄,其中 %M2_HOME% 代表 Maven 的安裝目錄。
配置 setting.xml 文件,增加 <activeProfiles>屬性:
<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <activeProfiles> <activeProfile>test</activeProfile> </activeProfiles> </settings>
執(zhí)行命令:
mvn test
此時不需要使用 -Ptest 來輸入?yún)?shù)了,上面的 setting.xml 文件的 <activeprofile> 已經(jīng)指定了 test 參數(shù)代替了。
除此之外,還可以通過環(huán)境變量激活。
通常,可以在setting文件里設(shè)置如下的倉庫源,可以快速下載相應(yīng)的jar包
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
看完上述內(nèi)容,你們掌握maven的基本使用是怎樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。