2012-09-28 52 views
1

我試圖按照this示例使用maven-remote-resources-plugin來選擇性地共享多個maven模塊之間的公共資源,而且我有很多難以獲得有選擇地導入資源的工作。如何在maven-remote-resources-plugin中使用<includes>/<excludes>

我試圖按照以下方式使用<includes><excludes>元素。我沒有在doco中看到這些插件在doco中提到的地方,但eclipse在命令完成時提供了它們作爲有效的選項,並且在運行pom時我沒有遇到任何錯誤。到目前爲止,我還沒有能夠獲得<includes><excludes>對進口資源的所有影響

我的pom的相關部分是;

共享資源

<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-remote-resources-plugin</artifactId> 
     <executions> 
     <execution> 
      <goals> 
      <goal>bundle</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <includes> 
      <include>**/*</include> 
     </includes> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-remote-resources-plugin</artifactId> 
    <version>1.3</version> 
    </dependency> 
</dependencies> 

資源消費

<build> 
... 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-remote-resources-plugin</artifactId> 
     <version>1.3</version> 
     <configuration> 
     <resourceBunldes> 
      <resourceBundle>myApp:myApp_sharedresources:${project.version}</resourceBundle> 
     </resourceBundles> 
     <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     <includes> 
      <include>theOnlyResourceIWant.properties</include> 
     </includes> 
     </configuration> 
     <executions> 
     <execution> 
      <goals> 
      <goal>process</goal> 
      </goals> 
      <phase>generate-resources</phase> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
    <groupId>myApp</groupId> 
    <artifactId>myApp_sharedresources</artifactId> 
    <version>1.0</version> 
    </dependency> 
</dependencies> 

我試過的<includes><excludes>多種組合,但所有到目前爲止還沒有任何影響。

那麼,

<includes></includes> 

<excludes></excludes> 

了Maven的遠程資源 - 插件配置的有效元素,以及如何使用它們? 我可以合理地將資源分離成單獨的maven模塊,但是這可能會創建大量的單個文件maven模塊並添加大量額外的xml,所以如果可能的話我想避免它。

我真的寧願不開始瀏覽插件源代碼,但這是下一步。

回答

2

我使用我正在導入和過濾共享資源的臨時目錄。

下面的遠程資源插件配置。這會將所有共享資源複製到項目中的臨時目錄中。將attached設置爲false意味着它們未包含在最終項目工件中,這使您有機會使用Maven的常規資源處理來選擇要包含的項目。

<plugin> 
<artifactId>maven-remote-resources-plugin</artifactId> 
<configuration> 
    <resourceBundles> 
    <resourceBundle>myApp:myApp_sharedresources:${project.version}</resourceBundle> 
    </resourceBundles> 
    <attached>false</attached> 
    <outputDirectory>${project.build.directory}/shared-resources</outputDirectory> 
</configuration> 
<executions> 
    <execution> 
    <goals> 
     <goal>process</goal> 
    </goals> 
    <phase>generate-resources</phase> 
    </execution> 
</executions> 
</plugin> 

資源定義。當maven-resource-plugin運行時(默認情況下,它將爲瓶子/戰爭/耳朵綁定生命週期),它將使用共享資源目錄以及正常的src/main/resources目錄。你需要定義兩者。 (如果需要,您也可以啓用資源過濾。)

<resources> 
    <resource> 
    <directory>${project.build.directory}/shared-resources</directory> 
    <includes> 
     <include>theOnlyResourceIWant.properties</include> 
    </includes> 
    </resource> 
    <resource> 
    <directory>${basedir}/src/main/resources</directory> 
    </resource> 
</resources> 

我建議在做的共享目錄是${project.build.directory}子目錄,所以clean生命週期的工作沒有變化。

0

要啓用格式 '#{expr的}'(Ruby的風格)過濾器分隔符,以下內容添加到您的插件配置:

<plugin> 
    <artifactId>maven-remote-resources-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <id>process-remote-resources</id> 
     <goals> 
      <goal>process</goal> 
     </goals> 
     <configuration> 
      <filterDelimiters> 
      <filterDelimiter>#{*}</filterDelimiter> 
      </filterDelimiters> 
      [...] 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

檢查this link參考

+0

感謝您的答案,但我讀了這個doco關於如何更改過濾器分隔符,並不能解決如何將這個應用到我的情況。您可以編輯您的答案,以包含一個示例/鏈接,顯示如何通過從包中選擇文件來將過濾器應用於存檔文件。 (我對Maven來說很新,所以這可能是一個標準的事情。抱歉,如果我錯過了假定的知識) – TaninDirect

相關問題