Sự khác biệt của plugin Maven JAXB


126

Tôi đã xác định rằng có hai plugin JAXB cho Maven 2, với một số cấu hình khác nhau.

Một là từ Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , cái khác từ Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

Những plugin nào trong số hai plugin này có thể được khuyến nghị?


Cảm ơn Matt. Trong dự án nghiên cứu nhỏ của mình, tôi thấy rằng có một plugin khác đến từ mặt trời:

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

và cái đó:

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

và vẫn là một từ Codehouse.

Câu trả lời:


104

Hãy tóm tắt. Chúng ta có:

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

Dựa trên các nhận xét của chủ đề này , tôi đã luôn sử dụng plugin maven-jaxb2 (tức là plugin số 1):

Liên quan đến org.jvnet.jaxb2.maven2: maven-jaxb2-plugin so với com.sun.tools.xjc.maven2: maven-jaxb-plugin, theo quan điểm của tôi, đây chắc chắn là cái đầu tiên ( http: // maven-jaxb2 -plugin.java.net/ ).

Plugin này có nhiều tính năng hơn com.sun.tools.xjc.maven2: maven-jaxb-plugin, quá trình phát triển đang hoạt động. Cuối cùng, tôi là một trong những tác giả :) và tôi muốn nói rằng chúng tôi giữ liên lạc với các nhà phát triển và người dùng JAXB và phản ứng với các tính năng / yêu cầu mới nhất.

Và thực tế, plugin # 2 không hoạt động nhiều (đã chết?). Và vì tôi luôn hài lòng với # 1, tôi chưa bao giờ sử dụng plugin số 3 nên thực sự không thể nói gì về nó. Trong trường hợp, đây là một cấu hình hoạt động cho 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>

1
Thx cho cấu hình. Cuối cùng, tôi sử dụng plugin codehouse, cung cấp cho tôi các khả năng tương tự cho nhu cầu của tôi. Chỉ có cú pháp khác nhau như tôi đã thấy.
cu

Còn ws.apache.org/jaxme/mp được đề cập trực tiếp trên trang web của Maven thì sao?
rcl

1
@rcl: Không thể nói nhiều về nó nhưng vì nó đã không được cập nhật hơn 4 năm, nên tôi không chắc mình sẽ sử dụng nó. Tôi chỉ hài lòng với plugin maven-jaxb2 .
Pascal Thivent

1
Đối với # 1, trang web lưu trữ tài liệu dường như đã ngừng hoạt động ngày hôm nay. confluence.highsource.org/display/MJIIP/User+Guide Dự án này có hoạt động không?
rds

2
@Gregor maven-jaxb2-pluginhiện được lưu trữ trên GitHub . Các tài liệu là trong wiki .
lexicore

44

Gần đây tôi đã thử ba trình cắm được đề cập ở trên (bao gồm cả ở đây):

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

Tôi đã kết thúc bằng cách sử dụng tùy chọn thứ tư: Plugin CXF XJC Maven http://cxf.apache.org/cxf-xjc-plugin.html

Nếu tôi thiếu một cái gì đó tôi muốn biết, nhưng cấu hình có vẻ đơn giản hơn với những gì tôi đã cố gắng thực hiện và dễ dàng hơn cho phép tôi xử lý việc tạo lớp trùng lặp trong cùng một không gian tên - tương tự như câu hỏi này: Có Cách xử lý các định nghĩa phần tử trùng lặp trên nhiều tệp .xsd trong JAXB? .

Bây giờ tôi có quyền kiểm soát chi tiết đối với mỗi XSD đến và gói java tương ứng; đây là một cấu hình mẫu gần với cấu hình tôi đang sử dụng.

 <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
Đề nghị tuyệt vời. Tôi vừa thử nó và nó hoạt động như một bùa mê - cảm ơn bạn.
SGB

Có ai biết nếu có một trình kết nối m2e Eclipse cho điều này? Tôi đã làm một số googling và không tìm thấy một. Hy vọng tôi chỉ bỏ lỡ nó vì tôi thích tùy chọn này.
dùng944849

