在我的plugin中,我需要从外部JAR执行静态引导方法来执行分析。目前我直接从MutationCoverageReport.main(arg)
的代码中调用它,但这迫使我在我的插件中创建一个编译时依赖项,hard在执行插件时修改(选择不同的JAR版本)。
我想使用反射调用它,并在Gradle代码中找到一些示例,例如WorkerProcessBuilder
或JavaExecHandleBuilder
。然而,它们是org.gradle.process.internal
包,我不确定是否建议从外部插件使用它。
问题即可。 Gradle插件从具有指定类路径的外部类运行任意Java方法的推荐方法是什么?
不过,我宁愿不使用Ant
任务,因为它是一个单独的项目和另一层抽象及其潜在的缺陷和限制。
答案 0 :(得分:2)
您可以采用几种方法来调用外部Jar中的main方法:
JavaExec
任务或利用project.javaexec
方法的自定义任务。buildscript { dependencies { classpath ... } }
)上。第一种方法是在单独的JVM中运行代码,这通常是可取的。第二种和第三种方法也可以调用除主要方法之外的方法。在第一种或第三种方法中,插件可以添加一种配置,允许用户通过在dependencies
块中声明依赖性来提供外部Jar。 (该插件可以提供默认依赖项。)这是许多内置Gradle插件所做的事情,例如代码质量插件(checkstyle
等)。您可能希望研究他们的代码以获得一些灵感。
外部插件应该只使用Gradle公共API中的类,即Javadoc或Groovydoc中记录的类。 (并非所有内部类在包名中都有internal
。)