3

我需要在 Maven 构建过程中为特定接口创建一个子类列表,然后在运行时使用它来加载这些类。我在我的 webapp pom 中添加了反射-maven(来自谷歌代码反射),但是在 maven 构建期间,它只包括来自 web 应用程序的类,而不包括该应用程序web-inf/lib文件夹中的打包 jar 中的类。以下是我使用的直接配置。我查看了插件源代码,它似乎扫描了以下内容:getProject().getBuild().getOutputDirectory().

无论如何我可以配置插件来扫描项目的依赖jar文件吗?

<plugin>
    <groupId>org.reflections</groupId>
    <artifactId>reflections-maven</artifactId>
    <version>0.9.9-RC1</version>
    <executions>
        <execution>
            <goals>
                <goal>reflections</goal>
            </goals>
            <phase>process-classes</phase>
        </execution>
    </executions>
</plugin>
4

1 回答 1

7

您可以使用您喜欢的任何配置轻松运行反射,例如使用 gmaven-plugin:

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.3</version>
    <dependencies>
        <dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
            <version>0.9.9-RC1</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <source>
                    new org.reflections.Reflections("f.q.n")
                        .save("${project.build.outputDirectory}/META-INF/reflections/${project.artifactId}-reflections.xml")
                </source>
            </configuration>
        </execution>
    </executions>
</plugin>

因此,您需要做的就是使用正确的配置,也许在您的特定情况下:

def urls = org.reflections.util.ClasspathHelper.forWebInfLib()
    new org.reflections.Reflections(urls)
        .save("${project.build.outputDirectory}/META-INF/reflections/${project.artifactId}-reflections.xml")
于 2013-12-25T12:03:02.760 回答