gpt4 book ai didi

maven-2 - Maven插件无法加载类

转载 作者:行者123 更新时间:2023-12-03 15:18:50 25 4
gpt4 key购买 nike

我正在尝试制作一个需要使用反射的Maven插件。我希望一个项目运行该插件,并在项目中为其提供类的全名,然后该插件将通过反射将其加载以从中获取信息。

但是类加载器有一些奇怪的地方,因为当我使用它时找不到它

Class.forName("package.MyClass");


查看 "Guide to Maven Classloading",我无法完全确定我的插件的类加载器在其他项目中运行时是否可以访问该项目的类。

最佳答案

我敢肯定有更好的方法,但是这就是我的工作方式:

将以下内容添加到mojo顶部的javadoc中:
@requiresDependencyResolution运行时

添加一个MavenProject参数:

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


然后,您可以在运行时获取依赖项,并创建自己的类加载器:

List runtimeClasspathElements = project.getRuntimeClasspathElements();
URL[] runtimeUrls = new URL[runtimeClasspathElements.size()];
for (int i = 0; i < runtimeClasspathElements.size(); i++) {
String element = (String) runtimeClasspathElements.get(i);
runtimeUrls[i] = new File(element).toURI().toURL();
}
URLClassLoader newLoader = new URLClassLoader(runtimeUrls,
Thread.currentThread().getContextClassLoader());


然后,您可以使用此新的类加载器加载类:

Class bundle = newLoader.loadClass("package.MyClass");

关于maven-2 - Maven插件无法加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com