Maven JAXB 플러그인의 차이점


126

Maven 2 용 두 가지 JAXB 플러그인 이 있으며 구성이 다릅니다.

하나는 Sun : http://jaxb.dev.java.net/jaxb-maven2-plugin/ 이고, 다른 하나는 Mojohaus입니다 : http://mojohaus.org/jaxb2-maven-plugin/

이 두 플러그인 중 어떤 것을 추천 할 수 있습니까?


고마워 매트. 내 작은 연구 프로젝트에서 나는 sunners에서 오는 또 다른 플러그인이 있음을 발견했습니다.

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

그리고 저것 :

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

그리고 여전히 Codehouse의 것입니다.

답변:


104

요약하자. 우리는 :

  1. 받는다는-JAXB2 - 플러그인 ( https://github.com/highsource/maven-jaxb2-plugin )
  2. 받는다는 - JAXB - 플러그인 ( https://jaxb.dev.java.net/jaxb-maven2-plugin/ )
  3. JAXB2 - 받는다는 - 플러그인 ( https://github.com/mojohaus/jaxb2-maven-plugin )

이 스레드 의 의견을 바탕으로 항상 maven-jaxb2-plugin (예 : 플러그인 # 1)을 사용했습니다.

내 관점에서 org.jvnet.jaxb2.maven2 : maven-jaxb2-plugin 대 com.sun.tools.xjc.maven2 : maven-jaxb-plugin에 관해서는 분명히 첫 번째입니다 ( http : // maven-jaxb2 -plugin.java.net/ ).

이 플러그인은 com.sun.tools.xjc.maven2 : maven-jaxb-plugin보다 훨씬 많은 기능을 가지고 있으며 개발이 활발합니다. 마지막으로 저자 중 하나입니다.) JAXB 개발자 및 사용자와 계속 연락하고 최신 기능 / 요청에 반응한다고 말하고 싶습니다.

실제로 플러그인 # 2는 매우 활성 적이 지 않습니다 (죽었습니까?). 그리고 나는 항상 # 1에 만족했기 때문에 플러그인 # 3을 사용한 적이 없으므로 그것에 대해 아무 말도 할 수 없습니다. 플러그인 # 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>

1
구성을위한 Thx. 결국 나는 코드 하우스 플러그인을 사용하는데, 이는 내 요구에 대해 동일한 기능을 제공합니다. 내가 본 한 구문 만 다릅니다.
cuh

무엇에 대해 ws.apache.org/jaxme/mp을 Maven의 사이트에 직접 언급하는?
rcl

1
@ rcl : 그것에 대해 많이 말할 수는 없지만 4 년 이상 업데이트되지 않았기 때문에 그것을 사용할지 확실하지 않습니다. 나는 그냥 행복 해요 받는다는-JAXB2 - 플러그인 .
파스칼 티 벤트

1
# 1의 경우 문서를 호스팅하는 사이트가 오늘 다운 된 것으로 보입니다. confluence.highsource.org/display/MJIIP/User+Guide 이 프로젝트는 활성화되어 있습니까?
rds

2
@Gregor maven-jaxb2-plugin는 이제 GitHub에서 호스팅됩니다 . 문서는 위키에 있습니다.
lexicore

44

최근에 위에서 언급 한 세 가지 플러그인을 시도했습니다 (여기에 포함).

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

CXF XJC Maven Plugin http://cxf.apache.org/cxf-xjc-plugin.html : 네 번째 옵션을 사용하여 끝났습니다 .

내가 알고 싶은 것이 누락되었지만 구성하려고하는 것이 더 간단 해 보였고 동일한 네임 스페이스 내에서 중복 클래스 생성을 처리 할 수있게되었습니다.이 질문과 유사합니다 . JAXB의 여러 .xsd 파일에서 중복 요소 정의를 처리하는 방법은 무엇입니까?.

이제 각 들어오는 XSD 및 해당 Java 패키지를 세부적으로 제어 할 수 있습니다. 다음은 내가 사용하는 구성에 가까운 샘플 구성입니다.

 <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>

1
훌륭한 제안. 방금 시도했지만 매력처럼 작동했습니다. 감사합니다.
SGB

이클립스 m2e 커넥터가 있는지 아는 사람이 있습니까? 나는 인터넷 검색을했지만 찾지 못했습니다. 이 옵션이 마음에 들기 때문에 방금 놓쳤 으면합니다.
user944849

cxf-xjc-plugin에는 2017 년 현재 Eclipse 커넥터가 있습니다.하지만 수동으로 maven을 실행하고 소스 디렉토리를 추가하는 코드를 생성하는 문제는 보이지 않습니다. 실제로, 내 경험은 생성 된 클래스 (JAXB, XMLBeans)가있는 프로젝트가 더 잘 닫히고 바이너리 형식 (jar)으로 의존한다는 것입니다. 그러면 IDE가 더 빨리 작동하고 클래스 경로 문제가 없습니다 (특히 XMLBeans).
Vytenis Bivainis

CXF XJC Maven Plugin은 스키마에서 Java 소스 생성 만 지원하며 Jaxb 주석에서 스키마를 생성 할 수없는 것 같습니다.
alebu

19

나는 maven-jaxb2-plugin 의 저자입니다 .

maven-jaxb2-plugin은 현재 JAXB 2.1을 사용합니다. 다음 버전에서는 JAXB 2.0 및 JAXB 2.2 버전도 제공합니다.

"플러그인이 더 나은"토론에 대해서는 기능을 확인하고 스스로 결정하십시오. 일부 기능이 누락 된 경우 알려주십시오.


maven-jaxb2-plugin을 사용하여 클래스에서 스키마를 생성 할 수 있습니까? 아니면 플러그인이 xsd-> Java 만 지원합니까?
Jörg

현재 xsd-> java 전용입니다.
lexicore

'maven-jaxb2-plugin'이라는 이름Maven 플러그인 명명 규칙을 위반하지 않습니까? 아니면 공식 maven 플러그인입니까? 이름은 신경 쓰지 않지만 업데이트되지 않았으므로 더 이상 플러그인이 유지되지 않을 것이라고 생각했습니다.
FrVaBe

플러그인은 상당히 오래되었으며, 이것이 기존의 컨벤션이되기 전에 받아 들여졌습니다. 그리고 jaxb2-maven-plugin은 이미 당시에 사용되었습니다. 여기서 이름 충돌을 피하는 것이 중요하다고 생각합니다. 그러나 오늘날 플러그인 빌드는 이러한 명명 규칙을 적용하기 때문에 어쨌든 마이그레이션해야 할 것입니다.
lexicore

3
@lanoxx 아니요, 그렇지 않습니다. 일반적으로 URL에서 스키마를 컴파일하지 않는 것이 좋습니다. 스키마의 로컬 사본을 작성하고 카탈로그 파일을 사용하여 링크를 다시 작성하십시오.
lexicore

3
  • maven-jaxb2-plugin은 Oracle / Sun의 JAXB 참조 구현을 사용합니다.
  • cxf 및 jaxb2-maven-plugin은 Apache Xerces를 사용합니다.

2

약간의 접선 : Eclipse Indigo에서 maven-jaxb2 플러그인을 사용하는 데 문제가 발생했습니다 . . 수정 사항 (확장자)이 최근에 사용 가능해졌습니다.

이것은 maven2-jaxb-plugin보다 maven-jaxb2-plugin을 권장하는 데 전혀 동의하지 않습니다. 잘 모르겠지만 maven2-jaxb-plugin에는 동일한 문제가있을 것으로 예상됩니다. 아마도 해결되지 않았습니다.


0

하나는 원래 JAXB 사양에 대한 것이고 코드 하우스는 JAXB 2.1 사양에 대한 것입니다 (그리고 dev.java.net이 금세기에 약간의 시간을로드하면 확실히 말할 수 있습니다).


예, org.jvnet.jaxb2.maven2 플러그인 을 다운로드 할 수 있다면 비교해보십시오. java의 repo가 ​​플러그인을 제공하지 않기 때문에 구성 구문이 조금 더 편리해 보이지만 게임에서 나왔습니다.
cuh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.