enhancement
major
minor
major
minor
major
#29705
Workspace/PathInfo: web-fragment.war eines Moduls wird nicht gefunden, wenn Jar und Fragment aus verschiedenen lokalen Maven-Repositories aufgelöst werden (maven.repo.local.tail)
Fehlerbild
Eine Anwendung, die mit einem geschichteten lokalen Repository gebaut und gestartet wird (-Dmaven.repo.local=<workspace>/.m2/repository -Dmaven.repo.local.tail=~/.m2/repository), startet ohne die Konfiguration einzelner Abhängigkeiten. Beispiel estate-agent mit tl-ai-core:2.0.2 und tl-chat:2.0.2:
ERROR ApplicationConfig - Configuration descriptor 'com.top_logic.basic.module.ManagedClass$ServiceConfiguration' has no property 'agents', valid properties are: [class, configuration-interface, dependencies] at file:///WEB-INF/autoconf/overlay-agents.config.xml line 9 column 13.
Die Anwendung konfiguriert per autoconf den Dienst TopLogicAgentDefinitions, dessen Deklaration (tl-ai-core.conf.config.xml) im -web-fragment.war von tl-ai-core liegt. Dieses Fragment fehlt in Using resource paths: […], ebenso das von tl-chat; das Fragment von tl-ai-vector-index ist enthalten.
Ursache
PathInfo.doAddJar(File) (com.top_logic.basic.core.workspace) sucht das Fragment ausschließlich im Verzeichnis des Jars (<jar-name>-web-fragment.war daneben). Maven löst Jar und Fragment aber als getrennte Artefakte auf, jedes im ersten Repository der Kette, in dem es vorhanden ist:
- tl-ai-core-2.0.2.jar lag bereits im Tail-Repository ~/.m2/repository, das Fragment dort nicht.
- Das Fragment wurde daher ins Workspace-Repository heruntergeladen; das Jar wurde aus dem Tail genommen.
- Neben dem Jar liegt kein Fragment → das Modul wird ohne seine Web-Ressourcen und Konfiguration eingebunden, ohne Fehlermeldung.
tl-ai-vector-index war in keinem Repository vorhanden und wurde komplett (Jar und Fragment) ins Workspace-Repository geladen, deshalb wird es gefunden.
Dasselbe trifft jede Anwendung und jeden Agenten-Worktree mit maven.repo.local.tail, sobald ein freigegebenes Modul mit Fragment nur teilweise im Tail liegt.
Erwartetes Verhalten
Das Fragment eines Moduls wird unabhängig davon gefunden, aus welchem Repository der Kette das Jar stammt. Fehlt das Fragment eines Moduls, das eines erwarten lässt, wird eine Warnung protokolliert, statt das Modul still ohne Konfiguration einzubinden.
Lösung
PathInfo sucht das Fragment eines Jars in dieser Reihenfolge:
- neben dem Jar (wie bisher; deckt den Fall eines einzelnen lokalen Repositories, z. B. Eclipse/m2e, ab),
- im Koordinatenverzeichnis des Artefakts (<groupId als Pfad>/<artifactId>/<version>, ermittelt aus dem Eintrag META-INF/maven/<groupId>/<artifactId>/ des Jars) in maven.repo.local und anschließend in jedem Eintrag von maven.repo.local.tail (kommasepariert), also in derselben Reihenfolge, in der Maven die Kette auflöst.
Enthält das Jar die Markierung META-INF/tl-module-with-resources (von tl-parent-core in jedes TL-Modul geschrieben) und wird kein Fragment gefunden, wird eine Warnung mit dem Jar und den durchsuchten Repositories protokolliert.