标签: groovydsl

IntelliJ + groovy DSL:如何排除文件被groovy插件编译?

我正在开发一个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时,资源文件夹中的文件丢失,因为运行时需要文件中的文件,所以当战争加载时我得到文件未找到异常.

我希望有人能为这个问题找到更好的解决方案.

java groovy intellij-idea liquibase groovydsl

8
推荐指数
1
解决办法
6221
查看次数

Jenkins:普通的DSL:使用三元运算符区分FreeStyleJob和MatrixJob

我正在尝试为詹金斯编写一个groovy-dsl脚本以生成两个作业:

  • 第一份工作是FreestyleJob
  • 第二个是MatrixJob

它们的定义几乎相同。它们之间只有微小的差异。因此,我想重用大多数工作代码,然后进入以下重构场景(请关注第五行的三元运算符):

[
    ['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)

groovy ternary-operator jenkins groovydsl jenkins-job-dsl

2
推荐指数
1
解决办法
3807
查看次数

Gradle Kotlin DSL的versionCodeOverride等效项

    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的正确方法是什么?

android gradle kotlin groovydsl gradle-kotlin-dsl

2
推荐指数
1
解决办法
368
查看次数