我正在从Ivy+Ant迁移到Maven,我对Maven很陌生,所以请原谅我。
我需要“过滤”一个单独的源文件(.java)包含一个占位符为@@ codeeme @@,然后编译的结果和编译整个事情.我已经设法做源文件的过滤使用 org.codehaus.mojo:templating-maven-plugin.该插件创建生成的源到 ${project.build.directory}/generated-sources/java-templates 与Java文件的内容替换为它应该的方式,然后编译是正确的完成,一切都工作只是它应该的方式.
但是,在IDE(Eclipse)中,构建路径源现在指向 ${project.build.directory}/generated-sources/java-templates = target/generated-sources/java-templates。我不希望它成为我的主要构建路径源,因为它包含替换的数据,并且需要this直接指向原始源'agent/src'。如果我将原始源'agent/src'添加到POM中,(并且这种方式在IDE中可见),则编译将由于重复的类错误而失败。
POM的相关部分:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>templating-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>filter-src</id>
<phase>generate-sources</phase>
<goals>
<goal>filter-sources</goal>
</goals>
<configuration>
<delimiters>@@</delimiters>
<overwrite>true</overwrite>
<sourceDirectory>agent/src</sourceDirectory>
<outputDirectory>${project.build.directory}/generated-sources/java-templates</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>add-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>loader/src</source>
<!--<source>agent/src</source> duplicate class -errors with this-->
</sources>
</configuration>
</execution>
<execution>
<id>add-test-sources</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>test/src</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
字符串
这就是Eclipse现在向我显示源代码的方式,因为它“丢失”了原始源代码“agent/src”:
x1c 0d1x的数据
我做错了什么,或者它只是意味着要这样这个插件?我觉得在我的胆量,有一个很容易的解决我的问题.
2条答案
按热度按时间ukxgm1gy1#
1.移除build-helper-maven-plugin
1.从templating-maven-plugin的配置中删除sourceDirectory和outputDirectory的配置
1.从templating-maven-plugin中删除了阶段的定义,以及id的定义
将模板类放入
src/main/java-templates/<package>
字符串
这就是所有需要的.哦,只需在pluginManagement中定义版本或在上面的设置中显式定义。
bweufnob2#
解决了这个问题:
关键是将'java-templates'从src-folder中分离出来(我想文件夹名并不重要,因为它可以由设置),然后在'java-templates'下创建与src结构中的原始文件相同的包结构。
以POM结束:
字符串
目前的项目看起来像这样:
x1c 0d1x的数据
受@khmarbaise回答的启发,我实际上确实将源代码结构重构为更像Maven标准-将agent/src & loader/src移动到src/main/java,通过这种方式,我能够使用@khmarbaise建议的默认值的'templating-maven-plugin'。还删除了'build-helper-maven-plugin'并在POM中使用'templatin-maven-plugin':
型
到那时,我的项目看起来是这样的:
的