强制Maven编译器插件使用生成的源而不是重复的现有类

时间:2017-04-23 15:37:22

标签: maven maven-2 maven-3 code-generation maven-plugin

我正在为Maven制作一个插件。我需要在源Java文件中替换某些代码行(实际上是一个注释)。当然,我不打算编辑原始文件,所以我在我的插件中创建了一个新文件。但我不能让Maven使用我生成的源而不是原始的源。我从编译时尝试排除文件,但它排除了生成的文件。在不排除的情况下,我在编译项目时遇到了重复的类错误。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

抱歉,英语不是我的母语。 我能够让 Maven 使用我生成的源代码而不是原始源代码。

在我的项目中,我有一个带有基本配置的类。以及包含客户端配置的目录。 在 maven 构建期间,我需要用客户端之一替换基本配置类。我通过两个插件实现了这一点:

<build>
    <resources>
        <resource>
            <!-- Copy source file from another directory -->
            <directory>${project.basedir}/../configs/${client-directory}</directory>
            <targetPath>${project.basedir}/target/generated-sources/com/package</targetPath>
            <includes>
                <include>ClientConfig.java</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <excludes>
                    <!-- Exclude base config -->
                    <exclude>com/package/ClientConfig.java</exclude>
                </excludes>
                <compilerArgs>
                    <!-- Add client config -->
                    <arg>-sourcepath</arg>
                    <arg>${project.basedir}/target/generated-sources/</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

在 maven-compiler-plugin 的包含和排除标签中,您不能使用 java 文件的路径。您应该使用包和类名或模式。因此,您无法将生成源中的 java 文件添加到带有此标记的编译中。

你可以尝试使用这样的想法。