2009-10-20 86 views
1

在我的項目中,我有一個包含屬性和XML文件的資源目錄(src/main/resources)。在Eclipse中導入Maven2項目時出現問題

我想過濾只有屬性文件,但不是任何其他類型的文件(例如XML)。因此,我在設置這個我pom.xml

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <excludes> 
       <exclude>**/*.properties</exclude> 
      </excludes> 
     </resource> 
    </resources> 
</build> 

這是工作好,當我運行一個Maven 2包命令,XML和性質,即文件都包含在我的最後JAR,只有屬性文件已過濾。

但是,因爲我想將此項目包含在Eclipse中,所以當我運行命令mvn eclipse:eclipse並導入該項目時,我遇到了在我的項目屬性中聲明的源代碼的問題。

在Eclipse的我的項目的「Java構建路徑」選項,在選項卡中的「源」,我看到了src/main/resources目錄,但Eclipse還添加過濾器,這不能不排除所有Java文件(Excluded: **/*.java)和包括屬性文件(Included: **/*.properties)。

中產生的.classpath文件,我得到這一行:

<classpathentry kind="src" path="src/main/resources" including="**/*.properties" excluding="**/*.java"/> 

這樣,通過Eclipse的生成JAR不正確的,因爲我所有的XML文件不在JAR。

我該如何解決這個問題?


編輯,對此page,我在添加了這個我pom.xml

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <sourceIncludes> 
        <sourceInclude>**/*.xml</sourceInclude> 
       </sourceIncludes> 
      </configuration> 
     </plugin> 
    </plugins> 

然而,生成不與足夠的信息修正後的.classpath ...


再次編輯。

我以前的編輯中的附加功能僅適用於Eclipse插件2.6.1及更高版本,不適用於2.6。所以,我已經嘗試過2.7版本。不過,我不知道如何強制Eclipse插件不定義包括屬性:

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.7</version> 
      <configuration> 
       <sourceIncludes> 
        <sourceInclude>*</sourceInclude> 
       </sourceIncludes> 
      </configuration> 
     </plugin> 
    </plugins> 

如果我運行mvn eclipse:eclipse命令,我收到以下錯誤:

Request to merge when 'filtering' is not identical. Original=resource src/main/resources: output=target/classes, include=[**/*.properties], exclude=[**/*.java], test=false, filtering=true, merging with=resource src/main/resources: output=target/classes, include=[], exclude=[**/*.properties|**/*.java], test=false, filtering=false 
+0

我認爲你必須在你的代碼中的錯誤 - 你既包括和。排除'* .properties'文件? – 2009-10-20 15:46:18

+0

這不是一個錯誤。我有兩個資源子集s:第一個只包含'properties'文件和* filter *它們。第二個只排除'properties'文件,*不會對它們進行過濾。這是我發現包含src/main/resources'中所有文件的唯一方法,並且只篩選其中的一部分... – romaintaz 2009-10-20 15:50:51

+0

對,我現在明白了。 – 2009-10-20 15:52:19

回答

1

我用maven eclipse插件2.6,2.5.1,2.7和2做了一些測試。8-SNAPSHOT並沒有一個確實產生了預期的結果。

我已經能夠找到的唯一解決方法是對您不想過濾的資源使用另一個目錄。像這樣:

... 
    <build> 
    <resources> 
     <resource> 
      <directory>src/main/resources1</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources2</directory> 
      <filtering>false</filtering> 
      <includes> 
       <include>**/*.xml</include> 
      </includes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.6</version> 
     </plugin> 
    </plugins> 
    </build> 

我同意這是醜陋的。但至少它會生成一個包含以下條目的.classpath:

<classpathentry kind="src" path="src/main/resources1" including="**/*.properties" excluding="**/*.java"/> 
    <classpathentry kind="src" path="src/main/resources2" including="**/*.xml" excluding="**/*.java"/> 

這應該允許您在Tomcat上進行部署。

順便說一下,我不會使用插件的2.7版本,因爲它不起作用(請參閱this thread)。版本2.6可能不會產生預期的輸出,但至少可以工作。

0

使用屬性使Eclipse和Maven build into different directories。現在您可以使用Eclipse快速開發代碼並使用Maven將其部署爲JAR。

+0

我真的不明白你的觀點。它將如何解決我的問題? – romaintaz 2009-10-20 15:57:31

+0

不要使用Eclipse構建JAR,請使用Maven。 Maven會做對的。 – 2009-10-20 16:07:55

+0

我使用Maven構建JAR。問題是我的庫被用作Web應用程序的J2EE模塊依賴項。因此,當我將我的webapp發佈到Eclipse內的Tomcat時,由Eclipse創建的JAR不包含我的XML文件... – romaintaz 2009-10-20 16:47:42

2

maven-eclipse-plugin是非常好用的:(我們使用的是2.5版本,我們發現的解決方案是將資源複製到不同的文件夾中。下面是在此配置文件的maven-日食=插件配置:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-resources-step1</id> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <phase>initialize</phase> 
      <configuration> 
       <outputDirectory>${project.build.directory}/for-eclipse/resources</outputDirectory> 
       <resources> 
        <resource> 
         <directory>${basedir}/src/main/resources</directory> 
         <filtering>true</filtering> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 

     <execution> 
      <id>copy-resources-step2</id> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <phase>initialize</phase> 
      <configuration> 
       <outputDirectory>${basedir}/src/main/resources</outputDirectory> 
       <resources> 
        <resource> 
         <directory>${project.build.directory}/for-eclipse/resources</directory> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

當然,你必須修改包括對您的需求/排除部分