Diferença de plugins Maven JAXB

126

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

Um é da Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , o outro da Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

Qual desses dois plugins pode ser recomendado?


Obrigado Matt. No meu pequeno projeto de pesquisa, descobri que há outro plugin vindo dos sunners:

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

e aquele:

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

e ainda o da Codehouse.

cuh
fonte

Respostas:

104

Vamos resumir. Nós temos:

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

Com base nos comentários deste tópico , eu sempre usei o maven-jaxb2-plugin (ou seja, o plugin # 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 possui muito mais recursos do que com.sun.tools.xjc.maven2: maven-jaxb-plugin, o desenvolvimento está ativo. Finalmente, sou um dos autores :) e eu diria que mantemos contato com desenvolvedores e usuários do JAXB e reagimos aos recursos / solicitações mais recentes.

E, de fato, o plug-in # 2 não é muito ativo (morto?). E como sempre fui feliz com o número 1, nunca usei o plug-in nº 3, por isso não posso dizer nada sobre isso. Por precaução, aqui está uma configuração funcional para o plug-in # 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>
Pascal Thivent
fonte
1
Thx para a configuração. No final, eu uso o plugin codehouse, que me oferece os mesmos recursos para minhas necessidades. Apenas a sintaxe difere tanto quanto eu vi.
cuh 16/03/10
E o ws.apache.org/jaxme/mp, mencionado diretamente no site do Maven?
rcl 19/07/10
1
@rcl: Não posso dizer muito sobre isso, mas como não é atualizado há mais de quatro anos, não tenho certeza se o usaria. Estou feliz com o maven-jaxb2-plugin .
Pascal Thivent
1
Quanto ao número 1, o site que hospeda a documentação parece estar inativo hoje. confluence.highsource.org/display/MJIIP/User+Guide Este projeto está ativo?
Rd #
2
O @Gregor maven-jaxb2-pluginagora está hospedado no GitHub . A documentação está no wiki .
Lexicore
44

Recentemente, tentei os três plug-ins mencionados acima (também incluídos aqui):

  1. o maven-jaxb2-plugin ( http://maven-jaxb2-plugin.java.net/ )
  2. o maven-jaxb-plugin ( https://jaxb.dev.java.net/jaxb-maven2-plugin/)
  3. o jaxb2-maven-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 no JAXB? .

Agora tenho controle granular sobre cada XSD recebido e o pacote java correspondente; Aqui está um exemplo de configuração próxima à 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>
bn.
fonte
1
Excelente sugestão. Eu apenas tentei isso e funcionou como um encanto - obrigado.
SGB
Alguém sabe se existe um conector Eclipse m2e para isso? Eu pesquisei no Google e não encontrei. Espero que eu tenha perdido, porque gosto dessa opção.
user944849
O cxf-xjc-plugin possui o conector Eclipse a partir de 2017. Mas não vejo o problema de gerar o código executando manualmente o maven e adicionando o diretório de origem. De fato, minha experiência é que é melhor deixar projetos fechados com classes geradas (JAXB, XMLBeans) e depender de forma binária (jar). Em seguida, o IDE funciona mais rapidamente e não há problemas no caminho de classe (especialmente no XMLBeans).
Vytenis Bivainis
Parece que o CXF XJC Maven Plugin suporta apenas a geração de fontes Java a partir do esquema e não é capaz de gerar esquemas a partir de anotações Jaxb.
alebu 2/01
19

Eu sou o autor do maven-jaxb2-plugin .

O maven-jaxb2-plugin atualmente usa o JAXB 2.1. Nas próximas versões, também forneceremos as versões JAXB 2.0 e JAXB 2.2.

Quanto à discussão sobre "qual plugin é melhor", verifique os recursos e decida-se. Deixe-me saber se você perder alguma funcionalidade.

lexicore
fonte
É possível gerar esquemas de classes usando o plugin maven-jaxb2? Ou o plugin suporta apenas xsd-> Java?
Jörg 21/05
Atualmente, é apenas xsd-> java.
Lexicore 22/05
O nome 'maven-jaxb2-plugin' não viola as convenções de nomenclatura do plugin Maven ou é um plugin oficial do maven? Não me importo com o nome, mas como ele nunca foi atualizado, pensei que o plugin não seria mais mantido.
FrVaBe
O plugin é bastante antigo, foi aceito antes que isso se tornasse uma convenção estabelecida. E o jaxb2-maven-plugin já foi retirado na época. Eu acho que é importante evitar a colisão de nomes aqui. No entanto, atualmente, a compilação de plug-ins aplica essas convenções de nomenclatura, então provavelmente terei que migrar de qualquer maneira.
Lexicore
3
@lanoxx Não, não é. Geralmente, não é recomendável compilar esquemas a partir de URLs. Faça cópias locais dos esquemas e use arquivos de catálogo para reescrever links.
Lexicore
3
  • O maven-jaxb2-plugin usa a implementação de referência JAXB da Oracle / Sun
  • cxf e jaxb2-maven-plugin usam Apache Xerces
rds
fonte
2

Por uma ligeira tangente: houve um problema com o uso do maven-jaxb2-plugin com o Eclipse Indigo que publiquei aqui . Uma correção (extensão) tornou-se disponível recentemente.

Isso não pretende discordar, de forma alguma, da recomendação do maven-jaxb2-plugin sobre o maven2-jaxb-plugin. Não sei, mas espero que o maven2-jaxb-plugin tenha o mesmo problema, provavelmente não resolvido.

Ed Staub
fonte
0

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

matt b
fonte
Sim, e se fosse possível baixar o plug-in org.jvnet.jaxb2.maven2, eu os compararia. Como o repositório java não fornece o plug-in, está fora do jogo, embora a sintaxe de configuração parecesse um pouco mais conveniente.
cuh