【问题标题】:Can't load resources in a gradle project无法在 gradle 项目中加载资源
【发布时间】:2019-04-03 09:53:36
【问题描述】:

我正在使用 gradle 4.10.2 和 IntelliJ IDEA 社区版 2018.2 请注意,这是一个 jenkins 共享库项目,因此与 standard gradle project structure 不同。

图片中显示的项目是现有的 Gradle 项目。我只是想加载一个属性文件,即。 Groovy 类 EmailTemplate 中的 mailTemplate.properties 但问题是,无论我将它保存在哪里(如图所示),它都没有加载。我创建了一个单独的测试 gradle 项目并将其放在默认 (src/main/resources) 目录中。它就像微风一样工作。 我尝试在两个地方创建“资源”但徒劳无功。

build.gradle 是:

buildscript {
    repositories {
        ivy {
            url "$repositoryURL/$resolveRepository"
        }
        maven {
            url "$repositoryURL/$resolveRepository"
        }
    }
    dependencies {
        classpath "tools.gradle.plugin:ReleasePlugin:1.10.0"
        classpath "tools.gradle.plugin:qualityreport:v1.14.4"
    }
}

group 'tools'

apply plugin: 'groovy'
apply plugin: 'tools.gradle.plugin.releaseplugin'
apply plugin: 'tools.gradle.plugin.qualityreport'

sourceSets {
    main {
        groovy {
            srcDirs = ['src']
        }
    }
    test {
        groovy {
            srcDirs = ['test/groovy']
        }
    }
}

repositories {
    addAll(buildscript.repositories)
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.4.15'
    compile 'org.codehaus.groovy:groovy-json:2.4.9'
    compile 'com.cloudbees:groovy-cps:1.1'
    compile 'org.slf4j:slf4j-api:1.7.21'

    testCompile 'junit:junit:4.12'
    testCompile 'org.hamcrest:hamcrest-core:1.3'
    testCompile 'net.bytebuddy:byte-buddy:1.6.4'
    testCompile ('org.spockframework:spock-core:1.1-groovy-2.4') {
        exclude group: 'org.codehaus.groovy'
    }
    testCompile gradleTestKit()
    testCompile group: 'com.lesfurets', name: 'jenkins-pipeline-unit', version: '1.1'
    testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.4'
    testCompile group: 'tools.gradle.plugin', name: 'jenkins-shared-stages', version: 'v2.48.0'

    // jenkins dependencies
    testCompile 'org.jenkins-ci.plugins:script-security:1.34@jar'
}

task copySharedLibs(type: Copy, group: "PipelineTest") {
    from '.'
    into 'build/libs/jenkins-shared-pipelines@master'
    include 'src/**'
    include 'vars/**'
}

test.dependsOn(copySharedLibs)

【问题讨论】:

    标签: jenkins gradle jenkins-pipeline


    【解决方案1】:

    Gradle groovy plugin 期望资源默认位于src/main/resources。如果资源位于其他文件夹,则应在sourceSets 中进行配置。假设您的资源文件也在您的 src 文件夹中,您可以尝试以下操作。

    sourceSets {
        main {
            groovy {
                srcDirs = ['src']
            }
            resources {
                srcDirs = ['src']
            }
        }
        test {
            groovy {
                srcDirs = ['test/groovy']
            }
            resources {
                srcDirs = ['test/groovy']
            }
        }
    }
    

    【讨论】:

    • 补充这个答案,Gradle 假设 Standard Directory Layout
    • 你的意思是资源{ srcDirs = ['resources'] }
    • 这取决于您的应用程序的结构。作为您发布的图片,它应该是资源 { srcDirs = ['src'] }
    • @KaliyugAntagonist 是的,不过是Gradle follows that as well(使用java 插件时),至少在src/main/java & src/test/java & /resources 中。但是我的评论是错误的,因为我不认为他们将它用于该布局的所有组件(/filters 等),我将其作为一个事实提出来,但事实并非如此!不过,这似乎是其背后的基本原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2012-12-22
    相关资源
    最近更新 更多