diff --git a/docs/src/main/asciidoc/spring-cloud-release-tools.adoc b/docs/src/main/asciidoc/spring-cloud-release-tools.adoc
index 4152e2f5..87340716 100644
--- a/docs/src/main/asciidoc/spring-cloud-release-tools.adoc
+++ b/docs/src/main/asciidoc/spring-cloud-release-tools.adoc
@@ -610,3 +610,15 @@ $ eval `ssh-agent`
# to store the pass in the agent
$ ssh-add ~/.ssh/id_rsa
----
+
+==== Skipping version check
+
+If you know what you're doing and want to skip snapshot / milestone version check for poms or any other files, just set the following comment [`@releaser:version-check-off`] in the same line where the version appears. Example:
+
+[source,xml]
+----
+
+ 1.19.2-M2
+ 0.6.12
+
+----
\ No newline at end of file
diff --git a/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java b/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java
index 46d41e63..abe97711 100644
--- a/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java
+++ b/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java
@@ -51,6 +51,8 @@ public class ProjectPomUpdater implements Closeable {
// issue [#80]
"^[\\s]*.*$");
+ private static final String SPECIAL_LINE_IGNORING_COMMENT = "@releaser:version-check-off";
+
private static final Logger log = LoggerFactory.getLogger(ProjectPomUpdater.class);
private static final boolean UPDATE_FIXED_VERSIONS = true;
@@ -237,6 +239,7 @@ public class ProjectPomUpdater implements Closeable {
.stream()
.filter(pattern -> IGNORED_SNAPSHOT_LINE_PATTERNS.stream()
.noneMatch(line::matches)
+ && !line.contains(SPECIAL_LINE_IGNORING_COMMENT)
&& pattern.matcher(line).lookingAt())
.findFirst().orElse(null);
if (matchingPattern != null) {
diff --git a/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java b/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java
index 3baa8817..7dc93b36 100644
--- a/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java
+++ b/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java
@@ -158,6 +158,32 @@ public class PomUpdateAcceptanceTests {
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties,
Collections
.singletonList(MavenBomParserAccessor.maven(releaserProperties)));
+ Projects projects = projects(projectPomUpdater);
+ File project = new File(this.temporaryFolder,
+ "/spring-cloud-sleuth-with-milestone-dep");
+
+ BDDAssertions
+ .thenThrownBy(() -> projectPomUpdater.updateProjectFromReleaseTrain(
+ project, projects, projects.forFile(project), true))
+ .hasMessageContaining("1.19.2-M2");
+ }
+
+ @Test
+ public void should_not_fail_update_when_after_updating_a_release_candidate_version_there_still_is_a_milestone_version_with_a_line_to_ignore()
+ throws Exception {
+ ReleaserProperties releaserProperties = branchReleaserProperties();
+ ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties,
+ Collections
+ .singletonList(MavenBomParserAccessor.maven(releaserProperties)));
+ Projects projects = projects(projectPomUpdater);
+ File project = new File(this.temporaryFolder,
+ "/spring-cloud-sleuth-with-ignored-line");
+
+ projectPomUpdater.updateProjectFromReleaseTrain(project, projects,
+ projects.forFile(project), true);
+ }
+
+ private Projects projects(ProjectPomUpdater projectPomUpdater) {
Projects projects = projectPomUpdater.retrieveVersionsFromReleaseTrainBom();
projects.removeIf(
projectVersion -> projectVersion.projectName.equals("spring-cloud"));
@@ -177,13 +203,7 @@ public class PomUpdateAcceptanceTests {
projects.removeIf(projectVersion -> projectVersion.projectName
.contains("spring-cloud-build"));
projects.add(new ProjectVersion("spring-cloud-build", "1.4.2.RELEASE"));
- File project = new File(this.temporaryFolder,
- "/spring-cloud-sleuth-with-milestone-dep");
-
- BDDAssertions
- .thenThrownBy(() -> projectPomUpdater.updateProjectFromReleaseTrain(
- project, projects, projects.forFile(project), true))
- .hasMessageContaining("1.19.2-M2");
+ return projects;
}
@Test
diff --git a/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-ignored-line/pom.xml b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-ignored-line/pom.xml
new file mode 100644
index 00000000..c29243aa
--- /dev/null
+++ b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-ignored-line/pom.xml
@@ -0,0 +1,368 @@
+
+
+ 4.0.0
+
+ spring-cloud-sleuth
+ 0.2.0-SNAPSHOT
+ pom
+ Spring Cloud Sleuth
+ Spring Cloud Sleuth
+
+
+ org.springframework.cloud
+ spring-cloud-build
+ 1.4.2
+
+
+
+
+
+ https://github.com/spring-cloud/spring-cloud-sleuth
+ scm:git:git://github.com/spring-cloud/spring-cloud-sleuth.git
+ scm:git:ssh://git@github.com/spring-cloud/spring-cloud-sleuth.git
+ HEAD
+
+
+
+ spring-cloud-sleuth-dependencies
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+
+ default-compile
+
+ true
+ true
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+ default-testCompile
+
+ true
+ true
+
+ ${maven.compiler.testSource}
+ ${maven.compiler.testTarget}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 1.3.1
+
+
+ enforce-java
+
+ enforce
+
+
+
+
+ ${maven.compiler.testTarget}
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ ${checkstyle.version}
+
+
+ org.springframework.cloud
+ spring-cloud-build-tools
+ ${spring-cloud-build.version}
+
+
+
+
+ validate
+ validate
+
+ checkstyle.xml
+ LICENSE.txt
+ true
+ true
+
+
+ check
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ ${checkstyle.version}
+
+ checkstyle.xml
+ LICENSE.txt
+
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-sleuth-dependencies
+ ${project.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-dependencies
+ ${spring-cloud-netflix.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-commons-dependencies
+ ${spring-cloud-commons.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-stream-dependencies
+ ${spring-cloud-stream.version}
+ pom
+ import
+
+
+
+ org.spockframework
+ spock-core
+ ${spock.version}
+ test
+
+
+ org.spockframework
+ spock-spring
+ ${spock.version}
+ test
+
+
+ cglib
+ cglib-nodep
+ 3.1
+
+
+ org.objenesis
+ objenesis
+ 2.1
+
+
+
+ org.hamcrest
+ hamcrest-core
+ test
+
+
+ com.jayway.awaitility
+ awaitility
+ 1.7.0
+ test
+
+
+ com.github.tomakehurst
+ wiremock
+ 2.5.1
+ test
+
+
+ pl.pragmatists
+ JUnitParams
+ 1.0.6
+ test
+
+
+ org.assertj
+ assertj-core
+ 3.6.2
+ test
+
+
+
+
+
+ 1.7
+ 1.7
+ 1.8
+ 1.8
+ 2.19.1
+ 2.17
+ 0.3.1-SNAPSHOT
+ 0.2.0-SNAPSHOT
+ Foo-SNAPSHOT
+ 0.3.0-SNAPSHOT
+
+
+
+
+ spring
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+ false
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/libs-milestone-local
+
+ false
+
+
+ false
+
+
+
+ spring-releases
+ Spring Releases
+ https://repo.spring.io/release
+
+ false
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+ false
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/libs-milestone-local
+
+ false
+
+
+
+ spring-releases
+ Spring Releases
+ https://repo.spring.io/libs-release-local
+
+ false
+
+
+
+
+
+ ide
+
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+ ${maven.compiler.testSource}
+ ${maven.compiler.testTarget}
+
+
+
+
+
+
+ benchmarks
+
+ false
+
+
+ benchmarks
+
+
+
+ sonar
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ pre-unit-test
+
+ prepare-agent
+
+
+ surefireArgLine
+ ${project.build.directory}/jacoco.exec
+
+
+
+ post-unit-test
+ test
+
+ report
+
+
+
+ ${project.build.directory}/jacoco.exec
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${surefire.plugin.version}
+
+
+ ${surefireArgLine}
+
+
+
+
+
+
+
+
diff --git a/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-ignored-line/spring-cloud-sleuth-dependencies/pom.xml b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-ignored-line/spring-cloud-sleuth-dependencies/pom.xml
new file mode 100644
index 00000000..cac9ba46
--- /dev/null
+++ b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-ignored-line/spring-cloud-sleuth-dependencies/pom.xml
@@ -0,0 +1,139 @@
+
+
+ 4.0.0
+
+ spring-cloud-dependencies-parent
+ org.springframework.cloud
+ 1.4.2
+
+
+ spring-cloud-sleuth-dependencies
+ 0.2.0-SNAPSHOT
+ pom
+ spring-cloud-sleuth-dependencies
+ Spring Cloud Sleuth Dependencies
+
+ 1.19.2-M2
+ 0.6.12
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-sleuth-core
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-sleuth-zipkin
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-sleuth-stream
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-sleuth-zipkin-stream
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zipkin
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-sleuth
+ ${project.version}
+
+
+ io.zipkin.java
+ zipkin
+ ${zipkin.version}
+
+
+ io.zipkin.java
+ zipkin-server
+ ${zipkin.version}
+
+
+ io.zipkin.java
+ zipkin-autoconfigure-ui
+ ${zipkin.version}
+
+
+ io.zipkin.java
+ zipkin-autoconfigure-storage-mysql
+ ${zipkin.version}
+
+
+ io.zipkin.java
+ zipkin-junit
+ ${zipkin.version}
+
+
+ io.zipkin.reporter
+ zipkin-reporter
+ ${zipkin-reporter.version}
+
+
+
+
+
+ spring
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+ false
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/libs-milestone-local
+
+ false
+
+
+
+ spring-releases
+ Spring Releases
+ https://repo.spring.io/release
+
+ false
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+ false
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/libs-milestone-local
+
+ false
+
+
+
+
+
+