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

标签 maven-2 maven-plugin

我正在尝试制作一个需要使用反射的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/

相关文章:

java - 在 netbeans 7 中,如何在构建 maven 项目时跳过测试并添加 maven 附加参数?

java - 在jrxml中导入自定义类并使用maven插件编译

java - 如何使用 IntelliJ 制作具有所有依赖项的 jar 文件,即 Fat jar

maven-2 - 使用Maven部署到Weblogic集群

java - 当我尝试在 netbeans 中运行 Maven 项目时出现错误

java - 如何升级 maven 插件的版本?

Maven exec-maven-plugin 和 maven-resources-plugin 未运行,不知道为什么

java - 使用 Maven Plugin 参数值作为另一个参数的默认值

maven - Gradle中的Maven配置

java - 碧 Jade 报告 : Getting JRRuntimeException: Error creating SAX parser