Ich habe ein Maven-Projekt, das eine JAR-Datei erzeugt, die in einem Webdienst verwendet werden soll. Es hat Integrationstests, die das jetty-maven-plugin
verwenden, um zu laufen.Integrationsprüfung Maven-Gefäß in einem Jetty-Container
Um die Integrationstests für die kompilierte JAR-Datei auszuführen, musste ich eine Abhängigkeit mit <systemPath>${project.build.directory}/${project.build.finalName}.${project.packaging}</systemPath>
erstellen. Die Integrationstests laufen so, wie ich es mir erhofft hatte, mit der kompilierten JAR-Datei und dem korrekten Erstellen der Web-App aus dem Verzeichnis src/test
.
Also in Bezug auf diese Projekte bauen, funktioniert diese Einrichtung sehr gut.
Das Problem besteht darin, dass die POM-Datei, die während des Freigabevorgangs bereitgestellt wird, immer noch die systemPath
-Abhängigkeit hat. Dies bedeutet, dass Projekte, die der Jar verwenden, einen Fehler während des Builds melden. Der Fehler besagt, dass die JAR-Datei "einen absoluten Pfad angeben muss". Diese Builds schlagen nicht fehl, aber die Logs sind unübersichtlich und irreführend.
Ich suche diese systemPath
aus dem POM zu entfernen, die in unserem Maven-Repository bereitgestellt wird. Wie können wir das tun?
Als Referenz ist hier der relevante Teil des Projekts POM.
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.0.7.v20131107</version>
<configuration>
<webAppSourceDirectory>${project.basedir}/src/test/webapp</webAppSourceDirectory>
<classesDirectory>${project.build.testSourceDirectory}</classesDirectory>
<useTestClasspath>true</useTestClasspath>
</configuration>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
<scope>system</scope>
<systemPath>${project.build.directory}/${project.build.finalName}.${project.packaging}</systemPath>
</dependency>
</dependencies>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Vielen Dank für die Antwort. Der Integrationstest läuft als Teil der Maven 'verify'-Phase, die vor der 'install'-Phase im Lebenszyklus abläuft. Also das würde nicht funktionieren für die Verwendung von zur Verfügung gestellt, oder? –
@DavidV Das stimmt, aber Sie könnten das [maven-install-plugin] (https://maven.apache.org/plugins/maven-install-plugin/) an eine frühere Phase, 'pre-integration-test' binden zum Beispiel. –
Ich habe zu '$ {project.build.testOutputDirector}}' gewechselt und ' Laufzeit ' verwendet. Dann konnte ich den 'systemPath' entfernen und alles funktioniert gut. –