Добавьте ресурсы, файлы конфигурации в свою банку с помощью gradle


91

Как добавить файлы конфигурации или любые другие ресурсы в банку с помощью Gradle?

Моя структура проекта:

src / main / java / com / perseus / .. --- Пакеты Java (исходные файлы)

src / main / java / config / *. xml --- файлы конфигурации Spring

Ожидаемая структура банки:

com / perseus / .. --- Пакеты Java (файлы классов)

config / *. xml --- файлы конфигурации Spring

Ответы:


81

Я наткнулся на этот пост в поисках того, как добавить дополнительный каталог для ресурсов. Нашел решение, которое может кому-то пригодиться. Вот моя последняя конфигурация, чтобы получить это:

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/configs"
        }
    }
}

5
Это гораздо более простое решение, чем принятый ответ
Стюарт

70

Переместите файлы конфигурации из src/main/javaв src/main/resources.


1
Мне подходит, кажется, самый простой и «самый правильный» способ добиться этого.
EM-Creations

Этот ответ предлагает обходной путь, а не решение, и Gradle предлагает решение.
Грозный головастик

@TerribleTadpole, это правильное решение. Все остальное - обходные пути.
Яннис,

64

Спасибо, ребята, я переносил существующий проект на Gradle, и мне не очень понравилась идея менять структуру проекта.

Я разобрался, подумал, что эта информация может быть полезна новичкам.

Вот пример задачи из моего build.gradle:

version = '1.0.0'

jar {
   baseName = 'analytics'
   from('src/main/java') {
      include 'config/**/*.xml'
   }

   manifest {
       attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
   }
}

34
Точнее перенастроить исходный набор. Что-то вроде sourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }.
Peter Niederwieser

1
Спасибо @PeterNiederwieser !! Пытался включить мой файл log4j.xml в мою исполняемую банку, которую я создавал с помощью тени. Я тоже имел дело со старым проектом и не мог сразу изменить структуру каталогов. Ваше предложение было именно тем, что мне было нужно !! : D
Пико

@PeterNiederwieser - я заметил в документации плагина Java, что ресурсы уже определены для исключения * .java. «Содержит только ресурсы и исключает любые файлы .java, найденные в исходных каталогах ресурсов».
Joe Bowbeer

25

По умолчанию все файлы, которые вы добавляете, src/main/resourcesбудут включены в jar.

Если вам нужно изменить это поведение по какой-либо причине, вы можете сделать это, настроив sourceSets.

В этой части документации есть все подробности


4
Знаете ли вы, почему только содержимое .../resources/включается вместо каталога ресурсов с содержимым?
sargas

@sargas Вам, вероятно, следует начать новый вопрос, в который вы можете легко включить весь контекст. Трудно получить много информации в разделе комментариев :(
geoand

18

Я столкнулся с той же проблемой. У меня был файл PNG в пакете Java, и он не был экспортирован в окончательный JAR вместе с источниками, что привело к сбою приложения при запуске (файл не найден).

Ни один из приведенных выше ответов не решил мою проблему, но я нашел решение на форумах Gradle. Я добавил в свойbuild.gradle файл следующее:

sourceSets.main.resources.srcDirs = [ "src/" ]
sourceSets.main.resources.includes = [ "**/*.png" ]

Он сообщает Gradle искать ресурсы в src папке и просит включить только файлы PNG.

РЕДАКТИРОВАТЬ: помните, что если вы используете Eclipse, это нарушит ваши конфигурации запуска, и вы получите main class not foundошибку при попытке запустить свою программу. Чтобы исправить это, я нашел единственное решение - переместить изображение (я), res/например, в другой каталог и установить его как srcDirsвместо src/.


2
Я использовал +=оператор, чтобы добавить свои каталоги в существующие каталоги: напримерsourceSets.main.resources.srcDirs += [ "src/main/java" ]
TmTron

3

Имейте в виду, что путь в src / main / resources должен совпадать с путем к пакету ваших файлов .class, желающих получить доступ к ресурсу. Смотрите мой ответ здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.