3

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

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

4

1 回答 1

2

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

  • 该任务用于project.javaexec {}在单独的 JVM 中执行代码。如果代码不能直接执行,则任务可能需要将一些引导代码注入到javaexec类路径中。使用的潜在替代方法project.javaexec是首先使用JavaExec任务。
  • 该任务创建一个新的类加载器,用类路径填充它,加载并实例化用作 API 入口点的类,并在适当的时候使用它们。如果任务是用 Groovy 编写的,它可以利用鸭子类型,并且除了创建入口点之外不需要反射代码。
于 2013-03-29T14:37:52.253 回答