如何在使用“templating-maven-plugin”时处理构建路径源

zqdjd7g9  于 11个月前  发布在  Maven
关注(0)|答案(2)|浏览(151)

我正在从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的数据
我做错了什么,或者它只是意味着要这样这个插件?我觉得在我的胆量,有一个很容易的解决我的问题.

ukxgm1gy

ukxgm1gy1#

1.移除build-helper-maven-plugin
1.从templating-maven-plugin的配置中删除sourceDirectory和outputDirectory的配置
1.从templating-maven-plugin中删除了阶段的定义,以及id的定义
将模板类放入src/main/java-templates/<package>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>templating-maven-plugin</artifactId>
    <executions>
      <execution>
        <goals>
          <goal>filter-sources</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

字符串
这就是所有需要的.哦,只需在pluginManagement中定义版本或在上面的设置中显式定义。

bweufnob

bweufnob2#

解决了这个问题:
关键是将'java-templates'从src-folder中分离出来(我想文件夹名并不重要,因为它可以由设置),然后在'java-templates'下创建与src结构中的原始文件相同的包结构。
以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/java-templates</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>
                        </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>

字符串
目前的项目看起来像这样:
x1c 0d1x的数据

受@khmarbaise回答的启发,我实际上确实将源代码结构重构为更像Maven标准-将agent/src & loader/src移动到src/main/java,通过这种方式,我能够使用@khmarbaise建议的默认值的'templating-maven-plugin'。还删除了'build-helper-maven-plugin'并在POM中使用'templatin-maven-plugin':

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>templating-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>filter-sources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>


到那时,我的项目看起来是这样的:


相关问题