[
https://issues.apache.org/jira/browse/MNG-6801?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16972960#comment-16972960
]
Gabriel Belingueres commented on MNG-6801:
------------------------------------------
<properties> tags are stored inside the Model object with a
java.util.Properties instance, with an implementation based on a Hashtable.
This means when the writer iterates on the properties, the order is
unpredictable. See
[https://maven.apache.org/ref/3.3.9/maven-model/apidocs/src-html/org/apache/maven/model/io/xpp3/MavenXpp3Writer.html#line.1071]
Unfortunate as it may be, I don't think it as a bug (AFAIK there is no ordering
between properties inside the pom.xml file). This is an improvement perhaps.
Possible workaround: read also the pom.xml file by your own means. Save the
properties names in a list in the order they appear. Write a subclass of
java.util.Properties containing the properties names list, and override the
keySet() method returning the list iterator instead. Finally call
model.setProperties(myOwnPropertiesInstance) before write the pom.xml.
> MavenXpp3Writer doesn't retain structure
> ----------------------------------------
>
> Key: MNG-6801
> URL: https://issues.apache.org/jira/browse/MNG-6801
> Project: Maven
> Issue Type: Bug
> Components: Plugins and Lifecycle
> Reporter: Liana Lupsa
> Priority: Major
>
> Context:
> We are using pipeline-utility-steps-plugin which is a jenkins plugin which
> uses the following classes:
>
> [https://github.com/jenkinsci/pipeline-utility-steps-plugin/blob/master/src/main/java/org/jenkinsci/plugins/pipeline/utility/steps/maven/ReadMavenPomStep.java].
>
> [https://github.com/jenkinsci/pipeline-utility-steps-plugin/blob/master/src/main/java/org/jenkinsci/plugins/pipeline/utility/steps/maven/WriteMavenPomStep.java#L32]
> In our Jenkins file we have a stage that overwrites the version in the pom
> with the computed version and for this we need pipeline-utility-steps-plugin.
> The problem is that the tags in the pom.xml are never retained in the same
> order. The elements in the pom file are completelly rearranged.
> For consistency reasons and idempotency we need to retain the structure and
> simply update one line.
> Status:
> After evaluating the plugin code we noticed that it uses:
>
> [https://github.com/jenkinsci/pipeline-utility-steps-plugin/blob/master/src/main/java/org/jenkinsci/plugins/pipeline/utility/steps/maven/WriteMavenPomStep.java#L32]
> and imports:
> import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
> with
> [https://maven.apache.org/ref/3.3.9/maven-model/apidocs/src-html/org/apache/maven/model/io/xpp3/MavenXpp3Writer.html]
> which uses
> XmlSerializer serializer = new MXSerializer();
>
> [https://github.com/sonatype/plexus-utils/blob/master/src/main/java/org/codehaus/plexus/util/xml/pull/MXSerializer.java]
> We think that maven XmlSerializer causes this problem.
> Example of the pom.xml changes:
> first build trigger:
> run 1:
> <properties>
> <javax.version>3.1.0</javax.version>
> <mockito.version>1.10.19</mockito.version>
> <hamcrest.version>2.1</hamcrest.version>
> <openam.version>6.5.1</openam.version>
> <lombok.version>1.18.6</lombok.version>
> <junit.version>4.12</junit.version>
> </properties>
> run 2:
> <properties>
> <mockito.version>1.10.19</mockito.version>
> <javax.version>3.1.0</javax.version>
> <hamcrest.version>2.1</hamcrest.version>
> <openam.version>6.5.1</openam.version>
> <lombok.version>1.18.6</lombok.version>
> <junit.version>4.12</junit.version>
> </properties>
> and run 3:
> <properties>
> <javax.version>3.1.0</javax.version>
> <mockito.version>1.10.19</mockito.version>
> <hamcrest.version>2.1</hamcrest.version>
> <openam.version>6.5.1</openam.version>
> <lombok.version>1.18.6</lombok.version>
> <junit.version>4.12</junit.version>
> </properties>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)