不仅仅是pom.xml中的编译步骤

时间:2012-10-26 07:37:47

标签: maven

我的pom.xml结构如下:

<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <includes>
                 ... some directories with .java files to compile.

...

<plugin>  --- some my plugin that generates one more dir with .java files.

此时我想编译新生成的文件,所以我在这里重复步骤1,其中包含“includes”元素的不同内容。第二次编译根本不会发生。请指教。

1 个答案:

答案 0 :(得分:1)

您的插件应该在generate-sources阶段运行。然后,您必须确保在正常compile阶段生成的源可用。

您的插件应配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>your.group</groupId>
            <artifactId>your-generator-plugin</artifactId>
            <version>your-generator-version</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>your-generator-goal</goal>
                    </goals>
                    <configuration>
                        <!-- Here goes all the plugin configuration -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

您可以直接从您的插件(mojo)添加要使用的编译源路径。

以下是您必须添加到mojo中的示例:

/**
 * The current project representation.
 * @parameter expression="${project}"
 * @required
 * @readonly
 */
private MavenProject project;

/**
 * Directory wherein generated source will be put; main, test, site, ... will be added implictly.
 * @parameter expression="${outputDir}" default-value="${project.build.directory}/src-generated"
 * @required
 */
private File outputDir;

必须在execute()方法中添加类似内容:

if (!settings.isInteractiveMode()) {
    LOG.info("Adding " + outputDir.getAbsolutePath() + " to compile source root");
}
project.addCompileSourceRoot(outputDir.getAbsolutePath());

这会将生成的java源文件输出到target/src-generated/,但可以将其添加到mojo OR 中的其他默认值,方法是将其添加到插件的配置部分:

<outputDir>path/to/my/generated/source/</outputDir>

生成的java源文件将自动包含在compile阶段。