cxf-xjc-plugin có trình kết nối Eclipse kể từ năm 2017. Nhưng tôi không thấy vấn đề tạo mã chạy thủ công maven và thêm thư mục nguồn. Trong thực tế, kinh nghiệm của tôi là các dự án với các lớp được tạo (JAXB, XMLBeans) tốt hơn nên đóng lại và phụ thuộc vào ở dạng nhị phân (jar). Sau đó, IDE hoạt động nhanh hơn và không có vấn đề về đường dẫn (đặc biệt là với XMLBeans).
Vytenis Bivainis

Có vẻ như Plugin Maven CXF XJC chỉ hỗ trợ tạo nguồn Java từ lược đồ và không có khả năng tạo lược đồ từ các chú thích Jaxb.
alebu

19

Tôi là tác giả của maven-jaxb2-plugin .

Plugin maven-jaxb2 hiện đang sử dụng JAXB 2.1. Trong các phiên bản tiếp theo, chúng tôi cũng sẽ cung cấp các phiên bản JAXB 2.0 và JAXB 2.2.

Đối với thảo luận "plugin nào tốt hơn", hãy kiểm tra các tính năng , tự quyết định. Hãy cho tôi biết nếu bạn bỏ lỡ một số chức năng.


Có thể tạo các lược đồ từ các lớp bằng cách sử dụng plugin maven-jaxb2 không? Hay plugin chỉ hỗ trợ xsd-> Java?
Jörg

Hiện tại chỉ là xsd-> java.
lexicore

Cái tên 'maven-jaxb2-plugin' không vi phạm các quy ước đặt tên plugin Maven hay nó là một plugin maven chính thức? Tôi không nhớ tên nhưng vì nó chưa bao giờ được cập nhật nên tôi nghĩ plugin sẽ không được duy trì nữa.
FrVaBe

Các plugin khá cũ, nó đã bị chặn trước khi điều này trở thành một quy ước được thiết lập. Và jaxb2-maven-plugin đã được lấy lại sau đó. Tôi nghĩ điều quan trọng là tránh va chạm tên ở đây. Tuy nhiên, ngày nay việc xây dựng plugin thậm chí còn thực thi các quy ước đặt tên này nên có lẽ tôi sẽ phải di chuyển bằng mọi cách.
lexicore

3
@lanoxx Không, không phải vậy. Thông thường không nên biên dịch lược đồ từ URL. Tạo bản sao cục bộ của lược đồ và sử dụng tệp danh mục để viết lại liên kết.
lexicore

3
  • maven-jaxb2-plugin sử dụng triển khai tham chiếu JAXB của Oracle / Sun
  • cxf và jaxb2-maven-plugin sử dụng Apache Xerces

2

Trên một tiếp tuyến nhỏ: có một vấn đề với việc sử dụng plugin maven-jaxb2 với Eclipse Indigo mà tôi đã đăng ở đây . Một bản sửa lỗi (phần mở rộng) gần đây đã trở nên có sẵn.

Điều này không có nghĩa là không đồng ý, với khuyến nghị của maven-jaxb2-plugin so với maven2-jaxb-plugin. Tôi không biết, nhưng tôi hy vọng rằng maven2-jaxb-plugin có cùng một vấn đề, có thể chưa được giải quyết.


0

Tôi đoán rằng một là dành cho đặc tả JAXB ban đầu và codehaus là dành cho đặc tả JAXB 2.1 (và nếu dev.java.net sẽ tải một thời gian trong thế kỷ này, tôi có thể nói chắc chắn).


Vâng, và nếu có thể tải xuống plugin org.jvnet.jaxb2.maven2 tôi sẽ so sánh chúng. Vì repo của java không cung cấp plugin nên nó không có trong trò chơi, mặc dù cú pháp cấu hình có vẻ thuận tiện hơn một chút.
cu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.