1

一个带有一些生成文件的 Maven 项目:

my.package.R // generated from resources
my.package.ClassThatGeneratesRFromResources
my.package.AClassThatUsesR
my.package.AnotherClassThatUsesR
my.package.YetAnotherClassThatUsesR

构建时,我想编译 ClassThatGeneratesRFromResources,执行它(从而生成 R.java 类),然后一起编译其他所有内容。

我可以使用模块、反应器和在它自己的小模块中隔离 ClassThatGeneratesRFromResources 来完成这项工作。但是,我想知道为什么我的丑陋、笨重的解决方案不起作用。这是我当前的POM:

<build>
    <plugins>
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
            <executions>
                <execution>
                    <id>
                        generate-r-file-creator
                    </id>
                    <configuration>
                        <phase>generate-sources</phase>
                        <goal>compile</goal>
                        <includes>
                          <include>my/package/ClassThatGeneratesRFromResources.java</include>
                       </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1.1</version>                
            <executions>
                <execution>
                    <id>generate-r-files</id>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                    <configuration>
                        <mainClass>my.package.ClassThatGeneratesRFromResources</mainClass>
                        <arguments>
                           <argument>${basedir}</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>        
    </plugins>
</build>

结果是初始编译器运行失败,然后代码生成运行也失败(因为 ClassThatGeneratesRFromResources 尚未编译)。为什么我的编译器插件没有被触发?我该如何解决这个问题(除了模块化)?

4

0 回答 0