Maven編譯代碼的相關命令無標題文章

Maven編譯代碼的相關命令

第一、main目錄下的主代碼編寫完畢后,使用Maven進行編譯,在項目根目錄下運行命令mvn clean compile

行項目編譯。

第二、test目錄下的測試用例編寫完畢之后就可以調用Maven執行測試,運行mvn clean test進行測試。

第三、將項目進行編譯、測試之后,下一個重要步驟就是打包(package)。在pom.xml中定義

war標簽表示將要把工程打成什么類型的包(默認是jar類型),我們可以簡單地

執行命令mvn clean package進行打包。

第四、war插件的war目標將項目主代碼打包成一個名為S3h3WebWs標簽中的定義-

0.0.1-SNAPSHOT標簽中的定義.war的文件

(最終的jar文件是S3h3WebWs-0.0.1-SNAPSHOT.war),該文件也位于target/輸出目錄中,它是根據

artifact-version.jar規則進行命名的,如有需要,我們還可以使用finalName來自定義該文件的名稱。

第五、至此,我們得到了項目的輸出,如果我們把項目打成了jar文件并且需要在其他項目中使用的話,就可以

復制這個jar文件到其他項目的Classpath中從而使用這個項目中的類。但是,如何才能讓其他的Maven項

目直接引用這個jar呢?我們還需要一個安裝的步驟,執行mvn clean install命令。

第六、我們已經將體驗了Maven最主要的命令:mvn clean compilemvn clean test

mvn clean packagemvn clean install。執行test之前是會先執行compile的,執行package之前是

會先執行test的,而類似地,install之前會執行package。

第七、如果項目中有一個擁有main方法的類需要被調用執行。默認打包生成的jar是不能夠直接運行的main方法

的,因為帶有main方法的類信息不會添加到manifest中(我們可以打開jar文件中的META-INF/MANIFEST.MF

文件,將無法看到Main-Class一行)。為了生成可執行的jar文件,我們需要借助maven-shade-plugin插

件,配置該插件如下:

org.apache.maven.plugins

maven-shade-plugin

1.2.1

package

shade

com.todaytech.framework.utils.VoConvertXmlUtils

plugin元素在POM中的相對位置應該在下面。我們配置了mainClass

為com.todaytech.framework.utils.VoConvertXmlUtils,項目在打包時會將該信息放到MANIFEST中。現

在執行mvn clean install,待構建完成之后打開target/目錄,我們可以看到

S3h3WebWs-0.0.1-SNAPSHOT.jar和original-S3h3WebWs-0.0.1-SNAPSHOT.jar,前者是帶有Main-Class信息

的可運行jar,后者是原始的jar,打開hello-world-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看 ?????到它包含這樣一行信息:Main-Class:com.todaytech.framework.utils.VoConvertXmlUtils

現在,我們在項目根目錄中執行該jar文件:

D: \code\S3h3WebWs>java -jar target\S3h3WebWs-0.0.1-SNAPSHOT.jar

Hello Maven

控制臺輸出為Hello Maven,這正是我們所期望的。

第八、使用maven archetype來創建該項目的骨架,離開當前的Maven項目目錄。

如果是Maven 3,簡單的運行:

mvn archetype:generate

如果是Maven 2,最好運行如下命令:

mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate

很多資料會讓你直接使用更為簡單的 mvn archetype:generate 命令,但在Maven2中這是不安全的,因為

該命令沒有指定archetype插件的版本,于是Maven會自動去下載最新的版本,進而可能得到不穩定的

SNAPSHOT版本,導致運行失敗。然而在Maven 3中,即使用戶沒有指定版本,Maven也只會解析最新的穩定

版本,因此這是安全的。

我們實際上是在運行插件maven-archetype-plugin,注意冒號的分隔,其格式為

groupId:artifactId:version:goal,org.apache.maven.plugins是maven官方插件的groupId,

maven-archetype-plugin是archetype插件的artifactId,2.0-alpha-5是目前該插件最新的穩定版,

generate是我們要使用的插件目標。

緊接著我們會看到一段長長的輸出,有很多可用的archetype供我們選擇,包括著名的Appfuse項目的

archetype,JPA項目的archetype等等。每一個archetype前面都會對應有一個編號,同時命令行會提示一

個默認的編號,其對應的archetype為maven-archetype-quickstart,我們直接回車以選擇該archetype,

緊接著Maven會提示我們輸入要創建項目的groupId、artifactId、 version、以及包名package。

--------------------------------------------------------------------------------------------------

生成清除Eclipse項目結構:

mvn eclipse:eclipse

mvn eclipse:clean

清理(刪除target目錄下編譯內容):

mvn clean

僅打包Web頁面文件:

mvn war:exploded

打包時跳過測試:

