Wie zu machen Anlegestelle-maven-Plugin deploy ein Krieg, der von einem Repository abgerufen wird?
-
30-09-2019 - |
Frage
Ich gründe ein Integrationstestmodul für eine gute Größe Webprojekt auf. Die Integration Testmodul ist selbst von dem Web-Projekt getrennt, und es hat seine eigene pom.
Die Idee ist es, die Maven-soapui-Plugin zu verwenden, Anfragen zu senden und die Antwort zu überprüfen. Einrichten des soapui-Plugin ist keine Hektik. Allerdings ist ich mit, herauszufinden, Probleme, wie ich der Anlegestelle-maven-Plugin sagen kann, einen Krieg von einer Remote-Repository zu implementieren.
Wenn ich richtig verstanden habe, die Anlegestelle-maven-plugin hat eine Eigenschaft namens ‚
Ich habe gehört, dass ich die Versammlung Maven verwenden Plugin den Krieg aus einem Repository über die Projekte artifactId zurückzuholen, aber ich bin noch herausfinden, wie ich über das Tun so gehen würde.
Hier ist eine Zusammenfassung dessen, was ich will:
- Rufen Sie einen bestimmten Krieg aus einem Repository oder dergleichen, beispielsweise über seine artifactId.
- Bereitstellen dieser Krieg zur Anlegestelle-maven-plugin (Ziel deploy-Krieg?)
- get Maven-soapui-Plugin Tests auszuführen und die Ergebnisse zurück in der Integration Testphase zu melden.
Ich bin ziemlich sicher, dass muss ich Schritt 3 überdacht, aber ich bin sehr unsicher, wie Schritt zu erreichen. 1 und 2
Jede Hilfe wird sehr geschätzt
Lösung
Es ist vielleicht möglich Gebrauch dependency:copy
den Krieg abzurufen, entpacken und das Ganze zum Laufen zu bringen mit der Maven Jetty Plugin, aber dies wäre Hacky und irgendwie hässlich. Eine sauberere Lösung wäre, die Maven Cargo-Plugin zu verwenden, und das ist mein Vorschlag. Im Folgenden wird eine Probe POM zeigt, wie eine WAR-Artefakt mit seinen Koordinaten abrufen und wie es auf einem eingebetteten Jetty Container mit Fracht implementieren:
<dependencies>
<dependency>
<groupId>war group id</groupId>
<artifactId>war artifact id</artifactId>
<type>war</type>
<version>war version</version>
</dependency>
...
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<configuration>
<!-- Container configuration -->
<container>
<containerId>jetty6x</containerId>
<type>embedded</type>
</container>
<!-- Configuration to use with the container or the deployer -->
<configuration>
<deployables>
<deployable>
<groupId>war group id</groupId>
<artifactId>war artifact id</artifactId>
<type>war</type>
<properties>
<context>war context</context>
</properties>
</deployable>
</deployables>
</configuration>
<!-- Don't wait, execute the tests after the container is started -->
<wait>false</wait>
</configuration>
<executions>
<execution>
<id>start-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
Schließlich, so bindet die soapui Plugin auf der integration-test
Phase.
Andere Tipps
Ich tue das Gleiche, John, aber ich habe einen anderen Ansatz mit dem Jetty Plugin. Ich denke, das Endergebnis ist das gleiche. Ich entwickle eine Integration-Test-Suite gegen mehr Web-Service-WARs laufen. Ich verwende dependency:copy
in der package
Phase und dann einer Liste von <contextHandler/>
s für maven-jetty-plugin
konfiguriert:
<project>
…
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-wars</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/wars-to-be-tested</outputDirectory>
<stripVersion>true</stripVersion>
<artifactItems>
…
<artifactItem>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>version</version>
<type>war</type>
</artifactItem>
…
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.1.3.v20100526</version>
<configuration>
…
<contextHandlers>
…
<contextHandler implementation="org.mortbay.jetty.plugin.JettyWebAppContext">
<war>${project.build.directory}/wars-to-be-tested/artifactId.war</war>
<contextPath>/context</contextPath>
</contextHandler>
</contextHandlers>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>stop</goal>
<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>
</project>
Ich würde es vorziehen, um die verschiedenen Kriege als Abhängigkeiten zu erklären und dann dependency:copy-dependencies
verwenden, um das wars-to-be-tested
Verzeichnis einzurichten; dies wäre der Maven Reaktor erlauben, um herauszufinden, dass es meine Integration-Testmodul nach den Kriegen bauen muss, um es zu testen werde. Das Problem, das ich war lief in, dass die Jetty Plugin gedacht, dass ich auf „Overlay“ alle Kriege wollte, als Abhängigkeiten (ein Konzept, das würde ich noch nie gehört, bis ich sah es passieren) aufgeführt wurden; Ich weiß nicht, ob damit das weh alles hätte passieren, aber ich mochte es nicht, so dass ich mit dem dependency:copy
Verfahren ging.
Das ist nur eine Alternative zum Transport verwenden. Ich werde ein Blick in dem ich selbst, aber ich wollte nur, es zu tun eine andere Art und Weise zur Verfügung zu stellen.