2010-04-29 59 views
9

在Maven文檔Introduction to the Build Lifecycle中,描述了輸出當前時間的目標display:time。該插件如下:如何在Maven中重命名目標?

... 
<plugin> 
    <groupId>com.mycompany.example</groupId> 
    <artifactId>maven-touch-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-test-resources</phase> 
     <goals> 
     <goal>timestamp</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
... 

我有關於這個插件幾個問題:

  1. 如何更改目標的名稱,例如,foo:bar? (爲什麼displaytime都不會出現在XML片段的任何位置?從片段中可以看出,它如何定義它定義的目標?)
  2. 如何手動運行此目標? (對於類似的結構,mvn display:time的等效物有時可以工作,但這並不一致。)
  3. 我怎樣才能看到這個目標是否存在? (即列出可用目標; this question表明這是不可能的。)

回答

11

如何我可以改變的目標的名稱,例如,foo:bar? (爲什麼既不display也不time在XML片段出現在任何地方?你怎麼知道,從看片段,什麼樣的目標,它定義?)

準確地說,在foo:barfoo是「插件目標前綴「和bar是」目標「。雖然後者來自命名約定(或可以是configured ),但前者來自實現插件邏輯的類的註釋BarMojo。例如:

/** 
* Do the wonderful bar. 
* @goal bar 
* @requiresProject false 
*/ 
public class BarMojo extends AbstractMojo 
{ 
    ... 
} 

更改目標需要修改插件的mojo註釋並重新構建它。

關於您鏈接的文檔,目標time與將目標綁定到process-test-resources階段的XML片段之間存在明顯不匹配。這肯定是一個錯字。

如何手動運行此目標? (對於類似的結構,MVN顯示相當於:時間有時可行,但這並不一致地工作)

你可以這樣調用:

mvn com.mycompany.example:maven-touch-plugin:1.0:timestamp 

你可以把這個命令短通過在settings.xml添加com.mycompany.examplePlugin Groupsorg.apache.maven.pluginsorg.codehaus.mojo默認的情況下,宣佈你不知道它是如何工作的這些插件)

<settings> 
    ... 
    <pluginGroups> 
    <pluginGroup>com.mycompany.example</pluginGroup> 
    </pluginGroups> 
</settings> 

再者,由於插件名稱${prefix}-maven-pluginmaven-${prefix}-plugin模式匹配,你可以執行:

mvn touch:timestamp 

繼約定建議,但是,正如我所說的,前綴也可以configured

我該如何看看這個目標是否存在?

檢查插件文檔(派生自插件來源)或插件來源。


注意,也有在Maven的書所提到的頁面底部的錯字。使用自定義前綴執行插件的方式應爲mvn blah:echo(請參閱MVNREF-145)。

0

給你的第一個。目標的名稱由插件定義(有一個註釋)。如果有源代碼,你改變了。 看看XML,你無法知道插件只定義了XML中給出的目標。最好的位置是查看插件的文檔。 第二個:你必須檢查文檔。通常pluginname:goal ...可能你必須指定插件的完整路徑(groupId)。 第三:通常應該可以使用幫助插件看看docs

2

我認爲有可能文檔可能有拼寫錯誤。插件目標由plugin-name:goal-name指定。該XML將目標touch:timestamp綁定到process-test-resources階段。該片段與display:time沒有任何關係。

  1. 據我所知,重命名maven目標是不可能的。 (看起來它會讓事情變得更加混亂。)插件源代碼是定義目標的,而不是pom。 pom中的<執行>標記僅允許您將插件目標綁定到階段,或者如果它們已經具有默認階段則重新綁定目標。

  2. 您應該可以用prefix:goalName運行一個目標。通常,前綴只是artifactId中「maven-」和「-plugin」之間的任何內容。例如touch:timestamp。在一些情況下這很複雜,因爲插件作者可以指定與插件名稱不同的「goalPrefix」,但我從來沒遇到過這個問題。

  3. 找出插件定義的目標以及默認綁定的階段的最佳方法是閱讀插件文檔。

0

如何將目標名稱更改爲例如foo:bar? (爲什麼既沒有顯示也沒有時間出現在XML片段的任何地方?從片段看,它如何定義它定義的目標?)

要將前綴的名稱更改爲「foo」,您需要配置maven插件「插件」。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-plugin-plugin</artifactId> 
    <version>2.5.1</version> 
    <configuration> 
     <goalPrefix>foo</goalPrefix> 
    </configuration> 
    </plugin> 

要改變的目標的名稱,你需要編輯的javadoc插件java源

​​

內的插件前綴添加到您的設置。xml文件

<pluginGroups> 
    <pluginGroup>com.mycompany.example</pluginGroup> 
</pluginGroups> 

我如何可以手動運行這一目標呢?

mvn com.mycompany.example:foo:bar 

或插件前綴設置(見上文)

mvn foo:bar 

我如何可以看到,如果這一目標存在? (即列出可用目標)

將以下內容添加到maven插件插件元素中,您可以使用foo:help打印出目標列表。

<plugin> 
... 
<executions> 
<execution> 
<id>generated-helpmojo</id> 
<goals> 
<goal>helpmojo</goal> 
</goals> 
</execution> 
</executions> 
</plugin>