diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java
index a76f7dd7..3d93fafe 100644
--- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java
@@ -21,11 +21,13 @@ import java.io.FileWriter;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.logging.Log;
import org.codehaus.mojo.versions.api.PomHelper;
import org.codehaus.mojo.versions.change.AbstractVersionChanger;
@@ -33,6 +35,7 @@ import org.codehaus.mojo.versions.change.VersionChange;
import org.codehaus.mojo.versions.change.VersionChanger;
import org.codehaus.mojo.versions.change.VersionChangerFactory;
import org.codehaus.mojo.versions.rewriting.ModifiedPomXMLEventReader;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.stax2.XMLInputFactory2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -71,6 +74,49 @@ class PomUpdater {
return true;
}
+ boolean hasSkipDeployment(Model model) {
+ String property = model.getProperties()
+ .getProperty("maven.deploy.skip");
+ boolean hasSkipDeploymentProperty = Boolean.parseBoolean(property);
+ if (hasSkipDeploymentProperty) {
+ return true;
+ }
+ if (model.getBuild() == null) {
+ return false;
+ }
+ boolean plugins = model.getBuild()
+ .getPlugins()
+ .stream()
+ .filter(plugin -> "maven-deploy-plugin".equalsIgnoreCase(plugin.getArtifactId()))
+ .map(this::skipFromConfiguration)
+ .findFirst()
+ .orElse(false);
+ if (plugins) {
+ return true;
+ }
+ if (model.getBuild()
+ .getPluginManagement() == null) {
+ return false;
+ }
+ return model.getBuild()
+ .getPluginManagement()
+ .getPlugins()
+ .stream()
+ .filter(plugin -> "maven-deploy-plugin".equalsIgnoreCase(plugin.getArtifactId()))
+ .map(this::skipFromConfiguration)
+ .findFirst()
+ .orElse(false);
+ }
+
+ private Boolean skipFromConfiguration(Plugin plugin) {
+ if (!(plugin.getConfiguration() instanceof Xpp3Dom)) {
+ return false;
+ }
+ Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
+ Xpp3Dom skip = configuration.getChild("skip");
+ return skip != null && Boolean.parseBoolean(skip.getValue());
+ }
+
private File rootPom(File rootFolder) {
if (rootFolder.getName().endsWith(".xml")) {
return rootFolder;
@@ -130,7 +176,8 @@ class PomUpdater {
log.debug("Can't set the value for parent... Will return {}", sourceChanges);
return changes;
}
- if (model.getGroupId() != null && !model.getGroupId().equals(rootProjectGroupId)) {
+ boolean skipDeployment = hasSkipDeployment(model);
+ if (!skipDeployment && model.getGroupId() != null && !model.getGroupId().equals(rootProjectGroupId)) {
log.info("Will not update the project's [{}] parent [{}] since its group id [{}] is not equal the parent group id [{}]",
model.getArtifactId(), model.getParent().getArtifactId(), model.getGroupId(), rootProjectGroupId);
return changes;
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java
index 9d10a5fc..e0b53281 100644
--- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java
@@ -23,8 +23,11 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Map;
import java.util.Scanner;
+import org.apache.maven.model.Model;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
@@ -128,7 +131,7 @@ public class ProjectPomUpdater {
}
ModelWrapper model = this.pomUpdater.updateModel(this.rootPom, file, this.versions);
this.pomUpdater.overwritePomIfDirty(model, this.versions, file);
- if (this.assertSnapshots && !this.snapshotVersion) {
+ if (this.assertSnapshots && !this.snapshotVersion && !this.pomUpdater.hasSkipDeployment(model.model)) {
log.debug("Update is a non-snapshot one. Checking if no snapshot versions remained in the pom");
Scanner scanner = new Scanner(asString(path));
int lineNumber = 0;
diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/PomUpdateAcceptanceTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/PomUpdateAcceptanceTests.java
index 120e3a3b..ed58b530 100644
--- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/PomUpdateAcceptanceTests.java
+++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/PomUpdateAcceptanceTests.java
@@ -68,6 +68,25 @@ public class PomUpdateAcceptanceTests {
@Test
public void should_update_fail_when_after_updating_a_release_version_there_still_is_a_snapshot_version() throws Exception {
+ ReleaserProperties releaserProperties = branchReleaserProperties();
+ ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
+ Projects projects = projectPomUpdater.retrieveVersionsFromSCRelease();
+ projects.add(new ProjectVersion("spring-cloud-sleuth-samples", "0.0.5.RELEASE"));
+ File project = new File(this.temporaryFolder, "/spring-cloud-sleuth-with-unmatched-property/spring-cloud-sleuth-samples");
+ addBuildSnapshotToChildPom(project);
+
+ projectPomUpdater
+ .updateProjectFromSCRelease(project, projects, projects.forFile(project), true);
+ }
+
+ private void addBuildSnapshotToChildPom(File project) throws IOException {
+ File childPom = new File(project, "pom.xml");
+ String text = new String(Files.readAllBytes(childPom.toPath()));
+ Files.write(childPom.toPath(), text.replaceAll("1.19.2", "1.19.2.BUILD-SNAPSHOT").getBytes());
+ }
+
+ @Test
+ public void should_not_fail_update_when_after_updating_a_release_version_there_still_is_a_snapshot_version_in_a_non_deployable_module() throws Exception {
ReleaserProperties releaserProperties = branchReleaserProperties();
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
Projects projects = projectPomUpdater.retrieveVersionsFromSCRelease();
diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java
index 875717c3..e7696e69 100644
--- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java
+++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java
@@ -173,7 +173,7 @@ public class PomUpdaterTests {
}
@Test
- public void should_only_update_the_props_when_group_ids_dont_match() throws Exception {
+ public void should_only_update_the_properties_section_when_group_ids_dont_match_and_there_is_no_skip_deployment() throws Exception {
File originalPom = pom("/projects/project/children", "pom_different_group.xml");
File pomInTemp = tmpFile("/project/children/pom_different_group.xml");
ModelWrapper rootPom = model("spring-cloud-sleuth", "org.springframework.cloud");
@@ -190,6 +190,60 @@ public class PomUpdaterTests {
.containsEntry("spring-cloud-sleuth.version", "0.0.3.BUILD-SNAPSHOT");
}
+ @Test
+ public void should_update_everything_when_group_ids_dont_match_and_there_is_skip_deployment_property() throws Exception {
+ File originalPom = pom("/projects/project/children", "pom_different_group_skip_deployment_prop.xml");
+ File pomInTemp = tmpFile("/project/children/pom_different_group_skip_deployment_prop.xml");
+ ModelWrapper rootPom = model("spring-cloud-sleuth", "org.springframework.cloud");
+ ModelWrapper model = this.pomUpdater.updateModel(rootPom, pomInTemp, this.versions);
+
+ File storedPom = this.pomUpdater.overwritePomIfDirty(model, this.versions, pomInTemp);
+
+ BDDAssertions.then(asString(storedPom)).isNotEqualTo(asString(originalPom));
+ Model overriddenPomModel = this.pomReader.readPom(storedPom);
+ BDDAssertions.then(overriddenPomModel.getVersion()).isEqualTo("1.2.2.BUILD-SNAPSHOT");
+ BDDAssertions.then(overriddenPomModel.getParent().getVersion()).isEqualTo("0.0.1");
+ // the rest is the same
+ BDDAssertions.then(overriddenPomModel.getProperties())
+ .containsEntry("spring-cloud-sleuth.version", "0.0.3.BUILD-SNAPSHOT");
+ }
+
+ @Test
+ public void should_update_everything_when_group_ids_dont_match_and_there_is_skip_in_deployment_plugin() throws Exception {
+ File originalPom = pom("/projects/project/children", "pom_different_group_skip_deployment_plugin.xml");
+ File pomInTemp = tmpFile("/project/children/pom_different_group_skip_deployment_plugin.xml");
+ ModelWrapper rootPom = model("spring-cloud-sleuth", "org.springframework.cloud");
+ ModelWrapper model = this.pomUpdater.updateModel(rootPom, pomInTemp, this.versions);
+
+ File storedPom = this.pomUpdater.overwritePomIfDirty(model, this.versions, pomInTemp);
+
+ BDDAssertions.then(asString(storedPom)).isNotEqualTo(asString(originalPom));
+ Model overriddenPomModel = this.pomReader.readPom(storedPom);
+ BDDAssertions.then(overriddenPomModel.getVersion()).isEqualTo("1.2.2.BUILD-SNAPSHOT");
+ BDDAssertions.then(overriddenPomModel.getParent().getVersion()).isEqualTo("0.0.1");
+ // the rest is the same
+ BDDAssertions.then(overriddenPomModel.getProperties())
+ .containsEntry("spring-cloud-sleuth.version", "0.0.3.BUILD-SNAPSHOT");
+ }
+
+ @Test
+ public void should_update_everything_when_group_ids_dont_match_and_there_is_skip_in_deployment_plugin_management() throws Exception {
+ File originalPom = pom("/projects/project/children", "pom_different_group_skip_deployment_plugin_mngmnt.xml");
+ File pomInTemp = tmpFile("/project/children/pom_different_group_skip_deployment_plugin_mngmnt.xml");
+ ModelWrapper rootPom = model("spring-cloud-sleuth", "org.springframework.cloud");
+ ModelWrapper model = this.pomUpdater.updateModel(rootPom, pomInTemp, this.versions);
+
+ File storedPom = this.pomUpdater.overwritePomIfDirty(model, this.versions, pomInTemp);
+
+ BDDAssertions.then(asString(storedPom)).isNotEqualTo(asString(originalPom));
+ Model overriddenPomModel = this.pomReader.readPom(storedPom);
+ BDDAssertions.then(overriddenPomModel.getVersion()).isEqualTo("1.2.2.BUILD-SNAPSHOT");
+ BDDAssertions.then(overriddenPomModel.getParent().getVersion()).isEqualTo("0.0.1");
+ // the rest is the same
+ BDDAssertions.then(overriddenPomModel.getProperties())
+ .containsEntry("spring-cloud-sleuth.version", "0.0.3.BUILD-SNAPSHOT");
+ }
+
@Test
public void should_not_update_the_project_if_group_doesnt_match() throws Exception {
File originalPom = pom("/projects/project/children", "pom_case_from_contract.xml");
diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java
index 96900e8e..27eeb2c8 100644
--- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java
+++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java
@@ -27,7 +27,6 @@ import org.springframework.util.FileSystemUtils;
*/
public class ProjectBuilderTests {
- TestPomReader reader = new TestPomReader();
@Rule public TemporaryFolder tmp = new TemporaryFolder();
File temporaryFolder;
@Rule public OutputCapture outputCapture = new OutputCapture();
diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_plugin.xml b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_plugin.xml
new file mode 100644
index 00000000..61652b99
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_plugin.xml
@@ -0,0 +1,51 @@
+
+
+
+
+ 4.0.0
+
+ com.example
+ http-server-dsl
+ 1.2.2.BUILD-SNAPSHOT
+
+ Spring Cloud Contract Verifier Http Server Sample
+ Spring Cloud Contract Verifier Http Server Sample
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.8.RELEASE
+
+
+
+
+ 1.3.1.BUILD-SNAPSHOT
+
+
+
+
+
+ maven-deploy-plugin
+
+ true
+
+
+
+
+
diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_plugin_mngmnt.xml b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_plugin_mngmnt.xml
new file mode 100644
index 00000000..d70d7ce8
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_plugin_mngmnt.xml
@@ -0,0 +1,53 @@
+
+
+
+
+ 4.0.0
+
+ com.example
+ http-server-dsl
+ 1.2.2.BUILD-SNAPSHOT
+
+ Spring Cloud Contract Verifier Http Server Sample
+ Spring Cloud Contract Verifier Http Server Sample
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.8.RELEASE
+
+
+
+
+ 1.3.1.BUILD-SNAPSHOT
+
+
+
+
+
+
+ maven-deploy-plugin
+
+ true
+
+
+
+
+
+
diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_prop.xml b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_prop.xml
new file mode 100644
index 00000000..a2904f27
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group_skip_deployment_prop.xml
@@ -0,0 +1,49 @@
+
+
+
+
+ 4.0.0
+
+ com.example
+ http-server-dsl
+ 1.2.2.BUILD-SNAPSHOT
+
+ Spring Cloud Contract Verifier Http Server Sample
+ Spring Cloud Contract Verifier Http Server Sample
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.8.RELEASE
+
+
+
+
+ 1.3.1.BUILD-SNAPSHOT
+ true
+
+
+
+
+
+ maven-deploy-plugin
+
+
+
+