2013-07-05 51 views
20

有什麼辦法在Maven中的父項目的模塊之間共享資源?例如,我想爲多模塊Maven項目中的所有模塊指定一個log4j.properties文件。在多模塊maven項目中指定公共資源

通常,我使用Eclipse IDE通過選擇常規項目來創建父項目,然後通過指定pom的包裝將其轉換爲Maven項目。這創建了一個「乾淨」的項目結構,沒有src等文件夾。我想知道這種共享資源應該放在哪裏。

EDIT1:我想把公共資源放在父項目中。

回答

21

我會創建一個額外的「基本」模塊(項目),打包「jar」,其中包含公共資源src/main/resources。然後我會讓其他模塊依賴於該項目。現在他們在他們的類路徑中看到了公共資源。

+1

是,這似乎是一個可能的解決方案。但我有興趣是否可以在父項目中指定這些資源(不需要引入額外的模塊),因爲父項目指定了子模塊的所有常見依賴項和Maven配置,我認爲父項目是最合適的地方也用於共同資源。 – jilt3d

+4

「pom」包裝的父項目沒有任何資源,它只是一個構建文件,可以作爲工件進行安裝/部署。 –

+0

我明白了。所以用Maven父項目做這件事是不可能的? +1,但如果還有其他建議,我將暫時解決問題。 – jilt3d

2

Antoher的可能性是使用遠程資源包。你可以在父項目中配置它。在這個例子中,我想複製一些文件來測試。如果你使用這個,你將需要在另一個項目中創建這個包。

<plugin>  
     <groupId>org.apache.maven.plugins</groupId>   
     <artifactId>maven-remote-resources-plugin</artifactId> 
     <version>1.5</version> 
     <configuration> 
      <resourceBundles> 
       <resourceBundle>es.sca:myBundle:1.0.0</resourceBundle> 
      </resourceBundles> 
      <attachToMain>false</attachToMain> 
      <attachToTest>true</attachToTest> 
      <appendedResourcesDirectory>${basedir}/src/test/resources</appendedResourcesDirectory> 
     </configuration>    
     <executions> 
      <execution> 
       <goals> 
        <goal>process</goal> 
       </goals> 
      </execution> 
     </executions>     
    </plugin>     
+0

你能分享「你如何訪問共享資源」的代碼片段嗎? –

-1

我設法它像這樣工作:

我創建一個項目/封裝/測試/資源/ META-INF/persistence.xml文件,並加入到我的pom.xml:

<plugin> 
 
    <groupId>org.apache.maven.plugins</groupId> 
 
    <artifactId>maven-resources-plugin</artifactId> 
 
    <executions> 
 
     <execution> 
 
      <id>copy-test-persistence-xml-resources</id> 
 
      <phase>process-test-sources</phase> 
 
      <goals> 
 
       <goal>copy-resources</goal> 
 
      </goals> 
 
      <configuration> 
 
       <outputDirectory>src/</outputDirectory> 
 
       <resources> 
 
        <resource> 
 
         <directory>${project.parent.basedir}/assembly/</directory> 
 
         <filtering>true</filtering> 
 
        </resource> 
 
       </resources> 
 
      </configuration> 
 
     </execution> 
 
    </executions> 
 
</plugin>

+1

這不會工作,是非常糟糕的做法。 – Anony

0

是,它似乎一個可能的解決方案。但我感興趣的是, 是否可以在父項目中指定這些資源(不包括 引入附加模塊),因爲父項目指定所有 共同的依賴關係和子模塊 的Maven配置,我認爲父項目是最適合的地方 也用於共同資源。

在包裝類型POM,當目標規定來管理您的共享資源,只需添加下一個(查看文件夾)到構建POM文件的部分的情況下:

 <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>copy-config-files</id> 
       <phase>package</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>${project.build.directory}/logconfig</outputDirectory> 
        <resources> 
         <resource> 
         <filtering>false</filtering> 
         <directory>${project.basedir}/src/main/resources</directory> 
         </resource> 
        </resources> 
       </configuration> 
     </execution> 
     </executions> 
    </plugin>