Question

Je compile mon programm contre JavaEE-api. Mais pour le test Junit je dois utiliser une implémentation spécifique comme le javaee.jar de GlassFish pour éviter des erreurs comme java.lang.ClassFormatError: attribut code Absent dans la méthode qui n'est pas natif ou abstrait dans le fichier de classe javax / persistance / persistance (voir aussi 1).

Alors évitez d'utiliser des méthodes qui ne sont disponibles dans l'application GlassFish, je veux compiler mon artefact avec l'api général, mais courir JUnit avec le pot de mise en œuvre. Mais les deux fournissent des classes et inferfaces égales nommées, de sorte que le chargeur de classe est en difficulté.

Quelle est la meilleure façon de résoudre ce problème? Puis-je résoudre ce problème avec Maven?

Merci beaucoup

Était-ce utile?

La solution

Je pense que cela est possible. En fait, en commençant par la version 2.0.9, Maven utilise l'ordre POM pour construire le chemin de classe, afin que vous puissiez le manipuler maintenant. Et si vous combinez cela avec Dépendance Portée, il devrait être possible d'obtenir ce que vous voulez. En pratique, si vous placez la dépendance javaee de GlassFish (avec test portée) avant la dépendance javaee-api, l'ancien doit être placé avant le dernier dans le classpath de test et donc utilisé par des tests unitaires tandis que le second sera utilisé lors de la compilation. En théorie, cela devrait fonctionner, mais il est un peu fragile, il doit être soigneusement documenté.

Quelque chose comme ça (avec un pot de GFv3 fictif):

<dependencies>
  <dependency><!-- this one will be first on the test classpath -->
    <groupId>org.glassfish</groupId>
    <artifactId>javaee</artifactId>
    <version>6.0</version>
    <scope>test</scope>
  <dependency>
  <dependency><!-- this one will be used during compile -->
    <groupId>javax.javaee-api</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
  <dependency>
  ...
</dependencies>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top