2016-07-01 17 views
0

我有這樣的項目結構:行家釋放小插件和的Arquillian

Parent 
    ProjectA 
    ProjectB 

項目A產生的耳朵。 ProjectB的基於Arquillian的測試取決於ProjectA的耳朵(使用ProjectA耳朵創建額外的部署)。 Maven安裝目標正常工作,但是release:preparerelease:perform不是。第一個階段之一的maven-release-plugin會增加項目的版本。而當項目B構建項目A的部署不能找到一個新版本的工件(但它存在於工作區 - 不是在本地回購):

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) 

我解決這樣的命令文物:

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

PS mvn release:prepare工作正常,如果我設置dryRun選項。

如何在Maven發佈時解析工件:準備工作?

回答

1

根據測試用例的結構,將Arquillian測試作爲集成測試允許它們分開執行。
如果需要,整合Maven的故障保護,插件:使其作爲一個集成測試檢測

<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> 

重命名您的測試類。即將AcmeTest重命名爲AcmeIT,然後您的Arquillian測試將作爲集成測試執行,即使用mvn verify來運行arquillian測試。

這本身並不能解決問題。作爲一個簡單的解決方法,如果這是正在執行的唯一集成測試,則可以將-Darguments="-DskipITs"添加到您的mvn release:prepare,並且您的arquillian測試將被跳過。您還可以將JUnit類別添加到arquillian測試並在該級別進行過濾。更多信息請見maven-failsafe-plugin site