mvn package -Dmaven.test.skip=ture

跳過測試運行maven任務:

mvn -Dmaven.test.skip=true XXX

創建Maven的普通java項目(只適用于Maven2.x版本):

mvn archetype:create?-DgroupId=packageName?-DartifactId=projectName

創建Maven的Web項目(只適用于Maven2.x版本):

mvn archetype:create??-DgroupId=packageName-DartifactId=webappNameDarchetypeArtifactId=maven-archetype-webapp

創建Maven的Web項目(只適用于Maven3.x版本):

C:\Documents and Settings\Administrator>f:

F:\>cd F:\SoftWare\Maven\MavenWebAppTest

F:\SoftWare\Maven\MavenWebAppTest>mvn

archetype:generate -DgroupId=com.shihuan -DartifactId=S3h3WebWs

-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

創建Maven的Quickstart項目(只適用于Maven3.x版本):

C:\Documents and Settings\Administrator>f:

F:\>cd F:\SoftWare\Maven\MavenWebAppTest

F:\SoftWare\Maven\MavenWebAppTest>mvn

archetype:generate -DgroupId=com.shihuan -DartifactId=S3h3WebWs

-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

查看詳細日志信息命令:

mvn archetype:create -Dgroupid=com.shihuan -Dartifactid=S3h3WebWs -e-DarchetypeArtifactid=maven-archetype-webapp

或者

mvn archetype:create -Dgroupid=com.shihuan -Dartifactid=S3h3WebWs -X-DarchetypeArtifactid=maven-archetype-webapp

編譯源代碼: mvn compile

編譯測試代碼:mvn test-compile

運行測試:mvn test

生成站點目錄: mvn site

生成站點目錄并發布:mvn site-deploy

安裝當前工程的輸出文件到本地倉庫: mvn install

安裝指定文件到本地倉庫:mvn

install:install-file -DgroupId=

-DartifactId= -Dversion=1.0.0 -Dpackaging=jar

-Dfile=

查看實際pom信息: mvn help:effective-pom

分析項目的依賴信息:mvn dependency:analyze 或 mvn dependency:tree

查看幫助信息:mvn help:help 或 mvn help:help -Ddetail=true

查看插件的幫助信息:mvn :help,比如:mvn dependency:help 或 mvn ant:help

生成eclipse項目:mvn eclipse:eclipse

生成idea項目:mvn idea:idea

組合使用goal命令,如只打包不測試:mvn -Dtest package

只打jar包: mvn jar:jar

只測試而不編譯,也不測試編譯:mvn test -skipping compile -skipping test-compile

在pom.xml文件中增加servlet容器的插件:

org.codehaus.mojo

tomcat-maven-plugin

org.mortbay.jetty

maven-jetty-plugin

6.1.6

maven-compiler-plugin

1.6

1.6

UTF-8

啟動tomcat:

mvn tomcat:run

啟動jetty:

mvn jetty:run

轉化為eclipse項目:

mvn -Dwtpversion=1.5 eclipse:eclipse

這樣生成wtp插件的web項目。

打開eclipse,菜單選擇:file>import>general>existing projects into workspace,在對話框中選中目錄,導入即可。

另外,需要在eclipse里創建一個classpath變量,名稱為:M2_REPO,值為系統用戶下.m2/repository目錄。

packaging : 打包的格式可以為:pom , jar , maven-plugin , ejb , war , ear , rar , par

POM間關系:?依賴關系(dependencies)、繼承關系(parent)、聚合關系(modules)。

依賴關系舉例:

org.hibernate

hibernate

3.2.6.ga

繼承關系舉例:

繼承其他pom.xml配置的內容。

maven提供了一個類似java.lang.Object的頂級父pom.xml文件。

可以通過下面命令查看當前pom.xml受到超pom.xml文件的影響:mvn help:effective-pom

創建一個各種項目可復用的pom.xml文件:http://easymorse.googlecode.com/svn/trunk/pom/pom.xml

部署要復用的pom.xml文件:mvn install

在自己的pom文件中繼承上述pom:

com.easymorse

pom

0.1

聚合關系舉例:

用于將多個maven項目聚合為一個大的項目。

比如目錄結構如下:

.

|-- pom.xml

|-- module-a

`-- pom.xml

|-- module-b

`-- pom.xml

|-- module-c

`-- pom.xml

|-- foo-all

`-- pom.xml

那么總的pom.xml文件類似:

...

module-a

module-b

module-c

foo-all

把項目部署到tomcat下的做法:

tomcat配置有管理權限的用戶:conf\tomcat-users.xml。


在pom文件的tomcat插件中添加:

org.codehaus.mojo

tomcat-maven-plugin

http://localhost:8080/manager

myserver

/mycontext

