2010-01-04 4 views
3

J'essaye d'utiliser un plugin jaxb pour insérer une interface dans un élément de choix générant les classes de maven. Le problème est que je ne peux pas sembler comprendre comment faire de maven, le référentiel n'est pas clair de la documentation et le seul exemple (ci-dessous) ne fonctionne pas, il semble ignorer le plugin (maven ne signale pas erreur de ne pas le trouver) ou le plug-in ne dispose pas de tous les adds-ons qui figurent actuellement dans la documentation du projet:Comment utiliser les plugins jaxb_commons de maven

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.6.1</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <generatePackage>br.com.wonder.nfe.xml</generatePackage> 
     <args> 
      <arg>-Xifins</arg> 
     </args> 
     <plugins> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>basic</artifactId> 
       <version>0.4.1.5</version> 
      </plugin> 
     </plugins> 
    </configuration> 
</plugin> 

j'avoir dans la pom racine:

<pluginRepositories> 
    <pluginRepository> 
     <id>maven2-repository.dev.java.net</id> 
     <url>http://download.java.net/maven/2</url> 
    </pluginRepository> 
    <pluginRepository> 
     <id>maven-repository.dev.java.net</id> 
     <name>Java.net Maven 1 Repository (legacy)</name> 
     <url>http://download.java.net/maven/1</url> 
     <layout>legacy</layout> 
    </pluginRepository> 
</pluginRepositories> 

course qui donne :

Erreur lors de la définition des options CmdLine '[-Xifins, -episode,/home /administrador/JavaApp/wnfe3/wnfe-ejb/target/generated-sources/xjc/META-INF/sun-jaxb.episode] '!

erreur intégrée: paramètre non reconnu -Xifins

Répondre

1

Je ne suis pas sûr que ce soit le « droit » façon de résoudre cela, mais, ce que je l'ai fait. Tout d'abord, téléchargez le plugin d'insertion d'interface xjc-if-ins.jar de https://jaxb2-commons.dev.java.net/interface-insertion/xjc-if-ins.jar (impossible de trouver un fichier contenant IfInsertPluginImpl.class dans le référentiel java.net maven).

Ensuite, installez le pot dans le référentiel local:

mvn install:install-file -DgroupId=org.jvnet.jaxb2_commons \ 
         -DartifactId=xjc-if-ins \ 
         -Dversion=1.0-SNAPSHOT \ 
         -Dpackaging=jar \ 
         -Dfile=xjc-if-ins.jar 

Enfin, ajoutez le pot comme une dépendance de la maven-jaxb2-plugin dans la section plugin:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.jvnet.jaxb2.maven2</groupId> 
     <artifactId>maven-jaxb2-plugin</artifactId> 
     <version>0.6.2</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>generate</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <extension>true</extension> 
     <args> 
      <arg>-Xifins</arg> 
     </args> 
     <plugins> 
      <plugin> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
      <artifactId>basic</artifactId> 
      <version>0.4.1.5</version> 
      </plugin> 
     </plugins> 
     </configuration> 
     <dependencies> 
     <dependency> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
      <artifactId>xjc-if-ins</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
     </dependencies> 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 

Comme je l'ai dit, cela est peut-être pas le moyen le plus propre de configurer le plugin jaxb2 pour utiliser le plugin d'insertion d'interface mais, avec cette configuration, l'objectif generate ne se plaint pas de l'extension -Xifins.

+0

On dirait que il n'y a vraiment aucun moyen de le faire sans y ajouter le pot dans le dépôt local, je rempli un problème pour cela, merci –

+0

je suis d'accord, nous ne devrait pas avoir à faire ce truc manuel et ce pot devrait 1. être disponible dans le dépôt java.net 2. devrait être ajouté aux dépendances de plugin. Oh, n'oublie pas d'accepter cette réponse :) –

+0

As-tu eu de la chance pour que ça marche avec wsimport? – Sionide21

4

Malheureusement, il semble que le plugin d'injection d'interface ne soit plus bien supporté. En fait, j'ai de la difficulté à trouver le fichier JAR à télécharger.

Heureusement, le JAXB2 Basics Plugins fournit un mécanisme similaire pour ajouter une interface aux stubs JAXB générés (voir le Inheritance plugin).

Le plugin JAXB2 Basics est disponible dans le référentiel java.net Maven.

Utilisation du plug-in d'héritage, votre POM ressemblera:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.jvnet.jaxb2.maven2</groupId> 
     <artifactId>maven-jaxb2-plugin</artifactId> 
     <version>0.6.2</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>generate</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <extension>true</extension> 
     <args> 
      <arg>-Xinheritance</arg> 
     </args> 
     <plugins> 
      <plugin> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics</artifactId> 
       <version>0.5.3</version> 
      </plugin> 
     </plugins> 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 

Le Inheritance plugin documentation a un exemple de ce que votre JAXB Manchettes ressemblerait. Pour votre commodité, j'ai reproduit l'exemple ci-dessous:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" 
    jaxb:version="2.1" 
    jaxb:extensionBindingPrefixes="inheritance"> 

    <!-- ... --> 

    <xs:complexType name="WillBeMadeCloneableType"> 
     <xs:annotation> 
      <xs:appinfo> 
       <inheritance:implements>java.lang.Cloneable</inheritance:implements> 
      </xs:appinfo> 
     </xs:annotation> 
     <!-- ... --> 
    </xs:complexType> 
    <!-- ... --> 
</xs:schema>