Zum Inhalt springen

Source-Sets

Wie Elide die Quellen und Ressourcen eines Projekts findet: das konventionelle src-Layout, Source-Sets in elide.pkl deklarieren, Vorrangregeln und Classpaths pro Source-Set.

Auf dieser Seite

Ein Source-Set ist eine benannte Gruppe von Quellen und Ressourcen. Elide leitet aus jedem Source-Set Tasks zum Kompilieren, Testen und Paketieren ab.

Konventionelles Layout

main liegt in src/main, test in src/test, jedes andere Source-Set in src/<name>:

PfadBedeutung
src/<set>/java, /kotlin, /js, /ts, /pythonQuellen, ein Verzeichnis pro Sprache
src/<set>/resourcesRessourcen
  • Jedes vorhandene Sprachverzeichnis wird kompiliert. Gibt es keines, ist src/<set> selbst die Quellwurzel.
  • src gilt als src/main; test oder tests als src/test.
  • main und test existieren, wenn ihre Verzeichnisse existieren. Andere Source-Sets müssen deklariert werden.

Dieses Layout braucht keinen sources-Block:

src/main/kotlin/sample/Main.kt
src/main/resources/app.properties
src/test/kotlin/sample/MainTest.kt

elide project info gibt die aufgelösten Source-Sets aus; (by convention) kennzeichnet Pfade aus dem Layout.

Source-Sets deklarieren

sources {
  // A glob moves only the sources.
  ["main"] = "lib/**/*.kt"

  // A block sets more properties.
  ["integrationTest"] {
    type = "test"
    paths { "it/**/*.kt" }
  }
}

new Sources.SourceSetSpec { … } (mit import "elide:Sources.pkl" as Sources) ist die Langform des Eintrags. Pfade sind projektrelative Globs oder Verzeichnisse; ein Verzeichnis wird rekursiv durchlaufen.

Vorrang

Jede deklarierte Eigenschaft ersetzt die Konvention nur für diese Eigenschaft.

EigenschaftWeggelassenDeklariert
typeAus dem Namen abgeleitetWird immer verwendet
pathsDas konventionelle Layout für den NamenWird unverändert verwendet
resourcessrc/<name>/resources, falls vorhandenWird unverändert verwendet
dependsOnTest- und Beispiel-Sets sehen mainWird unverändert verwendet; leer bedeutet nichts
typeAbgeleitet ausVerhalten
testtest, testsWird von elide test ausgeführt; löst testPackages auf.
exampleexample, examplesProduktions-Set.
sourcejedem anderen NamenProduktions-Set.
other—Produktions-Set.

Artefakte, die keine Quellen nennen, paketieren alle Produktions-Sets. Ein deklariertes Source-Set, dessen Pfade src/main oder src/test abdecken, ersetzt das jeweilige konventionelle Set, sodass keine Datei doppelt kompiliert wird.

Abhängigkeiten und Classpaths

Produktions-Sets lösen packages, modules, compileOnly, runtimeOnly und processors auf. Test-Sets fügen testPackages und die Sets hinzu, von denen sie abhängen. Ein Test-Set mit dependsOn {} wird ohne die Klassen und Ressourcen von main kompiliert und ausgeführt, löst aber weiterhin packages auf. Siehe Abhängigkeiten.

elide classpath                 # main:compile
elide classpath runtime         # main:runtime
elide classpath test:runtime    # [<source-set>:]<usage>

elide classpath löst den Classpath auf und gibt ihn in einer Zeile aus, die Einträge durch : getrennt. Verwendungen: compile, runtime, processor, modules, toolchain, provided; alles andere endet mit Exit-Code 2. Die Installation schreibt außerdem .dev/dependencies/m2/{compile,runtime,test,processors}.classpath.

Ressourcen

Auf der JVM liegen Ressourcen bei Ausführungen und Tests auf dem Classpath und werden in JARs kopiert.

sources {
  ["main"] {
    resources {
      "assets/banner.txt"
      new {
        from = "config/services"
        into = "META-INF"
      }
    }
  }
}

Ein einfacher Pfad wird in die Wurzel der Ausgabe kopiert. from (ein Verzeichnis oder eine Datei) wird unter into kopiert: aus config/services/app.Service wird META-INF/services/app.Service. into ist standardmäßig die Wurzel.

Artefakte

artifacts {
  ["app"] = new Jvm.Jar {}                 // every non-test source set
  ["lib"] = new Jvm.Jar { sources { "api" } }
}

Quell- und Javadoc-JARs folgen derselben Regel. Die resources eines JAR kommen zu denen seiner Sets hinzu. Siehe JAR-Erstellung.

Sprachen

Die Dateiendung bestimmt die Sprache: .java, .kt, .js/.mjs/.cjs/.jsx, .ts/.mts/.cts/.tsx, .py. Ein Set mit Java und Kotlin führt beide Compiler aus; ein Set ohne beide führt keine JVM-Kompilierung aus. Compiler-Einstellungen für ein Set gehören in den Block der Sprache, mit dem Namen des Sets als Schlüssel: jvm.java.sourceSets (siehe Java-Compiler). Kotlin-Skripte (.kts) in einem Set zählen als Kotlin-Quellen, erzeugen aber keine Klassen und werden nicht typgeprüft.

War diese Seite hilfreich?