我有这样的项目结构:
Parent
ProjectA
ProjectBProjectA产生一只耳朵。基于Arquillian的ProjectB测试依赖于ProjectA的ear (使用ProjectA ear创建额外的部署)。release:perform install goal运行良好,但Maven和Maven则不行。第一阶段的maven-release-plugin增加了项目的版本。当ProjectB构建ProjectA的部署时,它无法找到具有新版本的工件(但它存在于工作区中,而不是本地存储库中):
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();如果我设置了dryRun选项,则mvn release:prepare可以正常工作。
当maven release:prepare工作时,我如何解决工件?
发布于 2016-11-07 14:10:39
根据您的测试用例的结构,将Arquillian测试作为集成测试允许它们单独执行。
如果需要,集成maven-failsafe-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>重命名您的测试类,以便将其检测为集成测试。例如,将AcmeTest重命名为AcmeIT,那么您的arquillian测试将作为集成测试执行,即使用mvn verify运行arquillian测试。
这本身并不能解决问题。作为一种简单的变通方法,如果这是唯一执行的集成测试,您可以将-Darguments="-DskipITs"添加到您的mvn release:prepare中,您的arquillian测试将被跳过。您还可以将JUnit类别添加到arquillian测试中,并在该级别进行过滤。有关更多信息,请访问maven-failsafe-plugin site。
https://stackoverflow.com/questions/38141704
复制相似问题