Набор исходников — это именованная группа исходников и ресурсов. Для каждого набора 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, но не дают классов и не проходят проверку типов.