org.jvnet.jaxb2.maven2: maven-jaxb2-plugin: mismo file, resultados múltiples

Estoy usando el org.jvnet.jaxb2.maven2:maven-jaxb2-plugin en la versión 0.12.3, y tengo el siguiente problema.

  1. Genero un file java desde un file xsd.

  2. Me comprometo y lo presiono en nuestro repository git.

  3. removeOldOutput la misma generación de nuevo (usamos la opción removeOldOutput ).

  4. Para algunos files, git está detectando algunos cambios, porque el order de algunas annotations no es el mismo entre 2 generaciones.

Una parte de la primera generación:

 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Software", propOrder = { "rest" }) public abstract class Software extends SoftwareResource implements Serializable { private final static long serialVersionUID = 1L; @XmlElementRefs({ @XmlElementRef(name = "resource", type = JAXBElement.class), @XmlElementRef(name = "software", type = JAXBElement.class), @XmlElementRef(name = "swapSpaceUsedCurrent", type = JAXBElement.class), @XmlElementRef(name = "isUTCTime", type = JAXBElement.class), @XmlElementRef(name = "lastStartTime", type = JAXBElement.class), @XmlElementRef(name = "serialNumber", type = JAXBElement.class), @XmlElementRef(name = "numberProcessesActiveCurrent", type = JAXBElement.class), @XmlElementRef(name = "pagingFileSizeCurrent", type = JAXBElement.class), @XmlElementRef(name = "processMemorySizeCurrent", type = JAXBElement.class), @XmlElementRef(name = "numUsersCurrent", type = JAXBElement.class) }) protected List<JAXBElement<? extends Serializable>> rest; /** * Objects of the following type(s) are allowed in the list * {@link JAXBElement }{@code <}{@link Resource }{@code >} * {@link JAXBElement }{@code <}{@link BigInteger }{@code >} * {@link JAXBElement }{@code <}{@link Software }{@code >} * {@link JAXBElement }{@code <}{@link Boolean }{@code >} * {@link JAXBElement }{@code <}{@link String }{@code >} * {@link JAXBElement }{@code <}{@link BigInteger }{@code >} * {@link JAXBElement }{@code <}{@link String }{@code >} * {@link JAXBElement }{@code <}{@link Quantity }{@code >} * {@link JAXBElement }{@code <}{@link BigInteger }{@code >} * {@link JAXBElement }{@code <}{@link Quantity }{@code >} * * */ public List<JAXBElement<? extends Serializable>> getRest() { if (rest == null) { rest = new ArrayList<JAXBElement<? extends Serializable>>(); } return this.rest; } } 

La misma parte de la segunda generación:

 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Software", propOrder = { "rest" }) public abstract class Software extends SoftwareResource implements Serializable { private final static long serialVersionUID = 1L; @XmlElementRefs({ @XmlElementRef(name = "numUsersCurrent", type = JAXBElement.class), @XmlElementRef(name = "serialNumber", type = JAXBElement.class), @XmlElementRef(name = "processMemorySizeCurrent", type = JAXBElement.class), @XmlElementRef(name = "swapSpaceUsedCurrent", type = JAXBElement.class), @XmlElementRef(name = "pagingFileSizeCurrent", type = JAXBElement.class), @XmlElementRef(name = "lastStartTime", type = JAXBElement.class), @XmlElementRef(name = "numberProcessesActiveCurrent", type = JAXBElement.class), @XmlElementRef(name = "resource", type = JAXBElement.class), @XmlElementRef(name = "isUTCTime", type = JAXBElement.class), @XmlElementRef(name = "software", type = JAXBElement.class) }) protected List<JAXBElement<? extends Serializable>> rest; /** * Objects of the following type(s) are allowed in the list * {@link JAXBElement }{@code <}{@link BigInteger }{@code >} * {@link JAXBElement }{@code <}{@link String }{@code >} * {@link JAXBElement }{@code <}{@link Quantity }{@code >} * {@link JAXBElement }{@code <}{@link String }{@code >} * {@link JAXBElement }{@code <}{@link Quantity }{@code >} * {@link JAXBElement }{@code <}{@link BigInteger }{@code >} * {@link JAXBElement }{@code <}{@link BigInteger }{@code >} * {@link JAXBElement }{@code <}{@link Boolean }{@code >} * {@link JAXBElement }{@code <}{@link Resource }{@code >} * {@link JAXBElement }{@code <}{@link Software }{@code >} * * */ public List<JAXBElement<? extends Serializable>> getRest() { if (rest == null) { rest = new ArrayList<JAXBElement<? extends Serializable>>(); } return this.rest; } } 

¿Por qué estas annotations se orderan de manera diferente entre 2 generaciones? ¿Hay alguna manera de orderarlos?

Gracias !

Autor del maven-jaxb2-plugin aquí.

Primero, Aleksandr M tiene toda la razón. El código generado normalmente no se comtesting en SCM. El directory de target completo no tiene nada que hacer en git .

A continuación, el comstackdor de esquema JAXB (XJC) que es llamado por maven-jaxb2-plugin no es determinista, por lo tanto, no se garantiza que el código fuente generado sea idéntico entre diferentes generaciones de código. Esto definitivamente no es un problema en el maven-jaxb2-plugin y tampoco lo llamaré un error en XJC. Simplemente networkinguzca sus expectativas, no espere un código idéntico entre ejecuciones.