Перейти к содержимому

Наборы исходников

Как 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, но не дают классов и не проходят проверку типов.

Была ли эта страница полезной?