2016-07-01 11 views
0

Ich habe solche Projektstruktur:Maven-Release-Plugin und Arquillian

Parent 
    ProjectA 
    ProjectB 

ProjectA erzeugt ein Ohr. Der auf Arquillian basierende Test von ProjectB hängt vom ProjektA ab (zusätzliche Bereitstellung mit ProjectA ear). Maven Installation Ziel funktioniert gut, aber release:prepare und release:perform sind - nicht. Das Maven-Release-Plugin auf einer der ersten Phasen erhöht die Version des Projekts. Und wenn ProjectB eine Bereitstellung von ProjectA Konstrukten kann es nicht ein Artefakt mit einer neuen Version finden (aber es existiert in Arbeitsplatz - nicht in lokalen Repo):

java.lang.RuntimeException: Could not invoke deployment method: public static org.jboss.shrinkwrap.api.spec.EnterpriseArchive com.....SchemaCreationTest.createFleetEmulator() 
[INFO] at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:434) 
[INFO] at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246) 
[INFO] at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:367) 
[INFO] at org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenRepositorySystem.resolveDependencies(MavenRepositorySystem.java:121) 
[INFO] at org.jboss.shrinkwrap.resolver.impl.maven.MavenWorkingSessionImpl.resolveDependencies(MavenWorkingSessionImpl.java:228) 
[INFO] at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.using(MavenStrategyStageBaseImpl.java:71) 
[INFO] at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withoutTransitivity(MavenStrategyStageBaseImpl.java:58) 
[INFO] at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withoutTransitivity(MavenStrategyStageBaseImpl.java:40) 

I Artefakte mit einem solchen Befehl beheben:

Maven.configureResolver().offline().loadPomFromFile("pom.xml").importRuntimeAndTestDependencies().resolve().withoutTransitivity().asResolvedArtifact(); 

PS mvn release:prepare funktioniert gut, wenn ich die Option dryRun einstelle.

Wie kann ich Artefakte auflösen, wenn Maven Release: Prepare funktioniert?

Antwort

1

Je nachdem, wie Ihre Testfälle strukturiert sind, können Arquillian-Tests als Integrationstests separat ausgeführt werden.
Bei Bedarf integriert die Maven-Fail-safe-Plugin:

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.19.1</version> 
       <configuration> 
        <parallel>methods</parallel> 
        <threadCount>1</threadCount> 
       </configuration> 
       <dependencies> 
        <dependency> 
         <groupId>org.apache.maven.surefire</groupId> 
         <artifactId>surefire-junit47</artifactId> 
         <version>2.19.1</version> 
        </dependency> 
       </dependencies> 
      </plugin> 
     </plugins> 
    </pluginManagement> 

    <plugins>... 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     <executions> 
      <execution> 
       <goals> 
        <goal>integration-test</goal> 
        <goal>verify</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

Ihre Testklassen umbenennen, so dass seine als Integrationstest nachgewiesen. I.e. Benennen Sie AcmeTest in AcmeIT um, dann werden Ihre Arquillian-Tests als Integrationstests ausgeführt, d. h. verwenden Sie mvn verify, um die Arquillian-Tests auszuführen.

Dies allein löst das Problem nicht. Als einfache Lösung können Sie -Darguments="-DskipITs" zu Ihrem mvn release:prepare hinzufügen, wenn dies der einzige Integrationstest ist, der ausgeführt wird, und Ihre Arquillian-Tests werden übersprungen. Sie können den Arquillian-Tests auch JUnit-Kategorien hinzufügen und auf dieser Ebene filtern. Weitere Informationen finden Sie unter maven-failsafe-plugin site.

Verwandte Themen