Comment ajoutez-vous toutes les dépendances du POM à arquillian?
Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies()
.as(File.class);
J'ai trouvé cette ligne, mais Maven
est rouge dans intellij car il ne trouve pas la classe. Je ne sais pas de quelles dépendances j'ai besoin. Ou y a-t-il de meilleurs moyens?
Ajoutez des dépendances Arquillian à votre pom.xml
:
<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>
Ajoutez le résolveur ShrinkWrap (implémentation Maven) à votre pom.xml
:
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<scope>test</scope>
</dependency>
Si vous utilisez JUnit, ajoutez le conteneur Arquillian JUnit à votre pom.xml
:
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
Dans votre classe de test, dans la méthode annotée avec @Deployment
, importez les dépendances d'exécution avec la ligne suivante:
File[] files = Maven.resolver().loadPomFromFile("pom.xml")
.importRuntimeDependencies().resolve().withTransitivity().asFile();
Et ajoutez les dépendances à votre déploiement en utilisant la méthode 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
}
Note 1: La solution ci-dessus a été testée avec Arquillian 1.1.8.Final
. Vérifiez la version la plus récente des artefacts Arquillian sur le documentation .
Note 2: Pour plus de détails sur la résolution des dépendances, consultez la documentation de ShrinkWrap Resolvers .
J'ai eu la même erreur que toi. C'est à cause de versions incorrectes de shrinkwrap. Voir les versions correctes dans le deuxième morceau de code.
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()) ;
}
}
J'ai eu du mal à résoudre les dépendances maven. Vous trouverez ci-dessous une solution de travail, mais je suis sûr qu’elle peut être simplifiée davantage.
<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>
L'idée originale vient d'ici: Comment ajouter des artefacts Maven à mes archives ShrinkWrap?
Cet article dzone Utilisation du résolveur ShrinkWrap Maven pour les tests Arquillian qui pourrait être utile. Ça suggère:
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
</dependency>
Une autre façon de trouver une classe sans savoir quel artefact est en cours consiste à utiliser search.maven.org . Voici une recherche pour la classe que vous recherchez:
Il montre les artefacts contenant cette classe. Cependant, la classe est dans un fichier jar de l'API et vous souhaiterez également le fichier d'implémentation tel que mentionné ci-dessus et dans l'article susmentionné.
La classe org.jboss.shrinkwrap.resolver.api.maven.Maven est incluse dans shrinkwrap-resolver-impl-maven 2.0.0-beta-1 ou version ultérieure.