Gradle Plugin必须从项目中加载已编译的类

时间:2013-03-25 21:26:22

标签: gradle

作为为Flyway编写Gradle插件的一部分,我们在处理Java迁移时偶然发现了一个问题。

在类路径上为项目的已编译类提供Gradle插件访问权限以便它可以加载和执行它们的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

所以情况是我们有一个插件添加了一个任务,该任务想要执行插件所应用的项目中包含的代码。在这种情况下,任务(类)应该具有类型Iterable<File>的输入属性,该输入属性(通过插件)配置有要执行的代码的类路径(例如sourceSets.main.runtimeClasspath)。然后,任务可以在以下方式之间进行选择以执行代码:

  • 该任务使用project.javaexec {}在单独的JVM中执行代码。如果代码不能直接执行,则任务可能需要将一些引导代码注入javaexec类路径。使用project.javaexec的潜在替代方法是首先使用JavaExec任务。
  • 该任务创建一个新的类加载器,使用类路径填充它,加载并实例化作为API入口点的类,并根据需要使用它们。如果任务是用Groovy编写的,它可以利用duck typing,除了创建入口点之外不需要反射代码。