Перейти до вмісту

Набори вихідних файлів

Як Elide знаходить вихідні файли та ресурси проєкту: стандартна структура src, оголошення наборів вихідних файлів в elide.pkl, пріоритет і classpath кожного набору.

На цій сторінці

Набір вихідних файлів — це іменована група вихідних файлів і ресурсів. Для кожного набору 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.kt

elide 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Стандартна структура для цієї назвиВикористовується як є
resourcessrc/<name>/resources, якщо існуєВикористовується як є
dependsOnНабори тестів і прикладів бачать mainВикористовується як є; порожнє значення означає «нічого»
typeВизначається заПоведінка
testtest, testsЗапускається elide test; розв’язує testPackages.
exampleexample, 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, але не дають класів і не проходять перевірку типів.

Чи була ця сторінка корисною?