2013-04-04 3 views
1

Je voudrais inclure (Maven) dépendances dans ma guerre tout en veillant à ce qu'ils sont pas dans le champ d'exécution ou de test.Comment inclure les dépendances uniquement dans ma guerre?

Le problème est le suivant:

  1. ya un certain nombre de pots (disons pot A, B et C) que j'ai besoin dans ma guerre. C'est à cause de l'utilisation de CDI.

  2. J'ai un certain nombre de tests d'intégration qui utilisent la guerre produite par le projet. Ces tests d'intégration sont des tests basés sur arquillian.

  3. Cependant, j'ai d'autres tests qui sont pas tests d'intégration qui seront affectés par l'inclusion des pots A, B et C sur le chemin de la classe.

+3

Voir les options principales [ici] (http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope). Il ne semble pas y en avoir un qui fasse ce que vous voulez. – OldCurmudgeon

+0

il n'y a pas d'option pour faire ce que vous voulez, ça n'a aucun sens de ne pas vouloir quelque chose dans la portée 'test' de toute façon. peut-être que si vous avez posté ce que vous essayez réellement de réaliser peut-être quelqu'un pourrait être en mesure d'offrir une solution. –

+0

@JarrodRoberson Merci! Pourriez-vous le soumettre comme réponse afin que je puisse le marquer comme tel? Quant à savoir si cela a du sens, dites-moi s'il vous plaît comment je peux créer une guerre pour un test arquillien sans que les dépendances ne nuisent aux autres tests? – Marco

Répondre

0

Bonnes options:

Ah! HA Il est possible d'exclure certaines dépendances de la phase de test en utilisant le plugin surefire. C'est décrit dans ce StackOverflow answer.

De cette façon, je peux créer ma guerre et ne pas avoir les dépendances dans le champ d'essai (merci Peter Mularien)!

Options Bad:

Il semble que le plug-in de montage de maven vous oblige à avoir des dépendances include également disponibles dans un périmètre de dépendance. Puisque test est la plus petite portée, il est impossible d'inclure une dépendance dans votre guerre sans qu'elle soit également disponible sur la portée de test du projet.

Le plugin de guerre Maven ne vous d'inclure les dépendances permettent pas (ou excluez).

Une autre autre option consiste à créer un second module « de distribution » qui comprend les dépendances nécessaires dans son pom. Cependant, cela signifie que le test arquillien fait alors référence à la guerre du build précédent - ce qui n'est pas idéal non plus.Encore une autre option consiste à utiliser Shrinkwrap pour créer un pot avec des tests et à utiliser la JVM pour exécuter le pot "test" - Je l'ai déjà fait lorsque j'ai eu besoin de tester mon code avec plusieurs ORM (sinon, avoir OpenJPA sur votre chemin est en conflit avec Hibernate sur votre chemin, par exemple). Mais cela déconnecte vos tests de votre framework de test (JUnit, TestNG, etc.) et rend les tests difficiles à déboguer.

0

Vous avez attribut avec plusieurs options: exécution, tests, décompiler, etc.

Par exemple:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>${org.slf4j.version}</version> 
    <scope>runtime</scope> 
</dependency> 

Plus vous pouvez lire here.

+0

Malheureusement, la portée * runtime * signifie que la dépendance est également disponible dans la portée * test *. S'il vous plaît relisez la question! – Marco

0

Vous pouvez spécifier le champ d'application dans la section des dépendances comme ci-dessous. Il peut être mentionné en tant que test, compilation ou exécution.

<dependency> 
     <groupId>org.springframework.integration</groupId> 
     <artifactId>org.springframework.integration.adapter</artifactId> 
     <version>1.0.3.RELEASE</version> 
     <scope>runtime</scope>    
    </dependency> 

Espérons que cela aide. Merci, KJ

+0

Comme je l'ai mentionné ci-dessus, * runtime * scope signifie que la dépendance est également disponible dans * test * scope, ce qui est précisément ce que je ne veux pas. – Marco

4

war n'est pas une portée de dépendance. Les étendues valides sont provided, compile, runtime, test, system. Vous pouvez en sélectionner un seul, ce sont les seules options et aucune d'elles ne peut être exclue de la portée test.

Questions connexes