2011-07-19 87 views
6

我想使用maven執行者插件來檢查我的路徑上是否有重複的類。我試過here的例子。使用maven執行者插件

但是當我運行它像這樣:

mvn enforcer:enforce

我得到這個:

未能執行目標 org.apache.maven.plugins:Maven的實施者 - 插件: 1.0.1:在項目數據填充器上強制執行 (default-cli):參數 目標org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:強制爲 缺失或無效

有沒有辦法正確使用它?

編輯#1

如果更改我的配置到這一點:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0.1</version> 
      <executions> 
       <execution> 
        <id>enforce-versions</id> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <AlwaysPass /> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

產生相同的錯誤。

回答

15

之所以你的第一個版本,沒有工作是因爲有一個執行標籤內的插件配置與執行標籤外的插件配置之間的差異。只有當您的插件由完整的Maven構建的特殊階段觸發時纔會執行此執行。

Maven guide to configuration更好地解釋它:

,在標籤內的配置,從那些在他們不能從一個直接的命令行調用中使用外不同。相反,只有在它們綁定的生命週期階段被調用時纔會應用它們。或者,如果您將配置部分移到執行部分之外,則它將全局應用於插件的所有調用。

+4

執行目標是[bound](http://maven.apache.org/enforcer/maven-enforcer-plugin/enforce-mojo.html)到生命週期階段'validate'。因此,要執行'執行者:執行',你可以簡單地輸入 'mvn validate' – rwitzel

+2

配置文件短缺,有沒有一種方法來定義執行而不調用'validate'?我有一個場景,我只想驗證'requireReleaseDeps',但在構建過程的這個階段沒有其他任何東西。 – Snekse

3

我不知道爲什麼它不會與執行的配置是工作,但這個工作對我來說:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0</version> 
      <configuration> 
       <rules> 
        <banDuplicateClasses> 
         <findAllDuplicates>true</findAllDuplicates> 
        </banDuplicateClasses> 
       </rules> 
       <fail>false</fail> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>extra-enforcer-rules</artifactId> 
        <version>1.0-alpha-1</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
11

試試這個,將配置移到執行之外,這樣它就不會綁定到生命週期階段。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.0.1</version> 
    <executions> 
     <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <rules> 
      <AlwaysPass /> 
     </rules> 
     <fail>true</fail> 
    </configuration> 
</plugin> 

現在,當您執行mvn enforcer:enforce時,它會從您的pom.xml中選擇規則。

3

看到這些answers

您可以使用特殊的默認命令行執行ID,默認CLI來調用它(見Maven Docs),見下面我的例子。這個工程至少在3.1.1和引用的文章說,它應該與2.2.0+

mvn enforcer:enforce 

不過工作,如果你正在使用上述 Maven的3.1。1(我可以通過執行者v 1.4.1確認它在3.3.3中可用),您可以使用新的@語法指定您希望的執行ID(請參閱Maven JIRA以及上述答案);

例如對於以下示例使用

mvn enforcer:[email protected] 

這是我的pom片段;

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.4.1</version> 
      <executions> 
       <execution> 
        <id>dependency-convergence</id> 
        <phase>install</phase> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <DependencyConvergence /> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
       <execution> 
        <id>default-cli</id> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <DependencyConvergence/> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     ... 
+0

我剛剛提出了一個拉請求來澄清有關此文檔:https://github.com/apache/maven-site/pull/7 –