Додайте ресурси, конфігураційні файли до вашої банки за допомогою gradle


91

Як додати конфігураційні файли або будь-які інші ресурси до моєї банки за допомогою gradle?

Структура мого проекту:

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

src / main / java / config / *. xml --- Весняні конфігураційні файли

Очікувана структура банки:

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

config / *. xml --- Весняні конфігураційні файли

Відповіді:


81

Я натрапив на цю публікацію, шукаючи, як додати додатковий каталог для ресурсів. Я знайшов рішення, яке може комусь стати в нагоді. Ось моя остаточна конфігурація, щоб отримати це:

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

5
Це набагато простіше рішення, ніж прийнята відповідь
Стюарт

70

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


1
Працює для мене, здається, це найпростіший і "найбільш правильний" спосіб досягти цього.
EM-Creations

Ця відповідь пропонує швидше вирішення проблеми, а не рішення, і Gradle пропонує рішення.
Жахливий пуголовка

@TerribleTadpole це правильне рішення. Усі інші - обхідні шляхи.
jannis

63

Дякую, хлопці, я мігрував існуючий проект до 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, знайдені в каталогах джерел ресурсів."
Джо Боубір,

25

За замовчуванням усі додані вами файли src/main/resourcesбудуть включені в банку.

Якщо вам потрібно змінити цю поведінку з будь-якої причини, ви можете зробити це, налаштувавши sourceSets.

Ця частина документації містить усі подробиці


4
Чи знаєте ви, чому .../resources/замість каталогу ресурсів із вмістом включено лише вміст?
саргас,

@sargas Вам, мабуть, слід розпочати нове запитання, де ви легко можете включити весь контекст. Важко отримати багато інформації в розділі коментарів :(
geoa

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" ]
папок

3

Майте на увазі, що шлях у src / main / resources повинен відповідати шляху пакунку до ваших файлів .class, які бажають отримати доступ до ресурсу. Дивіться мою відповідь тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.