gpt4 book ai didi

gradle - 在自定义gradle任务中使用内置jar中的类

转载 作者:行者123 更新时间:2023-12-03 04:57:14 27 4
gpt4 key购买 nike

我的gradle项目需要为剩余的构建过程生成代码。应该生成代码的工具是一个jar文件,该文件也是在同一gradle项目中构建的。

我想编写一个处理代码生成步骤的自定义任务。显然,此任务必须取决于正在构建的jar文件,这很简单。

现在,我想在自定义任务中从我的jar文件访问这些类,而我只是不知道如何告诉gradle该解析器类可从生成的jar文件中获得。请参阅以下示例,了解我要在任务中执行的操作:

task generateCode(dependsOn: ':dmlproject:build') {

doLast {
DmlParser parser = new DmlParser();
parser.doStuff();
}
}

Gradle不知道DmlParser类可以在dmlproject jar文件中找到,我如何告诉gradle在哪里找到它?那有可能吗?

我了解这在我至少构建一次dmlproject之前是否根本无法解决,因为没有jar文件,也就没有DmlParser类。但是在第一次构建之后,应该可以使事情正常进行,不是吗?

编辑:
即使我无法引用同一项目中内置的jar文件中的类,我也想知道如何访问磁盘上的jar文件或从maven存储库下载的jar文件中的类。

最佳答案

原始答案

如果您需要编写复杂的构建逻辑来增强构建,则不能在主构建中执行此操作。这是因为Gradle需要在执行开始之前配置项目。因此Gradle需要知道configuration time上的DmlParser类,但是您的构建会在执行时创建它。

解决此问题的方法是引入 buildSrc build。这是项目目录中的单独构建,可用于实现其他复杂的构建逻辑。只需在项目目录中创建一个名为buildSrc的新目录,然后在其中移动创建DmlParser的逻辑即可。这样,您可以在主版本中使用DmlParser

编辑

如果要添加已经构建的jar,则需要使用 buildscript block将该jar添加到构建脚本的类路径中:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
}

然后,您可以引用已添加到类路径中的jar中定义的类。

关于gradle - 在自定义gradle任务中使用内置jar中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56721974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com