有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Arquillian的包覆面提取将Gradle testCompile依赖项添加到WebArchive?

我对我的gradle.build文件有以下依赖关系,我不想将其放在最后的war文件中,但我需要它以便在测试阶段运行Arquillian测试:

/* Snippet from build.gradle. */
testCompile 'org.seleniumhq.selenium:selenium-java:2.48.2'

如果我使用Maven,我可以编写如下内容:

File[] files = Maven.resolver().resolve("org.seleniumhq.selenium:selenium-java:2.48.2").withTransitivity().asFile();

但是,由于我使用的是Gradle resolver,我相信我无法做到:

@RunWith(Arquillian.class)
public abstract class ArquillianTestCase extends SeleniumTestCase {

    @Deployment
    public static WebArchive createDeployment() {

        /* Create the war file according to build.gradle. */
        WebArchive war = ShrinkWrap.create(EmbeddedGradleImporter.class)
                .forThisProjectDirectory().importBuildOutput()
                .as(WebArchive.class);

        /* Abstract test classes which depends on Selenium */
        war.addClasses(ArquillianTestCase.class, SeleniumTestCase.class);
        return war;
    }
}

有没有办法在Gradle身上做到这一点?如果我不添加上述依赖项,我的测试会在Selenium类上NoClassDefFoundError失败。但是,如果我将Selenium dependency更改为compile而不是testCompile,它会工作,但是我的war文件大小从3兆字节跳到20兆字节,充满了测试类

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    一般来说,尽管您使用的是Gradle,但您仍然可以使用那些maven部件,因为您的所有依赖项可能都在maven存储库中。然而,有时您可能需要显式定义额外的maven存储库,因为您没有设置它们的pom,并且包覆面提取无法自动设置它们

    你可以将你所提供的这两个电话组合成类似的东西:

    File[] files = Maven.resolver().resolve("org.seleniumhq.selenium:selenium-java:2.48.2").withTransitivity().asFile();
    
    WebArchive war = ShrinkWrap.create(EmbeddedGradleImporter.class)
                    .forThisProjectDirectory().importBuildOutput()
                    .as(WebArchive.class).addAsLibraries(files);
    

    当然,您必须为包覆面提取解析器maven相关模块添加依赖项

    testCompile 'org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api-maven:2.2.0'
    testCompile 'org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven:2.2.0'
    

    顺便说一句,阿奎利安石墨烯不会解决您同时使用硒和阿奎利安的问题吗