[英]m2eclipse marking 'target' directory as 'Derived'
[英]m2eclipse not copying src/main/resources to target
我有一个 Maven 项目并且我已经安装了 m2eclipse。 当我构建项目时,src/main/resources 中的文件没有被复制到 target/classes 文件夹中。 任何帮助都受到高度赞赏。
如果资源没有被复制,可能是因为“资源”没有正确定义。 您需要向 Maven 指明资源是什么。
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<!-- you can define here more than one resource -->
</resources>
...
</build>
在阅读了您关于何时复制资源以及何时不复制的所有评论后(即,在调用 Eclipse 构建之前一切正常),很可能maven2Builder被禁用。 您可以使用 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>
在这个例子中,我已经评论了maven2Builder这导致你得到的行为完全相同。
我通常喜欢查看实际的.project
和.classpath
文件内容,但它们都可以通过项目属性访问。 您会在项目属性中找到“Builders”部分,并且应该有“Maven Project Builder”复选框项。
在我的项目中,我观察到即使我在 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>
基本上,您必须删除要复制的非 .class 文件的including="**/*.java"
。
对我来说,问题很明显…… Project->Build Automatically 被关闭了。 复制资源的 m2e 构建器在构建时被调用。 打开自动构建或执行 Project->Build All (ctrl-b) 以将更改的资源部署到目标/类。
我遇到了同样的问题,并从项目中删除了 Maven 性质并将其添加回来。 然后我的资源文件被正确复制。
我也遇到了这个问题,结果我不小心排除了使用 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>
“动作”应该是“执行”而不是......
我遇到的问题是,虽然资源基本上存在于目标文件夹中,但我最近所做的某些更改在运行时不可用。
我可以通过执行 Maven 的“更新项目...”功能来解决它。
我以前从未(公开地)想到过这个缺陷,到目前为止我不知道这背后是什么。 如果缺陷在运行时只导致细微的错误,那肯定会令人费解(我花了很长时间才找到)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.