如何使用gradle向sourceSet添加资源?

时间:2013-12-22 17:45:36

标签: gradle build.gradle

目前我有以下build.gradle文件:

apply plugin: 'java'

repositories {
    mavenCentral()
}

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
        resources {
            srcDir 'images/model' 
        }
    }

    test {
        java {
            srcDir 'tests/model'
        }
        resources {
            srcDir 'images/model' // <=== NOT WORKING
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')

    testCompile group: 'junit', name: 'junit', version: '4.+'
}

我的存储库,如果在这里:https://github.com/quinnliu/WalnutiQ

我的49个测试中有4个失败,因为文件夹“tests / model”中的测试需要文件夹“images / model”中的文件。如何正确添加资源?谢谢!

2 个答案:

答案 0 :(得分:38)

我仔细研究了你的build.gradle,似乎路径有点偏离。

您将源指定为src/model,但您的项目结构和Java源代码表明model是您的包名称,这意味着源声明应为:

main {
    java {
        srcDir 'src'
    }
}

测试相同:

test {
    java {
        srcDir 'tests'
    }
}

现在,缺少资源。在您的代码中,您正在使用ImageIO.read(getClass().getResource(BMPFileName))
getClass().getResource()正在使用资源的相对路径。要使资源保持在同一级别,您应该更新资源的声明并删除model

test {
    java {
        srcDir 'tests'
    }
    resources {
        srcDir 'images'
    }
}

您可能还需要运行

./gradlew clean

在它运作之前。

以下是更新的build.gradle的结果:

enter image description here

希望有所帮助:)

答案 1 :(得分:16)

构建脚本中使用的语法是正确的。我不清楚为什么你在两个源集中添加相同的资源目录,以及为什么你声称它在一个案例中不起作用。

srcDir "foo"添加了另一个目录。如果您想要替换默认目录,请改用srcDirs = [ "foo" ]。但是,这不能解决手头的问题。

很高兴看到加载资源的代码,以排除任何问题。