如何使用 Arquillian 的 ShrinkWrap 添加 Gradle testCompile 依赖项到 WebArchive?
How to add Gradle testCompile dependency to WebArchive using ShrinkWrap for Arquillian?
我的 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 兆字节,充满了测试 类.
提前致谢。
一般来说,虽然您使用的是 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 相关的问题吗?
我的 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 兆字节,充满了测试 类.
提前致谢。
一般来说,虽然您使用的是 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 相关的问题吗?