在Eclipse中导入Maven项目时出现问题

时间:2009-10-20 15:40:40

标签: eclipse maven-2

在我的项目中,我有一个包含属性和XML文件的资源目录(src/main/resources)。

我想只过滤属性文件,但不过滤任何其他类型的文件(例如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包命令时这很好用,即我的最终JAR中包含XML和属性文件,并且只过滤了属性文件。

但是,由于我想在Eclipse中包含这个项目,当我运行命令mvn eclipse:eclipse并导入项目时,我的项目属性中声明的源有问题。

在我的项目的Eclipse的“Java Build Path”选项中,在“Source”选项卡中,我看到了src/main/resources目录,但是Eclipse还添加了一些过滤器,用于排除所有java文件({{1} })并包含属性文件(Excluded: **/*.java)。

在生成的Included: **/*.properties文件中,我得到了这一行:

.classpath

这样,Eclipse构建的JAR不正确,因为我的所有XML文件都不在JAR中。

我该如何解决这个问题?


编辑,关于此page,我已将此添加到<classpathentry kind="src" path="src/main/resources" including="**/*.properties" excluding="**/*.java"/> 中:

pom.xml

但是,生成的.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.6</version>
            <configuration>
                <sourceIncludes>
                    <sourceInclude>**/*.xml</sourceInclude>
                </sourceIncludes>
            </configuration>
        </plugin>
    </plugins>

如果我运行 <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

4 个答案:

答案 0 :(得分:2)

好吧maven-eclipse-plugin很烦人:(我们使用2.5版。我们找到的解决方案是将资源复制到不同的文件夹。对于普通的maven bulid我们使用默认过滤但是对于eclipse我们有特殊的 profile < / strong>。这个配置文件中有maven-eclipse = plugin配置:

<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>

当然,您必须根据需要修改包含/排除部分。

答案 1 :(得分: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可能不会产生预期的输出,但至少它可以工作。

答案 2 :(得分:0)

我建议您将mvn package目标作为Eclipse的外部工具。我不认为Eclipse可以处理复杂的Maven工作流程。

即使我使用并强烈推荐的m2eclipse plugin也有troubles with complex workflows

答案 3 :(得分:0)

使用属性来拥有Eclipse和Maven build into different directories。现在,您可以使用Eclipse快速开发代码并使用Maven将其部署为JAR。