在.m2/settings.xml文件中增加:

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">

myserver

marshal

password

運行打包部署,在maven項目目錄下:

mvn tomcat:deploy

然后訪問:http://localhost:8080/mycontext/ 即可。

撤銷部署:

mvn tomcat:undeploy

啟動web應用:

mvn tomcat:start

停止web應用:

mvn tomcat:stop

重新部署:

mvn tomcat:redeploy

部署展開的war文件:

mvn war:exploded tomcat:exploded

--------------------------------------------------------------------------------------

pom是指project object Model。pom是一個xml,在maven2里為pom.xml。是maven工作的基礎,在執行task或者goal時,maven會去項目根目錄下讀取pom.xml獲得需要的配置信息

pom文件中包含了項目的信息和maven build項目所需的配置信息,通常有項目信息(如版本、成員)、項目的依賴、插件和goal、build選項等等。

pom是可以繼承的,通常對于一個大型的項目或是多個module的情況,子模塊的pom需要指定父模塊的pom。

project?pom文件的頂級元素。

modelVersion?所使用的object?model版本,為了確保穩定的使用,這個元素是強制性的。除非maven開發者升級模板,否則不需要修改。

groupId?是項目創建團體或組織的唯一標志符,通常是域名倒寫,如groupId??org.apache.maven.plugins就是為所有maven插件預留的。

artifactId?是項目artifact唯一的基地址名。

packaging?artifact打包的方式,如jar、war、ear等等。默認為jar。這個不僅表示項目最終產生何種后綴的文件,也表示build過程使用什么樣的lifecycle。

version?artifact的版本,通常能看見為類似0.0.1-SNAPSHOT,其中SNAPSHOT表示項目開發中,為開發版本。

name?表示項目的展現名,在maven生成的文檔中使用。

url表示項目的地址,在maven生成的文檔中使用。

description?表示項目的描述,在maven生成的文檔中使用。

dependencies?表示依賴,在子節點dependencies中添加具體依賴的groupId?artifactId和version。

build?表示build配置。

parent?表示父pom。

其中groupId:artifactId:version唯一確定了一個artifact。

Artifact

這個有點不好解釋,大致說就是一個項目將要產生的文件,可以是jar文件,源文件,二進制文件,war文件,甚至是pom文件。每個artifact都由groupId:artifactId:version組成的標識符唯一識別。需要被使用(依賴)的artifact都要放在倉庫(見Repository)中。

Repositories

Repositories是用來存儲Artifact的。如果說我們的項目產生的Artifact是一個個小工具,那么Repositories就是一個倉庫,里面有我們自己創建的工具,也可以儲存別人造的工具,我們在項目中需要使用某種工具時,在pom中聲明dependency,編譯代碼時就會根據dependency去下載工具(Artifact,供自己使用。

對于自己的項目完成后可以通過mvn install命令將項目放到倉庫(Repositories)中

倉庫分為本地倉庫和遠程倉庫,遠程倉庫是指遠程服務器上用于存儲Artifact的倉庫,本地倉庫是指本機存儲Artifact的倉庫,對于windows機器本地倉庫地址為系統用戶的.m2/repository下面。

Build Lifecycle

是指一個項目build的過程。maven的Build Lifecycle分為三種,分別為default(處理項目的部署)、clean(處理項目的清理)、site(處理項目的文檔生成)。他們都包含不同的lifecycle

Build Lifecycle是由phases構成的,下面重點介紹default?Build Lifecycle幾個重要的phase:

validate?驗證項目是否正確以及必須的信息是否可用;

compile?編譯源代碼;

test?測試編譯后的代碼,即執行單元測試代碼;

package?打包編譯后的代碼,在target目錄下生成package文件;

integration-test?處理package以便需要時可以部署到集成測試環境;

verify?檢驗package是否有效并且達到質量標準;

install?安裝package到本地倉庫,方便本地其它項目使用;

deploy?部署,拷貝最終的package到遠程倉庫和替他開發這或項目共享,在集成或發布環境完成

以上的phase是有序的(注意實際兩個相鄰phase之間還有其他phase被省略,完整phase見lifecycle),下面一個phase的執行必須在上一個phase完成后

若直接以某一個phase為goal,將先執行完它之前的phase,如mvn install

將會先validate、compile、test、package、integration-test、verify最后再執行install phase。

Goal

goal代表一個特定任務

A?goal?represents?a?specific?task?(finer?than?a?build?phase)?which?contributes?to?the?building?and?managing?of?a?project.

mvn package表示打包的任務,通過上面的介紹我們知道,這個任務的執行會先執行package phase之前的phase

mvn deploy表示部署的任務

mven clean install則表示先執行clean的phase(包含其他子phase),再執行install的phase。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容