ความแตกต่างของปลั๊กอิน Maven JAXB


126

ฉันได้พิจารณาแล้วว่ามีปลั๊กอินJAXBสองตัวสำหรับMaven 2 โดยมีการกำหนดค่าที่แตกต่างกัน

อันนี้มาจาก Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/อีกอันมาจาก Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

คุณสามารถแนะนำปลั๊กอินใดต่อไปนี้ได้


ขอบคุณ Matt ในโครงการวิจัยเล็ก ๆ ของฉันฉันพบว่ามีปลั๊กอินอื่นที่มาจากดวงอาทิตย์:

<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. Maven-jaxb2 ปลั๊กอิน ( https://github.com/highsource/maven-jaxb2-plugin )
  2. Maven-JAXB ปลั๊กอิน ( https://jaxb.dev.java.net/jaxb-maven2-plugin/ )
  3. jaxb2-Maven ปลั๊กอิน ( https://github.com/mojohaus/jaxb2-maven-plugin )

จากความคิดเห็นของหัวข้อนี้ฉันใช้ปลั๊กอิน maven-jaxb2 เสมอ (เช่นปลั๊กอิน # 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
ขอบคุณสำหรับการกำหนดค่า ในที่สุดฉันก็ใช้ปลั๊กอิน codehouse ซึ่งให้ความสามารถเดียวกันกับความต้องการของฉัน มีเพียงไวยากรณ์เท่านั้นที่แตกต่างกันเท่าที่ฉันเห็น
เพราะ

แล้วws.apache.org/jaxme/mpที่กล่าวถึงโดยตรงบนเว็บไซต์ของ Maven ล่ะ?
rcl

1
@rcl: ไม่สามารถพูดอะไรได้มาก แต่เนื่องจากไม่ได้รับการปรับปรุงมานานกว่า 4 ปีฉันจึงไม่แน่ใจว่าจะใช้มัน ฉันแค่มีความสุขกับMaven-jaxb2 ปลั๊กอิน
Pascal Thivent

1
สำหรับ # 1 ไซต์ที่โฮสต์เอกสารดูเหมือนจะหยุดทำงานในวันนี้ confluence.highsource.org/display/MJIIP/User+Guideโครงการนี้ใช้งานได้หรือไม่
rds

2
@Gregor maven-jaxb2-pluginโฮสต์บนGitHubแล้ว เอกสารที่อยู่ในวิกิพีเดีย
พจนานุกรม

44

ฉันเพิ่งลองใช้ปลั๊กอินสามตัวที่กล่าวถึงข้างต้น (รวมอยู่ที่นี่ด้วย):

  1. ปลั๊กอิน maven-jaxb2 ( 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 http://cxf.apache.org/cxf-xjc-plugin.html

หากฉันขาดบางสิ่งที่ฉันอยากรู้ แต่การกำหนดค่าดูเหมือนจะตรงไปตรงมามากขึ้นสำหรับสิ่งที่ฉันพยายามทำและทำให้ฉันจัดการกับการสร้างคลาสที่ซ้ำกันภายในเนมสเปซเดียวกันได้ง่ายขึ้น - คล้ายกับคำถามนี้หรือไม่: มี วิธีจัดการกับข้อกำหนดองค์ประกอบที่ซ้ำกันในไฟล์. xsd หลายไฟล์ใน JAXB? .

ตอนนี้ฉันมีการควบคุมอย่างละเอียดสำหรับแต่ละ XSD ขาเข้าและแพ็คเกจจาวาที่เกี่ยวข้อง นี่คือตัวอย่างการกำหนดค่าที่ใกล้เคียงกับที่ฉันใช้

 <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

ไม่มีใครรู้ว่ามีขั้วต่อ Eclipse m2e สำหรับสิ่งนี้หรือไม่? ฉันทำ Googling และไม่พบ หวังว่าฉันจะพลาดเพราะฉันชอบตัวเลือกนี้
user944849

cxf-xjc-plugin มีตัวเชื่อมต่อ Eclipse ณ ปี 2017 แต่ฉันไม่เห็นปัญหาในการสร้างโค้ดด้วยตนเองที่เรียกใช้ maven และเพิ่มไดเร็กทอรีต้นทาง ในความเป็นจริงประสบการณ์ของฉันคือโปรเจ็กต์ที่มีคลาสที่สร้างขึ้น (JAXB, XMLBeans) จะถูกปิดไว้ดีกว่าและขึ้นอยู่กับรูปแบบไบนารี (jar) จากนั้น IDE จะทำงานได้เร็วขึ้นและไม่มีปัญหา classpath (โดยเฉพาะกับ XMLBeans)
Vytenis Bivainis

ดูเหมือนว่า CXF XJC Maven Plugin รองรับการสร้างซอร์ส Java จากสกีมาเท่านั้นและไม่สามารถสร้างสคีมาจากคำอธิบายประกอบ Jaxb ได้
alebu

19

ผมผู้เขียนของMaven-jaxb2 ปลั๊กอิน

ปัจจุบันปลั๊กอิน maven-jaxb2 ใช้ JAXB 2.1 ในเวอร์ชันถัดไปเราจะมีเวอร์ชัน JAXB 2.0 และ JAXB 2.2 ด้วย

สำหรับการอภิปราย "ปลั๊กอินไหนดีกว่า" ให้ตรวจสอบคุณสมบัติตัดสินใจด้วยตัวเอง โปรดแจ้งให้เราทราบหากคุณพลาดฟังก์ชันบางอย่าง


เป็นไปได้ไหมที่จะสร้างสกีมาจากคลาสโดยใช้ปลั๊กอิน maven-jaxb2-plugin หรือปลั๊กอินรองรับเฉพาะ xsd-> Java?
Jörg

ขณะนี้เป็น xsd-> java เท่านั้น
พจนานุกรม

ชื่อ 'maven-jaxb2-plugin' ไม่ได้ละเมิดข้อกำหนดการตั้งชื่อปลั๊กอิน Mavenหรือเป็นปลั๊กอิน maven อย่างเป็นทางการหรือไม่ ฉันไม่สนใจชื่อ แต่เนื่องจากไม่เคยได้รับการอัปเดตฉันจึงคิดว่าปลั๊กอินจะไม่ได้รับการดูแลอีกต่อไป
FrVaBe

ปลั๊กอินค่อนข้างเก่ามันได้รับการยอมรับก่อนที่สิ่งนี้จะกลายเป็นอนุสัญญาที่จัดตั้งขึ้น และ jaxb2-maven-plugin ถูกนำกลับไปแล้ว ฉันคิดว่าสิ่งสำคัญคือต้องหลีกเลี่ยงการชนชื่อที่นี่ อย่างไรก็ตามในปัจจุบันปลั๊กอินสร้างแม้กระทั่งบังคับใช้รูปแบบการตั้งชื่อเหล่านี้ดังนั้นฉันอาจจะต้องย้ายไปแล้ว
พจนานุกรม

3
@lanoxx ไม่มันไม่ใช่ โดยทั่วไปไม่แนะนำให้รวบรวมสคีมาจาก URL ทำสำเนาสกีมาในเครื่องและใช้ไฟล์แค็ตตาล็อกเพื่อเขียนลิงก์ใหม่
พจนานุกรม

3
  • maven-jaxb2-plugin ใช้การอ้างอิง JAXB โดย Oracle / Sun
  • cxf และ jaxb2-maven-plugin ใช้ Apache Xerces

2

เมื่อสัมผัสเล็กน้อย: มีปัญหากับการใช้งานของ Maven-jaxb2 ปลั๊กอินกับคราส Indigo ที่ผมโพสต์ที่นี่ มีการแก้ไข (ส่วนขยาย) เมื่อเร็ว ๆ นี้

สิ่งนี้ไม่ได้หมายความว่าจะไม่เห็นด้วย แต่อย่างใดด้วยคำแนะนำของ maven-jaxb2-plugin ผ่าน maven2-jaxb-plugin ฉันไม่รู้ แต่ฉันคาดว่า maven2-jaxb-plugin มีปัญหาเดียวกันซึ่งอาจไม่ได้รับการแก้ไข


0

ฉันเดาว่าหนึ่งสำหรับข้อกำหนด JAXB ดั้งเดิมและ codehaus หนึ่งสำหรับข้อกำหนด JAXB 2.1 (และถ้า dev.java.net จะโหลดสักครู่ในศตวรรษนี้ฉันจะสามารถพูดได้อย่างแน่นอน)


ใช่และถ้าเป็นไปได้ฉันจะเปรียบเทียบปลั๊กอิน org.jvnet.jaxb2.maven2 เนื่องจาก repo ของ java ไม่ได้ให้ปลั๊กอินจึงไม่อยู่ในเกมแม้ว่าการกำหนดค่า - ไวยากรณ์จะดูสะดวกกว่าเล็กน้อย
เพราะ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.