我正在开发一个Java Web项目,该项目使用Liquibase groovy DSL来管理数据库更改.为了本主题,它可以是使用*.groovy文件作为源的任何其他第三方库.该项目是用gradle建造的.在我的一个模块(dao-base)下的src/main/resources文件夹我有groovy文件(changelog01.groovy, master_changelog.groovy等).这些文件应该在运行时由liquibase jar加载.
现在,当我尝试在IntelliJ中创建项目时,它会给出以下错误消息:
Groovyc:无法编译Groovy文件:没有为模块'dao-base'定义Groovy库.
我知道groovy插件检测*.groovy文件,尝试编译它们并且不出所料地失败.这些是groovy DSL文件,只能由第三方liquibase解析器加载,我不需要IntelliJ的groovy插件来尝试编译它们.
我设法提出了两个部分解决方案:1.禁用intellij中的groovy插件.这个解决方案的问题是gradle插件依赖于groovy插件,因此在禁用groovy插件时会自动禁用.我需要启用gradle插件.2.排除src/main/resources项目设置中的文件夹 - >模块 - > dao-base(我的模块) - > sources选项卡.这个解决方案的问题是,当我构建项目并部署到tomcat时,资源文件夹中的文件丢失,因为运行时需要文件中的文件,所以当战争加载时我得到文件未找到异常.
我希望有人能为这个问题找到更好的解决方案.
我正在尝试为詹金斯编写一个groovy-dsl脚本以生成两个作业:
它们的定义几乎相同。它们之间只有微小的差异。因此,我想重用大多数工作代码,然后进入以下重构场景(请关注第五行的三元运算符):
[
['toolchainsBuild': false],
['toolchainsBuild': true],
].each { Map config ->
config.toolchainsBuild ? job("job1") : matrixJob("job2") {
// job definition follows...for example:
out.println("debug")
steps {
cmake {
buildToolStep {}
}
}
// if (config.toolchainsBuild) {
// ... // different actions, depending on the job type
// }
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用。证明:debug仅在日志文件中打印一次(它应该出现两次,因为我希望定义两个不同的作业)。
我还尝试将三元运算符及其操作数包装在括号中,如下所示:
(config.toolchainsBuild ? job("job1") : matrixJob("job2")) {
// ...
Run Code Online (Sandbox Code Playgroud)
但是,这会导致语法错误:
Processing provided DSL script
ERROR: (script, line 20) No signature of …Run Code Online (Sandbox Code Playgroud) android.applicationVariants.all { variant ->
variant.outputs.each { output ->
int newVersionCode = android.defaultConfig.versionCode * 10 + abiVersionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0)
output.versionCodeOverride = newVersionCode
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此Gradle Groovy DSL代码转换为新的Gradle Kotlin DSL。我希望代码正常运行,就像以前的APK拆分变体遵循我的versionCode模式一样
这就是我试图用Kotlin DSL编写的内容:
applicationVariants.all(object : Action<ApplicationVariant> {
override fun execute(variant: ApplicationVariant) {
variant.outputs.forEach {output ->
val newVersionCode = defaultConfig.versionCode ?: 0 * 10 + abiVersionCodes[output.filters.first { it.identifier == com.android.build.OutputFile.ABI }]
output.versionCodeOverride = newVersionCode
}
}
})
Run Code Online (Sandbox Code Playgroud)
但它说:“未解决的参考:versionCodeOverride”
使用Kotlin DSL的正确方法是什么?