Подтвердить что ты не робот

Как добавить ресурсы в sourceSet с помощью 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

и 4 из моих 49 тестов терпят неудачу, потому что тесты в папке "тесты/модель" нуждаются в файле в папке "images/model". Как правильно добавить ресурсы? Спасибо!

4b9b3361

Ответ 1

Я поближе посмотрел на ваш 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'
    }
}

Здесь результат с обновленным build.gradle:

enter image description here

Надеюсь, это поможет:)

Ответ 2

Синтаксис, используемый в вашей сборке script, верен. Мне непонятно, почему вы добавляете один и тот же каталог ресурсов в оба набора источников, и почему вы утверждаете, что он не работает в одном случае.

srcDir "foo" добавляет другой каталог. Если вместо этого вы захотите заменить каталог по умолчанию, используйте srcDirs = [ "foo" ]. Однако это не решит проблему.

Было бы неплохо увидеть код, который загружает ресурсы, чтобы исключить любые проблемы с этим.