【问题标题】:m2eclipse not copying src/main/resources to targetm2eclipse 没有将 src/main/resources 复制到目标
【发布时间】:2012-07-31 07:28:12
【问题描述】:

我有一个 maven 项目并且我已经安装了 m2eclipse。当我构建项目时, src/main/resources 中的文件没有被复制到 target/classes 文件夹中。 非常感谢任何帮助。

【问题讨论】:

  • 能否请您发布 pom.xml,尤其是构建部分
  • 告诉我们你的打包风格,看看这个 POM 是否有一个可能已经重新定义资源目录的父级。
  • @Arturs Licis:包装风格是罐子,我没有父 pom。
  • 你试过从命令行运行吗?但实际上它可能是一些 m2eclipse 错误。
  • @saravana_pc 在“错误日志”视图中是否有任何 Eclipse (m2eclipse) 错误?

标签: java eclipse jakarta-ee maven m2eclipse


【解决方案1】:

如果资源没有被复制,可能是因为“资源”没有正确定义。您需要向 Maven 指明资源是什么。

<build>
    ...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <!-- you can define here more than one resource -->
    </resources>
    ...
 </build>

【讨论】:

  • 许多包装样式默认复制它们,包括默认的jar
  • AS @DuncanJones 指出这是默认完成的,但应该检查资源配置,因为可能是当前配置导致了问题。
  • @jddsantaella - 该解决方案不起作用。顺便说一句,我没有父 pom。
  • @saravana_pc 你能把 pom.xml 发给你吗?
  • @jddsantaella - 它太大了,不能在这里发帖。不幸的是,这里没有太多空间可以发布它。
【解决方案2】:

在阅读了有关何时复制资源以及何时不复制资源的所有 cmets 之后(即,在调用 Eclipse 构建之前一切正常),很可能 ma​​ven2Builder 被禁用。您可以使用 maven2Nature 巧妙地配置您的类路径,但如果您禁用 maven2Builder,由于活动的 Java Builder,只有源代码将被编译并复制到 target/classes(或您的 .classpath 中配置的任何内容)。

考虑一个非常简单的演示项目配置(Eclipse 项目根目录中的.project 文件):

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>m2demo</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <!-- 
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
         -->
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
    </natures>
</projectDescription>

在此示例中,我已注释 ma​​ven2Builder,这会导致您得到完全相同的行为。

我通常喜欢查看实际的.project.classpath 文件内容,但它们都可以通过项目属性访问。您会在项目属性中找到“Builders”部分,并且应该有“Maven Project Builder”复选框项。

【讨论】:

    【解决方案3】:

    在我的项目中,我观察到即使我在 pom.xml 中指定了资源标签并配置了 maven2Builder,资源仍然没有被复制过来。为了解决这个问题,我手动编辑了最初是

    的 .classpath 文件(位于项目的顶层)
    <classpathentry including="**/*.java" kind="src" output="target/classes" path="java_source">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    

    成为

    <classpathentry kind="src" output="target/classes" path="java_source">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    

    基本上,您必须删除 including="**/*.java" 才能复制非 .class 文件。

    【讨论】:

    • 这对我也有用。我只需要将“path”属性更改为“src”。谢谢!
    【解决方案4】:

    对我来说,问题很明显... Project->Build Automatically 已关闭。复制资源的 m2e 构建器在构建时被调用。打开自动构建或执行 Project->Build All (ctrl-b) 以将更改的资源部署到目标/类。

    【讨论】:

    • 我遇到了类似的问题,并尝试手动启动构建、清理、禁用/重新启用 Maven 自然。我的资源文件夹中有 10 个 XML 文件。其中两个,永远不会被复制到目标/类。如果我重命名它们,它们就会被复制。如果我将它们重命名为原始文件名,它们不会被复制。
    【解决方案5】:

    我遇到了同样的问题,并从项目中删除了 Maven 特性并将其添加回来。然后我的资源文件被正确复制了。

    【讨论】:

      【解决方案6】:

      我也遇到了这个问题,结果发现我不小心使用 m2e 生命周期映射过滤器排除了复制资源:

        <build>
          <pluginManagement>
            <plugins>
              <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                  <lifecycleMappingMetadata>
                    <pluginExecutions>
                      <pluginExecution>
                        <pluginExecutionFilter>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-resources-plugin</artifactId>
                          <versionRange>[1.0,)</versionRange>
                          <goals>
                            <goal>resources</goal>
                            <goal>testResources</goal>
                          </goals>
                        </pluginExecutionFilter>
                        <action>
                          <ignore />
                        </action>
      

      “动作”应该是“执行”...

      【讨论】:

        【解决方案7】:

        我遇到的问题是,虽然资源基本上存在在目标文件夹中,但我最近所做的某些更改在运行时不可用。

        我可以通过执行 Maven 的“更新项目...”功能来解决它​​。

        我以前从未(公开地)想到过这个缺陷,到目前为止,我不知道这背后的原因。 如果缺陷在运行时导致只有细微的错误,那肯定会令人费解(我花了很长时间才找到)。

        【讨论】:

          猜你喜欢
          • 2015-04-18
          • 2013-08-04
          • 1970-01-01
          • 2014-09-25
          • 2012-05-06
          • 1970-01-01
          • 2015-03-22
          • 2016-08-22
          • 1970-01-01
          相关资源
          最近更新 更多