どのようにPOMのすべての依存関係をarquillianに追加しますか?
Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies()
.as(File.class);
その行を見つけましたが、クラスが見つからないため、intellijでMaven
は赤です。必要な依存関係がわかりません。それとももっと良い方法がありますか?
_pom.xml
_にArquillian依存関係を追加します。
_<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.8.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
_
ShrinkWrapリゾルバー(Maven実装)を_pom.xml
_に追加します。
_<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<scope>test</scope>
</dependency>
_
JUnitを使用している場合は、Arquillian JUnitコンテナーを_pom.xml
_に追加します。
_<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
_
テストクラスの_@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);
_
_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のドキュメント を参照してください。
私はあなたと同じエラーがありました。これは、シュリンクラップのバージョンが正しくないためです。コードの2番目の部分で正しいバージョンを参照してください。
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の依存関係を解決するのに厳しい時間を費やしました。以下は解決策ですが、もっと簡単にできると思います。
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-glassfish-remote-3.1</artifactId>
<scope>test</scope>
<version>1.0.0.CR3</version>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-api</artifactId>
<version>2.0.0-alpha-5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<version>2.0.0-alpha-5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-api-maven</artifactId>
<version>2.0.0-alpha-5</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-bom</artifactId>
<version>2.0.0-alpha-5</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.0.3.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
オリジナルのアイデアはここからです MavenアーティファクトをShrinkWrapアーカイブに追加する方法
このdzoneの記事 ArquillianテストでのShrinkWrap Mavenリゾルバーの使用 役立つかもしれません。それは示唆しています:
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
</dependency>
クラスに含まれるアーティファクトがわからない場合にクラスを見つけるもう1つの方法は、 search.maven.org を使用することです。ここにあなたが探しているクラスの検索があります:
そのクラスを含むアーティファクトが表示されます。ただし、クラスはAPI jarにあり、前述の記事や前述の記事にあるように、実装jarも必要です。
Org.jboss.shrinkwrap.resolver.api.maven.Mavenクラスは、shrinkwrap-resolver-impl-maven 2.0.0-beta-1以降に含まれています。