2014-10-29 135 views
2

我是Maven的新手。如果我的問題不對,請原諒我。當Maven執行階段或目標或生命週期?

當我讀到Maven目標,在Stack Overflow階段,我碰到兩個環節,其中一個說出來:

當你執行行家,你可以指定一個目標或階段。

- What is the difference/relation between maven goals and phases?

,另一說:

你不能調用生命週期階段本身,而是你可以調用這必將對插件的目標生命週期階段。

- Executing a specific Maven phase

哪一個是正確的?或者我不理解它?

也可以給我簡單的例子Maven執行生命週期/階段/目標。還有Maven知道它必須運行階段或目標?例如。當我說mvn install,是install階段還是目標?

謝謝&如果問題不對,請原諒我。 bombya。

回答

7

Bombya博,

的Maven構建生命週期等,其具有連續的階段吃大餐認爲:

  • starter(re源)
  • 主(編譯)
  • 甜點(包)
  • 咖啡(安裝)
  • 餐後(部署)

目標是在這一階段被服務的實際食品。

  • 起動機:涼菜
  • 主:牛排;肉汁;薯條
  • 甜點:提拉米蘇
  • 咖啡:卡布奇諾

在這個比喻:

  • pom.xml文件是今天的特價寫在黑板
  • 呼籲mvn的等效命令行相當於將您的訂單發送給服務員
  • 您可以將多個食物/目標項綁定到罪GLE階段(牛排+肉汁+薯條)

如果你喜歡的房子默認值,那麼你可以告訴他把前N課程:

"I'll take the 2 course meal" 
$ mvn compile 

你會得到一切達和包括主菜(即西班牙涼菜湯,接着是牛排+肉汁+薯條)。

調用一個目標是定製您的訂單相當於:

"I'll take a Cobb salad plus the 2 course meal" 
$ mvn javadoc:javadoc compile 

如果你想要的目標是成爲一個永久性除了菜單,然後將其添加到POM文件。這使我們回到電話:

$ mvn compile 

其結果在西班牙涼菜湯+科布,其次是牛排+肉汁+薯條。

關於將目標綁定到階段的最後一點。

默認情況下,每個目標都會在某個階段運行(科布沙拉通常用作啓動程序)。 但是,您可以覆蓋相位綁定,這就像告訴服務員"I'll have a Cobb salad, but bring it at the same time as the main"

希望能夠澄清目標與階段背後的直覺。

+0

很好的例子!請確認當你執行一個目標,即mvn [goal]是否執行該目標之前的所有階段?就像我執行mvn deploy:depoly那麼在編譯之前的所有階段,測試將被執行?或者只是部署? – s4194313 2014-10-30 17:09:51

+0

像部署調用mvn目標:部署目標只會執行單一動作(「我只想要卡布奇諾」)。確定像部署一樣的mvn階段告訴maven執行所有達到幷包括它的目標(「我將參加3門課程」) – 333kenshin 2014-10-31 00:01:40

0

當您調用一個插件時,您需要調用該插件的目標。像

mvn dependency:tree 
在這種情況下

要調用的依賴插件

的目標樹。另一方面,你可以簡單地做

mvn test 

在這種情況下調用行家的相你不是調用插件,而是調用階段。請注意,插件目標也可以綁定到特定的階段。不同之處在於您是否調用全部階段(以及所有前面的階段隱式)或者只是單個插件的單個目標

Here您可以找到默認生命週期的所有階段(可以修改,但我不會「認爲你需要了解,就目前而言),所以你可以看到,install是相

相關問題