Un source set est un groupe nommé de sources et de ressources. Elide en déduit les tâches de compilation, de test et d’empaquetage.
Arborescence conventionnelle
main se trouve dans src/main, test dans src/test, tout autre source set dans src/<name> :
| Chemin | Signification |
|---|---|
src/<set>/java, /kotlin, /js, /ts, /python | Sources, un répertoire par langage |
src/<set>/resources | Ressources |
- Chaque répertoire de langage présent est compilé. S’il n’y en a aucun,
src/<set>lui-même est la racine des sources. srcsert desrc/main;testoutestsservent desrc/test.mainettestexistent dès que leurs répertoires existent. Les autres source sets doivent être déclarés.
Cette arborescence ne nécessite pas de bloc sources :
src/main/kotlin/sample/Main.kt
src/main/resources/app.properties
src/test/kotlin/sample/MainTest.ktelide project info affiche les source sets résolus ; (by convention) signale les chemins issus de l’arborescence.
Déclarer des source sets
sources {
// A glob moves only the sources.
["main"] = "lib/**/*.kt"
// A block sets more properties.
["integrationTest"] {
type = "test"
paths { "it/**/*.kt" }
}
}new Sources.SourceSetSpec { … } (avec import "elide:Sources.pkl" as Sources) est la forme longue de l’entrée. Les
chemins sont des globs ou des répertoires relatifs au projet ; un répertoire est parcouru récursivement.
Priorité
Chaque propriété déclarée remplace la convention pour cette propriété seulement.
| Propriété | Omise | Déclarée |
|---|---|---|
type | Déduit du nom | Toujours utilisé |
paths | L’arborescence conventionnelle pour ce nom | Utilisés tels quels |
resources | src/<name>/resources, s’il existe | Utilisées telles quelles |
dependsOn | Les source sets de test et d’exemple voient main | Utilisé tel quel ; vide signifie aucun |
type | Déduit de | Comportement |
|---|---|---|
test | test, tests | Exécuté par elide test ; résout testPackages. |
example | example, examples | Source set de production. |
source | tout autre nom | Source set de production. |
other | — | Source set de production. |
Les artefacts qui ne nomment aucune source empaquettent tous les source sets de production. Un source set déclaré dont
les chemins couvrent src/main ou src/test remplace ce source set conventionnel, si bien qu’aucun fichier n’est
compilé deux fois.
Dépendances et classpaths
Les source sets de production résolvent packages, modules, compileOnly, runtimeOnly et processors. Les
source sets de test ajoutent testPackages et les source sets dont ils dépendent. Un source set de test avec
dependsOn {} se compile et s’exécute sans les classes ni les ressources de main, mais résout toujours packages.
Voir Dépendances.
elide classpath # main:compile
elide classpath runtime # main:runtime
elide classpath test:runtime # [<source-set>:]<usage>elide classpath résout le classpath et l’affiche sur une ligne, entrées séparées par :. Usages : compile,
runtime, processor, modules, toolchain, provided ; toute autre valeur sort avec le code 2. L’installation
écrit aussi .dev/dependencies/m2/{compile,runtime,test,processors}.classpath.
Ressources
Sur la JVM, les ressources sont sur le classpath pendant les exécutions et les tests, et sont copiées dans les JAR.
sources {
["main"] {
resources {
"assets/banner.txt"
new {
from = "config/services"
into = "META-INF"
}
}
}
}Un chemin simple est copié à la racine de la sortie. from (un répertoire ou un fichier) est copié sous into :
config/services/app.Service devient META-INF/services/app.Service. Par défaut, into est la racine.
Artefacts
artifacts {
["app"] = new Jvm.Jar {} // every non-test source set
["lib"] = new Jvm.Jar { sources { "api" } }
}Les JAR de sources et de Javadoc suivent la même règle. Les resources d’un JAR s’ajoutent à celles de ses source
sets. Voir Assemblage JAR.
Langages
L’extension du fichier détermine le langage : .java, .kt, .js/.mjs/.cjs/.jsx,
.ts/.mts/.cts/.tsx, .py. Un source set avec Java et Kotlin lance les deux compilateurs ; un source set sans
l’un ni l’autre ne lance aucune compilation JVM. Les réglages du compilateur pour un source set vont dans le bloc du
langage, sous le nom du source set : jvm.java.sourceSets
(voir Compilateur Java).
Les scripts Kotlin (.kts) d’un source set comptent comme sources Kotlin, mais ne produisent pas de classes et leurs
types ne sont pas vérifiés.