diff --git a/CHANGES.md b/CHANGES.md
index 22f14f2137..0e44b999e2 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -19,6 +19,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (
* Bump default `shfmt` version to latest `3.7.0` -> `3.8.0`. ([#2050](https://github.com/diffplug/spotless/pull/2050))
* Bump default `ktlint` version to latest `1.1.1` -> `1.2.1`. ([#2057](https://github.com/diffplug/spotless/pull/2057))
* Bump default `sortpom` version to latest `3.4.0` -> `3.4.1`. ([#2078](https://github.com/diffplug/spotless/pull/2078))
+* Bump default `sortpom` version to latest `3.4.1` -> `4.0.0` and support versions back to `3.2.1`. ([#2115](https://github.com/diffplug/spotless/pull/2115))
### Removed
* **BREAKING** Remove `JarState.getMavenCoordinate(String prefix)`. ([#1945](https://github.com/diffplug/spotless/pull/1945))
* **BREAKING** Replace `PipeStepPair` with `FenceStep`. ([#1954](https://github.com/diffplug/spotless/pull/1954))
diff --git a/lib/build.gradle b/lib/build.gradle
index 9a1e1ac3b9..cbcbe69d37 100644
--- a/lib/build.gradle
+++ b/lib/build.gradle
@@ -128,7 +128,7 @@ dependencies {
// scalafmt
scalafmtCompileOnly "org.scalameta:scalafmt-core_2.13:3.7.3"
// sortPom
- sortPomCompileOnly 'com.github.ekryd.sortpom:sortpom-sorter:3.4.1'
+ sortPomCompileOnly 'com.github.ekryd.sortpom:sortpom-sorter:4.0.0'
sortPomCompileOnly 'org.slf4j:slf4j-api:2.0.12'
// zjsonPatch
zjsonPatchCompileOnly 'com.flipkart.zjsonpatch:zjsonpatch:0.4.14'
diff --git a/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java b/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java
index 58e3f9d45a..656b6f16f4 100644
--- a/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java
+++ b/lib/src/main/java/com/diffplug/spotless/pom/SortPomCfg.java
@@ -21,7 +21,7 @@
public class SortPomCfg implements Serializable {
private static final long serialVersionUID = 1L;
- public String version = "3.4.1";
+ public String version = "4.0.0";
public String encoding = "UTF-8";
@@ -41,6 +41,8 @@ public class SortPomCfg implements Serializable {
public boolean indentSchemaLocation = false;
+ public String indentAttribute = null;
+
public String predefinedSortOrder = "recommended_2008_06";
public String sortOrderFile = null;
diff --git a/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java b/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java
index 57b96d70c7..d1ab469af0 100644
--- a/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java
+++ b/lib/src/sortPom/java/com/diffplug/spotless/glue/pom/SortPomFormatterFunc.java
@@ -16,6 +16,7 @@
package com.diffplug.spotless.glue.pom;
import java.io.*;
+import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.nio.file.Files;
@@ -46,17 +47,45 @@ public String apply(String input) throws Exception {
writer.write(input);
}
SortPomImpl sortPom = new SortPomImpl();
- sortPom.setup(new MySortPomLogger(), PluginParameters.builder()
+ PluginParameters.Builder builder = PluginParameters.builder()
.setPomFile(pom)
.setFileOutput(false, null, null, false)
- .setEncoding(cfg.encoding)
- .setFormatting(cfg.lineSeparator, cfg.expandEmptyElements, cfg.spaceBeforeCloseEmptyElement, cfg.keepBlankLines, cfg.endWithNewline)
- .setIndent(cfg.nrOfIndentSpace, cfg.indentBlankLines, cfg.indentSchemaLocation)
+ .setEncoding(cfg.encoding);
+ try {
+ builder = builder
+ .setFormatting(cfg.lineSeparator, cfg.expandEmptyElements, cfg.spaceBeforeCloseEmptyElement,
+ cfg.keepBlankLines, cfg.endWithNewline);
+ } catch (NoSuchMethodError e) {
+ try {
+ Method method = PluginParameters.Builder.class
+ .getMethod("setFormatting", String.class, boolean.class, boolean.class, boolean.class);
+ builder = (PluginParameters.Builder) method
+ .invoke(builder, cfg.lineSeparator, cfg.expandEmptyElements, cfg.spaceBeforeCloseEmptyElement,
+ cfg.keepBlankLines);
+ } catch (ReflectiveOperationException | RuntimeException ignore) {
+ throw e;
+ }
+ }
+ try {
+ builder = builder
+ .setIndent(cfg.nrOfIndentSpace, cfg.indentBlankLines, cfg.indentSchemaLocation,
+ cfg.indentAttribute);
+ } catch (NoSuchMethodError e) {
+ try {
+ Method method = PluginParameters.Builder.class
+ .getMethod("setIndent", int.class, boolean.class, boolean.class);
+ builder = (PluginParameters.Builder) method
+ .invoke(builder, cfg.nrOfIndentSpace, cfg.indentBlankLines, cfg.indentSchemaLocation);
+ } catch (ReflectiveOperationException | RuntimeException ignore) {
+ throw e;
+ }
+ }
+ builder = builder
.setSortOrder(cfg.sortOrderFile, cfg.predefinedSortOrder)
.setSortEntities(cfg.sortDependencies, cfg.sortDependencyExclusions, cfg.sortDependencyManagement,
cfg.sortPlugins, cfg.sortProperties, cfg.sortModules, cfg.sortExecutions)
- .setIgnoreLineSeparators(false)
- .build());
+ .setIgnoreLineSeparators(false);
+ sortPom.setup(new MySortPomLogger(), builder.build());
sortPom.sortPom();
return Files.readString(pom.toPath(), Charset.forName(cfg.encoding));
}
diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md
index ffaaa932dc..9ff689d273 100644
--- a/plugin-gradle/CHANGES.md
+++ b/plugin-gradle/CHANGES.md
@@ -14,6 +14,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (
* Bump default `shfmt` version to latest `3.7.0` -> `3.8.0`. ([#2050](https://github.com/diffplug/spotless/pull/2050))
* Bump default `ktlint` version to latest `1.1.1` -> `1.2.1`. ([#2057](https://github.com/diffplug/spotless/pull/2057))
* Bump default `sortpom` version to latest `3.4.0` -> `3.4.1`. ([#2078](https://github.com/diffplug/spotless/pull/2078))
+* Bump default `sortpom` version to latest `3.4.1` -> `4.0.0` and support versions back to `3.2.1`. ([#2115](https://github.com/diffplug/spotless/pull/2115))
### Added
* Respect `.editorconfig` settings for formatting shell via `shfmt` ([#2031](https://github.com/diffplug/spotless/pull/2031))
* Add support for formatting and sorting Maven POMs ([#2082](https://github.com/diffplug/spotless/issues/2082))
diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md
index 606589ed7f..bb1a9dd6dc 100644
--- a/plugin-gradle/README.md
+++ b/plugin-gradle/README.md
@@ -700,7 +700,7 @@ All configuration settings are optional, they are described in detail [here](htt
```gradle
spotless {
pom {
- sortPom('3.4.0')
+ sortPom('4.0.0')
.encoding('UTF-8') // The encoding of the pom files
.lineSeparator(System.getProperty('line.separator')) // line separator to use
.expandEmptyElements(true) // Should empty elements be expanded
@@ -710,6 +710,7 @@ spotless {
.nrOfIndentSpace(2) // Indentation
.indentBlankLines(false) // Should empty lines be indented
.indentSchemaLocation(false) // Should schema locations be indented
+ .indentAttribute(null) // Should the xml attributes be indented
.predefinedSortOrder('recommended_2008_06') // Sort order of elements: https://github.com/Ekryd/sortpom/wiki/PredefinedSortOrderProfiles
.sortOrderFile(null) // Custom sort order of elements: https://raw.githubusercontent.com/Ekryd/sortpom/master/sorter/src/main/resources/custom_1.xml
.sortDependencies(null) // Sort dependencies: https://github.com/Ekryd/sortpom/wiki/SortDependencies
diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java
index 463463d320..4474a36385 100644
--- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java
+++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PomExtension.java
@@ -107,6 +107,11 @@ public SortPomGradleConfig indentSchemaLocation(boolean indentSchemaLocation) {
return this;
}
+ public SortPomGradleConfig indentAttribute(String indentAttribute) {
+ cfg.indentAttribute = indentAttribute;
+ return this;
+ }
+
public SortPomGradleConfig predefinedSortOrder(String predefinedSortOrder) {
cfg.predefinedSortOrder = predefinedSortOrder;
return this;
diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java
index 1c51d4c2a8..80c8f254f2 100644
--- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java
+++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SortPomGradleTest.java
@@ -16,6 +16,8 @@
package com.diffplug.gradle.spotless;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
class SortPomGradleTest extends GradleIntegrationHarness {
@Test
@@ -63,8 +65,9 @@ void sortPomWithTarget() throws Exception {
assertFile("test.xml").sameAsResource("pom/pom_clean_default.xml");
}
- @Test
- void sortPomWithVersion() throws Exception {
+ @ParameterizedTest
+ @ValueSource(strings = {"3.2.1", "3.3.0", "3.4.1", "4.0.0"})
+ void sortPomWithVersion(String version) throws Exception {
// given
setFile("build.gradle").toLines(
"plugins {",
@@ -73,7 +76,7 @@ void sortPomWithVersion() throws Exception {
"repositories { mavenCentral() }",
"spotless {",
" pom {",
- " sortPom '3.4.0'",
+ " sortPom '" + version + "'",
" }",
"}");
setFile("pom.xml").toResource("pom/pom_dirty.xml");
@@ -105,6 +108,7 @@ void sortPomWithParameters() throws Exception {
" .nrOfIndentSpace(2)",
" .indentBlankLines(false)",
" .indentSchemaLocation(false)",
+ " .indentAttribute(null)",
" .predefinedSortOrder('recommended_2008_06')",
" .sortOrderFile(null)",
" .sortDependencies(null)",
diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md
index af419b1ad3..a759f923b9 100644
--- a/plugin-maven/CHANGES.md
+++ b/plugin-maven/CHANGES.md
@@ -12,6 +12,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (
* Bump default `shfmt` version to latest `3.7.0` -> `3.8.0`. ([#2050](https://github.com/diffplug/spotless/pull/2050))
* Bump default `ktlint` version to latest `1.1.1` -> `1.2.1`. ([#2057](https://github.com/diffplug/spotless/pull/2057))
* Bump default `sortpom` version to latest `3.4.0` -> `3.4.1`. ([#2078](https://github.com/diffplug/spotless/pull/2078))
+* Bump default `sortpom` version to latest `3.4.1` -> `4.0.0` and support versions back to `3.2.1`. ([#2115](https://github.com/diffplug/spotless/pull/2115))
### Added
* Respect `.editorconfig` settings for formatting shell via `shfmt` ([#2031](https://github.com/diffplug/spotless/pull/2031))
* Skip execution in M2E (incremental) builds by default ([#1814](https://github.com/diffplug/spotless/issues/1814), [#2037](https://github.com/diffplug/spotless/issues/2037))
diff --git a/plugin-maven/README.md b/plugin-maven/README.md
index 383efd53ec..ff46b87bb7 100644
--- a/plugin-maven/README.md
+++ b/plugin-maven/README.md
@@ -667,6 +667,8 @@ All configuration settings are optional, they are described in detail [here](htt
false
+
+
recommended_2008_06
diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java
index efa2f533b8..8b0df8a7b0 100644
--- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java
+++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/pom/SortPom.java
@@ -56,6 +56,9 @@ public class SortPom implements FormatterStepFactory {
@Parameter
boolean indentSchemaLocation = defaultValues.indentSchemaLocation;
+ @Parameter
+ String indentAttribute = defaultValues.indentAttribute;
+
@Parameter
String predefinedSortOrder = defaultValues.predefinedSortOrder;
@@ -96,6 +99,7 @@ public FormatterStep newFormatterStep(FormatterStepConfig stepConfig) {
cfg.nrOfIndentSpace = nrOfIndentSpace;
cfg.indentBlankLines = indentBlankLines;
cfg.indentSchemaLocation = indentSchemaLocation;
+ cfg.indentAttribute = indentAttribute;
cfg.predefinedSortOrder = predefinedSortOrder;
cfg.sortOrderFile = sortOrderFile;
cfg.sortDependencies = sortDependencies;
diff --git a/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java b/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java
index 873511cdda..15610ace58 100644
--- a/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java
+++ b/testlib/src/test/java/com/diffplug/spotless/pom/SortPomTest.java
@@ -16,6 +16,8 @@
package com.diffplug.spotless.pom;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import com.diffplug.spotless.*;
@@ -27,10 +29,11 @@ public void testSortPomWithDefaultConfig() {
StepHarness.forStep(step).testResource("pom/pom_dirty.xml", "pom/pom_clean_default.xml");
}
- @Test
- public void testSortPomWithVersion() {
+ @ParameterizedTest
+ @ValueSource(strings = {"3.2.1", "3.3.0", "3.4.1", "4.0.0"})
+ public void testSortPomWithVersion(String version) {
SortPomCfg cfg = new SortPomCfg();
- cfg.version = "3.4.1";
+ cfg.version = version;
FormatterStep step = SortPomStep.create(cfg, TestProvisioner.mavenCentral());
StepHarness.forStep(step).testResource("pom/pom_dirty.xml", "pom/pom_clean_default.xml");
}