在自定义 gradle 任务中使用内置 jar 中的 class
Use class from built jar in custom gradle task
我的 gradle 项目需要为剩余的构建过程生成代码。应该生成代码的工具是一个 jar 文件,它也在同一个 gradle 项目中构建。
我想编写一个自定义任务来处理代码生成步骤。这个任务显然必须依赖于正在构建的 jar 文件,这很简单。
现在我想在自定义任务中从我的 jar 文件访问 classes,我只是不知道如何告诉 gradle 解析器 class 是可以从构建的 jar 文件中获得。请参阅以下示例,了解我想在任务中执行的操作:
task generateCode(dependsOn: ':dmlproject:build') {
doLast {
DmlParser parser = new DmlParser();
parser.doStuff();
}
}
Gradle 不知道 dmlproject jar 文件中可以找到 DmlParser class,我怎么知道 gradle 在哪里可以找到它?这可能吗?
我知道在我至少构建一次 dmlproject 之前这是否根本不起作用,因为没有 jar 文件也没有 DmlParser class。但是在第一次构建之后应该可以让事情正常进行,不是吗?
编辑:
即使我不能在同一个项目中构建的 jar 文件中引用 classes,我也想知道如何访问磁盘上的 jar 文件中的 classes,或者从Maven 存储库。
原回答
如果您需要编写复杂的构建逻辑来增强您的构建,则不能在主构建中执行此操作。这样做的原因是Gradle需要在开始执行之前配置项目。所以 Gradle 需要知道 DmlParser
class 在 configuration time,但是你的构建在执行时创建它。
解决这个问题的方法是引入一个buildSrc
build。这是项目目录中的一个单独构建,您可以使用它来实现其他复杂的构建逻辑。只需在项目目录中创建一个名为 buildSrc
的新目录,然后将创建 DmlParser
的逻辑移到那里。这样您就可以在主构建中使用 DmlParser
。
编辑
如果你想添加一个已经构建的 jar,你需要使用 buildscript
block 来将 jar 添加到构建脚本的 classpath:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
}
然后就可以引用class路径中定义的classes了classpath.
我的 gradle 项目需要为剩余的构建过程生成代码。应该生成代码的工具是一个 jar 文件,它也在同一个 gradle 项目中构建。
我想编写一个自定义任务来处理代码生成步骤。这个任务显然必须依赖于正在构建的 jar 文件,这很简单。
现在我想在自定义任务中从我的 jar 文件访问 classes,我只是不知道如何告诉 gradle 解析器 class 是可以从构建的 jar 文件中获得。请参阅以下示例,了解我想在任务中执行的操作:
task generateCode(dependsOn: ':dmlproject:build') {
doLast {
DmlParser parser = new DmlParser();
parser.doStuff();
}
}
Gradle 不知道 dmlproject jar 文件中可以找到 DmlParser class,我怎么知道 gradle 在哪里可以找到它?这可能吗?
我知道在我至少构建一次 dmlproject 之前这是否根本不起作用,因为没有 jar 文件也没有 DmlParser class。但是在第一次构建之后应该可以让事情正常进行,不是吗?
编辑: 即使我不能在同一个项目中构建的 jar 文件中引用 classes,我也想知道如何访问磁盘上的 jar 文件中的 classes,或者从Maven 存储库。
原回答
如果您需要编写复杂的构建逻辑来增强您的构建,则不能在主构建中执行此操作。这样做的原因是Gradle需要在开始执行之前配置项目。所以 Gradle 需要知道 DmlParser
class 在 configuration time,但是你的构建在执行时创建它。
解决这个问题的方法是引入一个buildSrc
build。这是项目目录中的一个单独构建,您可以使用它来实现其他复杂的构建逻辑。只需在项目目录中创建一个名为 buildSrc
的新目录,然后将创建 DmlParser
的逻辑移到那里。这样您就可以在主构建中使用 DmlParser
。
编辑
如果你想添加一个已经构建的 jar,你需要使用 buildscript
block 来将 jar 添加到构建脚本的 classpath:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
}
然后就可以引用class路径中定义的classes了classpath.