2012-06-06 71 views
13

我試圖使用maven-resources-plugin做一些使用copy-resources目標的過濾,然後運行到以下錯誤:maven-resources-plugin error使用copy-resources的目標:'resources','outputDirectory'丟失或無效

Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.5:copy-resources (default-cli) on project bar: The parameters 'resources', 'outputDirectory' for goal org.apache.maven.plugins:maven-resources-plugin:2.5:copy-resources are missing or invalid 

找出問題,我創建了一個非常簡單的pom.xml,從http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html複製非常近逐字,運行它,並得到了同樣的錯誤。

我與

mvn resources:copy-resources 

任何想法調用呢?這是測試pom.xml。

<?xml version="1.0" encoding="UTF-8"?> 
<project 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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.5</version> 
     <executions> 
      <execution> 
      <id>copy-resources</id> 
      <!-- here the phase you need --> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${basedir}/target/extra-resources</outputDirectory> 
       <resources>   
       <resource> 
        <directory>src/non-packaged-resources</directory> 
        <filtering>true</filtering> 
       </resource> 
       </resources>    
      </configuration>    
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

回答

22

你有主要的問題是,你是直接調用使用

mvn resources:copy-resources 

這並不一定建立輸出目錄中插件目標。而是調用正確的Maven生命週期階段。

mvn process-resources 

對於生命週期階段的完整列表,只需運行沒有什麼東西可以MVN命令..

一般來說它幾乎總是更好地調用生命週期階段,而不是直接目標,因爲它保證了任何先決條件(例如,不能在要測試的類之前編譯測試類)。

+0

嗯,你是對的。謝謝 - 在Maven競爭力的道路上又邁出了一步。 –

+0

只需要注意:在另一個階段調用pom中的目標是正確的,但通常不應該從外部運行非Maven生命週期目標! –

+0

@ childno.de是什麼讓你這麼說?這是不正確的Imho。 –

5

檢查@bmargulies回答你的作品。你可以參考these examples

在任何情況下,您都不需要使用<pluginManagement>來實現此目的。 <pluginManagement>用於多模塊方案以促進plugin配置的繼承。

您需要將configuration移出execution元素。以下片段適用。

<?xml version="1.0" encoding="UTF-8"?> 
<project 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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <outputDirectory>${basedir}/target/extra-resources</outputDirectory> 
      <resources>   
     <resource> 
      <directory>src/non-packaged-resources</directory> 
      <filtering>true</filtering> 
     </resource> 
      </resources>    
     </configuration>    
     <executions> 
      <execution> 
      <id>copy-resources</id> 
      <!-- here the phase you need --> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+1

謝謝。我已經嘗試了兩種方法(指定'/'中的資源或者'///<配置>'中的資源),並且它們看起來都是等效的。一個和另一個有什麼優勢?後者將信息保存在pom中的一個地方,這似乎更好一些。 –

+0

@AndyD。好問題(也許需要單獨的SO問題 - 以便其他/更有知識的人可以迴應?)前者無論如何都使用「maven資源插件」。插件頁面中的一些例子也引用了前一種風格! – Raghuram

+0

我很欣賞反饋意見,這很有幫助,但我將Manfred的答案授予了他,因爲他正確地指出,我不需要將配置移出執行元素;我需要直接調用生命週期階段而不是目標。 –

相關問題