La gestion de JAXB-classes générées dans un projet Maven
J'ai un Maven du projet, dans lequel j'ai essayer d'ajouter quelques JAXB classes généré automatiquement par le "jaxb2-maven-plugin" plugin Maven. Cependant, ma première coupe a moi dans une dépendance circulaire boucle:
- Parce que ces JAXB classes ne sont pas générés encore, mes autres sources de référence qui ont des erreurs de compilation.
- Parce que ces autres sources ont des erreurs de compilation, ces JAXB classes ne pas générée.
Il semble comme il y a deux possibilités évidentes pour la résolution de ce:
- Commentaire-les références rompues, de sorte que le projet est construit et la JAXB classes sont générées automatiquement. Puis copier ceux générés sources de
/target
en/src/main/java
, de sorte que les références à eux de ne pas provoquer des erreurs de compilation. - Créer un tout autre projet, composé de rien, mais le JAXB choses. L'inclure comme une dépendance dans mon projet principal.
Suis-je manqué quelque chose? Option #1 semble carrément ridicule... qui vient de ne peut pas être la façon dont les gens utilisent JAXB. Option #2 semble plus rationnel, mais encore assez inefficaces et fastidieux. J'ai vraiment besoin de prendre sur les frais généraux d'un tout autre projet pour utiliser les JAXB?
Sont toutes plus élégantes les approches que les développeurs utilisent pour faire référence à JAXB-classes générées dans le même projet où le plugin Maven pour les génère?
Mise à JOUR: à la demande, voici la partie pertinente de mon POMPON:
<build>
<plugins>
<plugin>
<!-- configure the compiler to compile to Java 1.6 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- The name of your generated source package -->
<packageName>com.mypackage</packageName>
</configuration>
</plugin>
</plugins>
</build>
Quand je lance mvn clean package
, je vois mon JAXB sources générées sous la /target
sous-répertoire. Cependant, ceux générés sources ne sont pas automatiquement ajoutés dans le chemin de la phase de compilation.
POST-RÉSOLUTION de mise à JOUR: Il s'avère que ma compilation questions avaient plus à voir avec le fait que je courais dans Eclipse, et son Maven integration a quelques problèmes avec les "jaxb2-maven-plugin". Voir cette question StackOverflow pour plus de détails sur ce problème et sa résolution.
OriginalL'auteur Steve Perkins | 2012-08-15
Vous devez vous connecter pour publier un commentaire.
je vous suggère de diviser jaxb-classes générées (api) et votre BL classes (mise en œuvre) à maven 2 projets distincts pom.xml pour chaque, et la racine principale pom.xml avec l'ordre de compilation. de cette façon, vous serez en mesure de construire api.jar puis maven va l'installer à l'intérieur du local repo, et après que vous pouvez l'utiliser comme la dépendance de votre mise en œuvre. donc, il ressemble:
OriginalL'auteur Denis Zevakhin
Comment avez-vous configuré votre jaxb plugin maven? Normalement, il s'exécute dans le generate-sources du cycle de vie, ce qui vient avant la compilation du cycle de vie. Si votre JAXB classes générées devraient déjà être là quand votre propre code sera compilé, Maven met dans target/generated-sources et met que dans le classpath.
Modifier:
C'est mon code que nous utilisons au travail (et qui fonctionne comme prévu):
Apparemment, nous utilisons encore une autre jaxb plugin... (voir aussi ce fil: Différence de Maven JAXB plugins).
OriginalL'auteur Nicolas Mommaerts
Peut-être essayer d'utiliser le
maven-jaxb2-plugin
à la place:La réponse de dfuse est correct, qu'. Plugin devrait générer des sources, avant la compilation, et le résultat de la source de génération sera sur le chemin de la classe. J'ai testé avec les deux plugins. Est-il possible pour vous pour poster votre schéma, ou au moins le schéma pour le type que votre code est de ne pas ramasser sur le chemin de la classe?
Correction, je n'utilise pas ce plugin (bien que j'ai essayé). J'ai posté mon code dans ma réponse.
OriginalL'auteur davidfmatheson