2

我对我的文件有以下依赖项,我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 解析器,我相信我不能这样做:

@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 上做到这一点?如果我不添加上述依赖项,我的测试会NoClassDefFoundError在 Selenium 类上失败。但是,如果我将 Selenium 依赖项更改为compile而不是testCompile,它可以工作,但是我的 war 文件大小从 3 兆字节跳到 20 兆字节,并充满了测试类。

提前致谢。

4

1 回答 1

1

通常,尽管您使用的是 Gradle,但您仍然可以使用那些 maven 部分,因为可能您所有的依赖项都在 maven 存储库中。但是,有时您可能需要明确定义额外的 maven 存储库,因为您没有设置它们的 pom 并且 ShrinkWrap 无法自动设置它们。

您可以将调用提供的这两个组合成与此类似的东西:

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

当然,您必须为 ShrinkWrap Resolver 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'

顺便说一句,Arquillian Graphene 不会解决您与使用 Selenium 和 Arquillian 相关的问题吗?

于 2015-12-17T23:22:12.320 回答