Pergunta

Eu determinei que dois JAXB plugins para Maven 2 existem, com algumas configurações diferentes.

O primeiro é da Sun: http://jaxb.dev.java.net / jaxb-maven2-plug-in / , o outro a partir de Mojohaus: http://mojohaus.org / jaxb2-maven-plugin /

Qual destes dois plugins pode ser recomendado?


Graças Matt. No meu projeto de pesquisa pouco, descobri que há muito outro plugin vindo dos sunners:

<groupId>com.sun.tools.xjc.maven2</groupId>  
<artifactId>maven-jaxb-plugin</artifactId>  

e que um:

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>

e ainda o de Codehouse.

Foi útil?

Solução

Vamos resumir. Nós temos:

  1. maven-jaxb2-plugin ( https://github.com/highsource/maven-jaxb2-plugin )
  2. maven-jaxb-plugin ( https://jaxb.dev.java.net/jaxb-maven2-plugin/ )
  3. jaxb2-maven-plugin ( https://github.com/mojohaus/jaxb2-maven-plugin )

Com base nos comentários de esta discussão , eu sempre usei a maven-jaxb2-plugin (ie plug-in # 1 ):

Em relação ao org.jvnet.jaxb2.maven2: maven-jaxb2-plugin versus com.sun.tools.xjc.maven2: maven-jaxb-plugin, do meu ponto de vista é definitivamente o primeiro ( http://maven-jaxb2-plugin.java.net/ ).

Este plugin tem muito mais recursos do que com.sun.tools.xjc.maven2: maven-jaxb-plugin, o desenvolvimento está ativa. Finalmente, Eu sou um dos autores :) e eu diria mantemos contato com os desenvolvedores JAXB e os usuários e reagir às latests características / solicitações.

E, de fato, o plugin # 2 não é muito ativo (morto?). E porque eu sempre fui feliz com # 1, eu nunca usei plug-in # 3 por isso não posso dizer nada sobre isso. Apenas no caso, aqui é uma configuração trabalhando para Plugin # 1:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <inherited>true</inherited>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Outras dicas

Eu tentei recentemente os três plug-ins mencionados acima (incluído aqui também):

  1. the-jaxb2-plugin Maven ( http://maven-jaxb2-plugin.java.net/ )
  2. the-jaxb-plugin Maven ( https://jaxb.dev.java. / net jaxb-maven2-plugin /)
  3. The Maven-jaxb2-plugin ( http://mojo.codehaus.org/jaxb2- maven-plugin / )

Acabei usando uma quarta opção: O CXF XJC Maven Plugin http://cxf.apache.org/cxf-xjc-plugin.html

Se eu estou faltando alguma coisa que eu gostaria de saber, mas a configuração parecia mais simples para o que eu estava tentando fazer e mais facilmente me permitiu lidar com geração de classe duplicado dentro do mesmo namespace - semelhante a esta pergunta: existe uma maneira de lidar com definições de elementos duplicados em vários arquivos .xsd em JAXB? .

I tem agora o controle granular sobre cada XSD de entrada e de pacote java correspondente; aqui está um exemplo de configuração perto do que estou usando.

 <plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-xjc-plugin</artifactId>
    <version>2.3.0</version>
    <configuration>
        <extensions>
            <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension>
        </extensions>
    </configuration>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>xsdtojava</goal>
            </goals>
            <configuration>
                <sourceRoot>${basedir}/target/generated-sources/src/main/java</sourceRoot>
                <xsdOptions>
                    <xsdOption>
                        <xsd>src/main/resources/schema/commands.xsd</xsd> <!--shares a common.xsd file causing the conflicts-->
                        <packagename>com.foo.bar.commands</packagename>
                    </xsdOption>
                    <xsdOption>
                        <xsd>src/main/resources/schema/responses.xsd</xsd>
                        <packagename>com.foo.bar.responses</packagename>
                    </xsdOption>
                </xsdOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

Eu sou o autor da maven-jaxb2-plugin .

The Maven-jaxb2 plugins atualmente usa JAXB 2.1. Nas próximas versões vamos também fornecer JAXB 2.0 e JAXB 2.2 versões.

Quanto a "que plugin é melhor" discussão, verificar as características , decidir-se . Deixe-me saber se você perder alguma funcionalidade.

  • maven-jaxb2-plugin usa a implementação de referência JAXB pela Oracle / Sun
  • cxf e jaxb2-maven-plugin usar o Apache Xerces

Em uma ligeira tangente: havia um problema com o uso do Maven-jaxb2-plugin com Eclipse Indigo que eu postei aqui . Uma correção (extensão) recentemente se tornou disponível.

Este não é para discordar, em tudo, com a recomendação do Maven-jaxb2-plugin sobre maven2-jaxb-plugin. Eu não sei, mas espero que maven2-jaxb-plugin tem o mesmo problema, provavelmente por resolver.

Eu acho que um é para a especificação JAXB original eo codehaus é para a especificação JAXB 2.1 (e, se o dev.java.net iria carregar algum tempo deste século, eu seria capaz de dizer com certeza) .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top