Набір вихідних файлів — це іменована група вихідних файлів і ресурсів. Для кожного набору Elide створює завдання компіляції, тестування та пакування.
Стандартна структура
main міститься в src/main, test — у src/test, будь-який інший набір — у src/<name>:
| Шлях | Призначення |
|---|---|
src/<set>/java, /kotlin, /js, /ts, /python | Вихідні файли, по одному каталогу на мову |
src/<set>/resources | Ресурси |
- Компілюється кожен наявний каталог мови. Якщо їх немає, коренем вихідних файлів є сам
src/<set>. srcвикористовується якsrc/main;testабоtests— якsrc/test.mainіtestіснують, коли існують їхні каталоги. Інші набори потрібно оголосити.
Для такої структури блок sources не потрібен:
src/main/kotlin/sample/Main.kt
src/main/resources/app.properties
src/test/kotlin/sample/MainTest.ktelide project info виводить розв’язані набори; (by convention) позначає шляхи зі стандартної структури.
Оголошення наборів вихідних файлів
sources {
// A glob moves only the sources.
["main"] = "lib/**/*.kt"
// A block sets more properties.
["integrationTest"] {
type = "test"
paths { "it/**/*.kt" }
}
}new Sources.SourceSetSpec { … } (з import "elide:Sources.pkl" as Sources) — повна форма запису. Шляхи — це
glob-шаблони або каталоги відносно проєкту; каталог обходиться рекурсивно.
Пріоритет
Кожна оголошена властивість замінює домовленість лише для цієї властивості.
| Властивість | Не вказана | Оголошена |
|---|---|---|
type | Визначається за назвою | Використовується завжди |
paths | Стандартна структура для цієї назви | Використовується як є |
resources | src/<name>/resources, якщо існує | Використовується як є |
dependsOn | Набори тестів і прикладів бачать main | Використовується як є; порожнє значення означає «нічого» |
type | Визначається за | Поведінка |
|---|---|---|
test | test, tests | Запускається elide test; розв’язує testPackages. |
example | example, examples | Продакшн-набір. |
source | будь-якою іншою назвою | Продакшн-набір. |
other | — | Продакшн-набір. |
Артефакти, у яких не вказано вихідних файлів, пакують усі продакшн-набори. Оголошений набір, шляхи якого охоплюють
src/main або src/test, замінює відповідний стандартний набір, тож жоден файл не компілюється двічі.
Залежності та classpath
Продакшн-набори розв’язують packages, modules, compileOnly, runtimeOnly і processors. Набори тестів додають
testPackages і набори, від яких вони залежать. Набір тестів із dependsOn {} компілюється та запускається без
класів і ресурсів main, але й далі розв’язує packages. Див. Залежності.
elide classpath # main:compile
elide classpath runtime # main:runtime
elide classpath test:runtime # [<source-set>:]<usage>elide classpath розв’язує classpath і виводить його одним рядком, розділяючи елементи символом :. Призначення:
compile, runtime, processor, modules, toolchain, provided; з будь-яким іншим значенням команда завершується
з кодом 2. Встановлення також записує .dev/dependencies/m2/{compile,runtime,test,processors}.classpath.
Ресурси
У JVM ресурси перебувають у classpath під час запуску й тестів і копіюються в JAR.
sources {
["main"] {
resources {
"assets/banner.txt"
new {
from = "config/services"
into = "META-INF"
}
}
}
}Простий шлях копіюється в корінь результату. from (каталог або файл) копіюється в into:
config/services/app.Service стає META-INF/services/app.Service. За замовчуванням into — це корінь.
Артефакти
artifacts {
["app"] = new Jvm.Jar {} // every non-test source set
["lib"] = new Jvm.Jar { sources { "api" } }
}JAR-файли з вихідним кодом і Javadoc підпорядковуються тому самому правилу. resources у JAR додаються до ресурсів
його наборів. Див. Збирання JAR.
Мови
Мову визначає розширення файлу: .java, .kt, .js/.mjs/.cjs/.jsx,
.ts/.mts/.cts/.tsx, .py. Набір із Java і Kotlin запускає обидва компілятори; набір без жодної з них не
запускає компіляцію для JVM. Налаштування компілятора для одного набору задаються в блоці мови з назвою набору як
ключем: jvm.java.sourceSets (див. Компілятор Java).
Скрипти Kotlin (.kts) у наборі вважаються вихідними файлами Kotlin, але не дають класів і не проходять перевірку
типів.