我开发了一个 maven 插件,它可以扫描模块中的类,以找到一些特定的类并对其进行处理。
问题是,当我在 Maven 模块中使用此插件时,它无法在该模块中找到类。
我检查了插件类路径,它只包含插件类和它的依赖项。
有没有办法自动将模块类包含到插件类路径中?
我开发了一个 maven 插件,它可以扫描模块中的类,以找到一些特定的类并对其进行处理。
问题是,当我在 Maven 模块中使用此插件时,它无法在该模块中找到类。
我检查了插件类路径,它只包含插件类和它的依赖项。
有没有办法自动将模块类包含到插件类路径中?
我采用了这种方法,显然它正在工作:
1 - 你的 Mojo 类中需要一个 MavenProject 参数:
@Parameter(defaultValue = "${project}", required = true, readonly = true)
private MavenProject project;
2 - 然后你可以从项目实例中获取类路径元素:
try {
Set<URL> urls = new HashSet<>();
List<String> elements = project.getTestClasspathElements();
//getRuntimeClasspathElements()
//getCompileClasspathElements()
//getSystemClasspathElements()
for (String element : elements) {
urls.add(new File(element).toURI().toURL());
}
ClassLoader contextClassLoader = URLClassLoader.newInstance(
urls.toArray(new URL[0]),
Thread.currentThread().getContextClassLoader());
Thread.currentThread().setContextClassLoader(contextClassLoader);
} catch (DependencyResolutionRequiredException e) {
throw new RuntimeException(e);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}