java - Gradle/Java:使用可执行的 Java 类生成资源
问题描述
情况如下:
- 在 gradle 构建期间,我从依赖项中下载并解压缩资源
- 项目中的一个类将处理这些资源,并生成要包含在项目中的新资源(作为生成的资源)
我设法想出了一个 hacky 解决方案,它在“类”任务之后运行生成器,并将资源写入$buildDir/resources/main/schema
:
ext {
schemaGenerator = "org.something.JsonSchemaGenerator"
serviceContractsDir = file("$buildDir/service-contracts")
schemaOutputDir = file("$buildDir/resources/main/schema")
}
task jsonSchemas(type: Exec) {
dependsOn classes
dependsOn serviceContracts
commandLine "java", "-classpath", sourceSets.main.runtimeClasspath.getAsPath(), schemaGenerator, serviceContractsDir, schemaOutputDir
}
test.dependsOn jsonSchemas
assemble.dependsOn jsonSchemas
这很好用,然后生成的资源包含在 JAR 中。
但是在上传工件时,它会上传没有生成资源的 JAR。
我试图以正确的方式做到这一点:
ext {
schemaOutputDir = file("$buildDir/generated-resources")
}
sourceSets.main.output.dir schemaOutputDir, builtBy: jsonSchemas
但是我最终得到了一个循环依赖,因为 Gradle 需要资源来构建类,并且生成这些资源的任务也取决于类:
FAILURE:构建失败并出现异常。
出了什么问题:
以下任务之间的循环依赖:
:classes
--- :jsonSchemas
--- :classes (*)
有没有办法将它们添加到正确的源集(as generated-resources
)所以它们是
- 对测试可见
- 包含在生成的 JAR 中?
解决方案
添加一个独立于主 SourceSet 的新 SourceSet 应该可以解决问题:
task jsonSchemas(type: Exec) {
// same as above
}
sourceSets {
schema {
output.dir(schemaOutputDir, builtBy: 'jsonSchemas')
}
test {
resources.srcDirs += [sourceSets.schema.output]
}
}
jar {
from sourceSets.schema.output
}
推荐阅读
- mongodb - 如何将 Azure Blob 自定义元数据字段索引到 Azure 搜索
- javascript - 匹配所需的自定义评论块
- ios - UIAlertController 崩溃并出现致命异常:NSInternalInconsistencyException
- python-3.x - 在 KivyMD 的 MDDropdownMenu 中按下标签后如何更改按钮的文本?
- python-3.x - 如何使用 Python 打开“部分”链接?
- r - R - 将 Tigris SF Shapefile 添加到 ggmap
- admob - 我可以使用 admob 在 Webgl 上显示广告以在 Facebook 上发布游戏吗
- swift - 分钟和秒,带 2 位数字
- codeigniter - 遇到未捕获的异常。调用未定义的方法 Admin_model
- websocket - websockets.exceptions.ConnectionClosed:WebSocket 连接已关闭:代码 = 4008(私人使用),原因 = 速率受限