简体   繁体   English

maven-release-plugin和Arquillian

[英]maven-release-plugin and Arquillian

I have such project structure: 我有这样的项目结构:

Parent
  ProjectA
  ProjectB

ProjectA produces an ear. ProjectA产生耳朵。 The Arquillian based test of ProjectB depends on ear of the ProjectA (create additional deployment with ProjectA ear). ProjectB的基于Arquillian的测试取决于ProjectA的耳朵(使用ProjectA耳朵创建其他部署)。 Maven install goal works fine but release:prepare and release:perform are - not. Maven的安装目标工作正常,但release:preparerelease:perform是-并非如此。 The maven-release-plugin on a one of the first phases increases the version of the project. 第一个阶段之一中的maven-release-plugin增加了项目的版本。 And when ProjectB constructs a deployment of ProjectA it can't find an artifact with a new version (but it exists in workspace - not in local repo): 而且当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)

I resolve artifacts with such command: 我使用以下命令解决工件:

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

PS mvn release:prepare works fine if I set on the dryRun option. 如果我在dryRun选项上进行了设置,则PS mvn release:prepare可以正常工作。

How can I resolve artifacts when maven release:prepare works? 当maven release:prepare工作时,如何解决工件?

Depending on how your test cases are structured, having the Arquillian tests as integration tests allow them to be executed separately. 根据测试用例的结构,将Arquillian测试作为集成测试可以使它们分别执行。
If required, integrate the maven-failsafe-plugin: 如果需要,请集成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>

Rename your test class so that its detected as an integration test. 重命名测试类,以便将其检测为集成测试。 Ie rename AcmeTest to AcmeIT, then your arquillian tests will be executed as integration tests, ie use mvn verify to run the arquillian tests. 即,将AcmeTest重命名为AcmeIT,然后您的Arquillian测试将作为集成测试执行,即使用mvn verify运行Arquillian测试。

This in itself doesn't resolve the problem. 这本身并不能解决问题。 As a simple work around, if this is the only integration tests being executed, you can add -Darguments="-DskipITs" to your mvn release:prepare and your arquillian tests will be skipped. 作为一个简单的解决方法,如果这是唯一要执行的集成测试,则可以将-Darguments="-DskipITs"到您的mvn release:prepare ,您的Arquillian测试将被跳过。 You can also add JUnit categories to the arquillian tests and filter at that level. 您还可以将JUnit类别添加到Arquillian测试中并在该级别进行过滤。 More info is available on the maven-failsafe-plugin site . maven-failsafe-plugin站点上可以找到更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM