将所有Maven依赖项添加到Arquillian

如何将POM中的所有依赖项添加到arquillian?

Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies() .as(File.class); 

我找到了那条线,但是我在Maven中的红色是因为它找不到类。 我不知道我需要哪些依赖项。 还是有更好的方法?

添加Arquillian依赖项

将Arquillian依赖项添加到您的pom.xml

    org.jboss.arquillian arquillian-bom 1.1.8.Final import pom    

将ShrinkWrap解析器(Maven实现)添加到您的pom.xml

  org.jboss.shrinkwrap.resolver shrinkwrap-resolver-impl-maven test  

如果您使用的是JUnit,请将Arquillian JUnit容器添加到您的pom.xml

  org.jboss.arquillian.junit arquillian-junit-container test  

导入Maven依赖项

在测试类中,在使用@Deployment注释的方法中,使用以下行导入运行时依赖项:

 File[] files = Maven.resolver().loadPomFromFile("pom.xml") .importRuntimeDependencies().resolve().withTransitivity().asFile(); 

使用addAsLibraries(files)方法将依赖项添加到部署中:

 WebArchive war = ShrinkWrap.create(WebArchive.class) .addClass(MyClass1.class) .addClass(MyClass2.class) .addClass(MyClass3.class) .addAsLibraries(files); 

如果您使用的是JUnit,那么这就是您的测试类的样子

 import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; import java.io.File; @RunWith(Arquillian.class) public class MyTestClassWithMavenDependencies { @Deployment public static WebArchive createDeployment() { // Import Maven runtime dependencies File[] files = Maven.resolver() .loadPomFromFile("pom.xml") .importRuntimeDependencies() .resolve() .withTransitivity() .asFile(); // Create deploy file WebArchive war = ShrinkWrap.create(WebArchive.class) .addClass(MyClass1.class) .addClass(MyClass2.class) .addClass(MyClass3.class) .addAsLibraries(files); // Show the deploy structure System.out.println(war.toString(true)); return war; } // Create your tests here } 

注1:上述解决方案已经过Arquillian 1.1.8.Final测试。 检查文档中最新版本的Arquillian工件。

注意2:有关如何解决依赖关系的更多详细信息,请查看ShrinkWrap Resolvers文档 。

我和你有同样的错误。 这是因为收缩包装版本不正确。 请参阅第二段代码中的正确版本。

 package alehro.testgf2; import java.io.File; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import alehro.p1.C1; import alehro.p1.C2; @RunWith(Arquillian.class) public class Test1 { @Deployment public static Archive createTestArchive() { File[] libs = Maven.resolver().loadPomFromFile("pom.xml").importRuntimeAndTestDependencies().asFile(); WebArchive res = ShrinkWrap.create(WebArchive.class, "test.war"); for(File file : libs){ res.addAsLibrary(file); } res.addPackages(true, "alehro.p1"); return res; } @Test public void test1(){ //third party lib DateTimeFormatter inputDF = DateTimeFormat.forPattern("d MMM yyyy HH:mm:ss Z"); DateTime dt1 = inputDF.parseDateTime("28 Nov 2012 23:23:23 +04"); Assert.assertNotNull(dt1); //all classes from alehro.p1 Assert.assertEquals("Failure", "I'm C1", C1.getMyName()) ; Assert.assertEquals("Failure", "I'm C2", C2.getMyName()) ; } } 

我有一个严酷的时间解决maven依赖。 下面是工作解决方案,但我确信它可以更简化。

   joda-time joda-time 2.1   javax javaee-api 6.0 provided   junit junit 4.11 test   org.jboss.arquillian.junit arquillian-junit-container test   org.jboss.arquillian.container arquillian-glassfish-remote-3.1 test 1.0.0.CR3   org.jboss.shrinkwrap.resolver shrinkwrap-resolver-api 2.0.0-alpha-5 test   org.jboss.shrinkwrap.resolver shrinkwrap-resolver-impl-maven 2.0.0-alpha-5 test   org.jboss.shrinkwrap.resolver shrinkwrap-resolver-api-maven 2.0.0-alpha-5 test      org.jboss.shrinkwrap.resolver shrinkwrap-resolver-bom 2.0.0-alpha-5 import pom   org.jboss.arquillian arquillian-bom 1.0.3.Final import pom    

最初的想法是从这里: 如何将Maven工件添加到我的ShrinkWrap档案中?

这篇dzone文章使用ShrinkWrap Maven Resolver进行Arquillian测试 ,这可能很有用。 它表明:

  org.jboss.shrinkwrap.resolver shrinkwrap-resolver-impl-maven  

当你不知道它在哪个工件时,你可以找到一个类的另一种方法是使用search.maven.org 。 这是搜索您正在寻找的课程:

  • FC: “org.jboss.shrinkwrap.resolver.api.maven.Maven”

它显示了包含该类的工件。 但是,该类位于API jar中,您还需要上面提到的实现jar以及前面提到的文章。

expandwrap-resolver-impl-maven 2.0.0-beta-1或更高版本包含org.jboss.shrinkwrap.resolver.api.maven.Maven类。