11package se .fortnox .changesets .maven ;
22
33import org .codehaus .mojo .versions .api .PomHelper ;
4- import org .codehaus .mojo .versions .rewriting .ModifiedPomXMLEventReader ;
5- import org .codehaus .plexus .util .IOUtil ;
6- import org .codehaus .plexus .util .WriterFactory ;
7- import org .codehaus .stax2 .XMLInputFactory2 ;
4+ import org .codehaus .mojo .versions .rewriting .MutableXMLStreamReader ;
85import org .slf4j .Logger ;
96
10- import javax .xml .stream .XMLInputFactory ;
117import javax .xml .stream .XMLStreamException ;
8+ import javax .xml .transform .TransformerException ;
129import java .io .File ;
1310import java .io .IOException ;
1411import java .io .Writer ;
12+ import java .nio .charset .Charset ;
13+ import java .nio .file .Files ;
1514import java .util .function .Consumer ;
1615
16+ import static java .util .Optional .ofNullable ;
1717import static org .slf4j .LoggerFactory .getLogger ;
1818
1919/**
@@ -44,7 +44,7 @@ public static void setProjectVersion(File outFile, String newVersion) {
4444 * Set parent project version in a pom file
4545 *
4646 * @param outFile The pom file to update
47- * @param newVersion The new version to set the project parent reference to to
47+ * @param newVersion The new version to set the project parent reference to
4848 */
4949 public static void setProjectParentVersion (File outFile , String newVersion ) {
5050 updatePom (outFile , newPom -> {
@@ -56,19 +56,17 @@ public static void setProjectParentVersion(File outFile, String newVersion) {
5656 });
5757 }
5858
59- private static void updatePom (File outFile , Consumer <ModifiedPomXMLEventReader > updater ) {
60- try {
61- StringBuilder input = PomHelper .readXmlFile (outFile );
62- XMLInputFactory inputFactory = XMLInputFactory2 .newInstance ();
63- inputFactory .setProperty (XMLInputFactory2 .P_PRESERVE_LOCATION , Boolean .TRUE );
64- ModifiedPomXMLEventReader newPom = new ModifiedPomXMLEventReader (input , inputFactory , outFile .getAbsolutePath ());
65-
59+ private static void updatePom (File outFile , Consumer <MutableXMLStreamReader > updater ) {
60+ try (MutableXMLStreamReader newPom = new MutableXMLStreamReader (outFile .toPath ())) {
6661 updater .accept (newPom );
67-
68- try (Writer writer = WriterFactory .newXmlWriter (outFile )) {
69- IOUtil .copy (input .toString (), writer );
62+ if (newPom .isModified ()) {
63+ try (Writer writer = Files .newBufferedWriter (
64+ outFile .toPath (),
65+ ofNullable (newPom .getEncoding ()).map (Charset ::forName ).orElse (Charset .defaultCharset ()))) {
66+ writer .write (newPom .getSource ());
67+ }
7068 }
71- } catch (XMLStreamException | IOException e ) {
69+ } catch (XMLStreamException | IOException | TransformerException e ) {
7270 LOG .error ("Failed to update {}" , outFile , e );
7371 }
7472 }
0 commit comments