无法从自定义 Maven 插件内部使用 org.reflections.Reflections 查找类



我创建了一个自定义的Maven插件,如下所示:

@Mojo(name="generate", defaultPhase = LifecyclePhase.PREPARE_PACKAGE) 
public class HandlerGeneratorMojo extends AbstractMojo {
...
}

我是这样使用它的:

<!-- GENERATE EVENT HANDLERS (POC) -->
<plugin>
<artifactId>handler-generator-maven-plugin</artifactId>
<groupId>my.group.id</groupId>
<version>${revision}</version>
<executions>
<execution>
<id>generate handlers</id>
<phase>prepare-package</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
</plugin>

在Mojo的执行方法中,我尝试使用Reflections api检索扩展接口CdsData的所有接口。

final Reflections reflections = new Reflections();

final Set<Class<? extends CdsData>> allClasses = 
reflections.getSubTypesOf(CdsData.class);
log.info("Number of results: " + allClasses.size());

for (final Class<? extends CdsData> cdsDataClass: allClasses) {
log.info("Result: " + cdsDataClass);
}

我得到了五个结果,这些结果位于我执行插件的pom的依赖项中。所以没关系。 但是,我也使用另一个插件(cds4j-maven-plugin(生成了一些实现,该插件已设置

<phase>generate-sources</phase>

并且我尝试将自定义插件的阶段设置为准备包,以便在上述插件生成源代码后执行它。 但是,我得到的结果没有比我之前提到的五个结果更多。我也希望看到那些生成的接口。

这可能是类路径或类加载器问题?或者阶段?

我还尝试将生成的类的包放在反射构造函数中,并且我尝试配置反射类加载,如第 8 行所述:https://www.hellojava.com/a/80798.html

任何帮助不胜感激!谢谢!

干杯 凯尔德

好的,终于解决了。这绝对是一个类加载问题。我需要添加一个指向类路径元素的类加载器,如下所述:http://blog.chalda.cz/2018/02/17/Maven-plugin-and-fight-with-classloading.html

我将范围更改为进程类,基本上更改了博客中描述的所有内容,并使用了:

Reflections reflections = new Reflections(classLoader, sourcePackage);

其中类加载器是按照该博客中的说明组合在一起的类加载器,而 sourcePackage 是一个字符串,其中包含我想要的结果类型的包前缀。

希望这对其他人有所帮助。

谢谢。

相关内容

  • 没有找到相关文章

最新更新