[英]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.