将所有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类。