You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/01/08 21:33:30 UTC
[maven-release] branch master updated: [MRELEASE-835] Automatically
resolve snapshot dependencies in release:prepare
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-release.git
The following commit(s) were added to refs/heads/master by this push:
new ec43b59 [MRELEASE-835] Automatically resolve snapshot dependencies in release:prepare
ec43b59 is described below
commit ec43b594ff00003c280b90954862dcf32ccaa4fe
Author: Thorsten Heit <th...@gmx.de>
AuthorDate: Wed Jan 8 21:33:19 2020 +0000
[MRELEASE-835] Automatically resolve snapshot dependencies in release:prepare
---
.../shared/release/config/ReleaseDescriptor.java | 17 ++++
.../config/PropertiesReleaseDescriptorStore.java | 5 +
.../release/config/ReleaseDescriptorBuilder.java | 6 ++
.../maven/shared/release/config/ReleaseUtils.java | 5 +
.../phase/CheckDependencySnapshotsPhase.java | 103 +++++++++++++++++----
.../src/main/mdo/release-descriptor.mdo | 24 ++++-
.../src/it/projects/prepare/MRELEASE-835/pom.xml | 71 ++++++++++++++
.../it/projects/prepare/MRELEASE-835/verify.groovy | 28 ++++++
.../maven/plugins/release/PrepareReleaseMojo.java | 22 +++++
9 files changed, 264 insertions(+), 17 deletions(-)
diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
index a6d03c2..8044004 100644
--- a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
@@ -464,4 +464,21 @@ public interface ReleaseDescriptor
void setScmRelativePathProjectDirectory( String scmRelativePathProjectDirectory );
void setScmSourceUrl( String scmUrl );
+
+ /**
+ * Returns whether unresolved SNAPSHOT dependencies should automatically be resolved.
+ * If this is set, then this specifies the default answer to be used when unresolved SNAPSHOT
+ * dependencies should automatically be resolved ( 0:All 1:Project Dependencies 2:Plugins
+ * 3:Reports 4:Extensions ). Possible values are:
+ * <ul>
+ * <li>"all" or "0": resolve all kinds of snapshots, ie. project, plugin, report and extension dependencies </li>
+ * <li>"dependencies" or "1": resolve project dependencies</li>
+ * <li>"plugins" or "2": resolve plugin dependencis</li>
+ * <li>"reports" or "3": resolve report dependencies</li>
+ * <li>"extensions" or "4": resolve extension dependencies</li>
+ * </ul>
+ *
+ * @return String
+ */
+ String getAutoResolveSnapshots();
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
index 262b21d..f1272de 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
@@ -256,6 +256,11 @@ public class PropertiesReleaseDescriptorStore
properties.setProperty( "workItem", config.getWorkItem() );
}
+ if ( config.getAutoResolveSnapshots() != null )
+ {
+ properties.setProperty( "autoResolveSnapshots", config.getAutoResolveSnapshots() );
+ }
+
// others boolean properties are not written to the properties file because the value from the caller is always
// used
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
index 745dc4d..629a897 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
@@ -440,6 +440,12 @@ public class ReleaseDescriptorBuilder
return this;
}
+ public ReleaseDescriptorBuilder setAutoResolveSnapshots( String autoResolveSnapshots )
+ {
+ releaseDescriptor.setAutoResolveSnapshots( autoResolveSnapshots );
+ return this;
+ }
+
BuilderReleaseDescriptor build()
{
return releaseDescriptor;
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
index bc48cc5..bcaf758 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
@@ -170,6 +170,11 @@ public class ReleaseUtils
{
builder.setWorkItem( properties.getProperty( "workItem" ) );
}
+ if ( properties.containsKey( "autoResolveSnapshots" ) )
+ {
+ String resolve = properties.getProperty( "autoResolveSnapshots" );
+ builder.setAutoResolveSnapshots( resolve );
+ }
loadResolvedDependencies( properties, builder );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
index b19b446..55821c0 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
@@ -144,7 +144,7 @@ public class CheckDependencySnapshotsPhase
if ( !usedSnapshotDependencies.isEmpty() || !usedSnapshotReports.isEmpty()
|| !usedSnapshotExtensions.isEmpty() || !usedSnapshotPlugins.isEmpty() )
{
- if ( releaseDescriptor.isInteractive() )
+ if ( releaseDescriptor.isInteractive() || null != releaseDescriptor.getAutoResolveSnapshots() )
{
resolveSnapshots( usedSnapshotDependencies, usedSnapshotReports, usedSnapshotExtensions,
usedSnapshotPlugins, releaseDescriptor );
@@ -365,10 +365,19 @@ public class CheckDependencySnapshotsPhase
{
try
{
+ String autoResolveSnapshots = releaseDescriptor.getAutoResolveSnapshots();
if ( resolveSnapshot == null )
{
prompter.showMessage( RESOLVE_SNAPSHOT_MESSAGE );
- resolveSnapshot = prompter.prompt( RESOLVE_SNAPSHOT_PROMPT, Arrays.asList( "yes", "no" ), "no" );
+ if ( autoResolveSnapshots != null )
+ {
+ resolveSnapshot = "yes";
+ prompter.showMessage( RESOLVE_SNAPSHOT_PROMPT + " " + resolveSnapshot );
+ }
+ else
+ {
+ resolveSnapshot = prompter.prompt( RESOLVE_SNAPSHOT_PROMPT, Arrays.asList( "yes", "no" ), "no" );
+ }
}
if ( resolveSnapshot.toLowerCase( Locale.ENGLISH ).startsWith( "y" ) )
@@ -376,38 +385,81 @@ public class CheckDependencySnapshotsPhase
if ( resolveSnapshotType == null )
{
prompter.showMessage( RESOLVE_SNAPSHOT_TYPE_MESSAGE );
- resolveSnapshotType =
- prompter.prompt( RESOLVE_SNAPSHOT_TYPE_PROMPT, Arrays.asList( "0", "1", "2", "3" ), "1" );
+ int defaultAnswer = -1;
+ if ( autoResolveSnapshots != null )
+ {
+ if ( "all".equalsIgnoreCase( autoResolveSnapshots ) )
+ {
+ defaultAnswer = 0;
+ }
+ else if ( "dependencies".equalsIgnoreCase( autoResolveSnapshots ) )
+ {
+ defaultAnswer = 1;
+ }
+ else if ( "plugins".equalsIgnoreCase( autoResolveSnapshots ) )
+ {
+ defaultAnswer = 2;
+ }
+ else if ( "reports".equalsIgnoreCase( autoResolveSnapshots ) )
+ {
+ defaultAnswer = 3;
+ }
+ else if ( "extensions".equalsIgnoreCase( autoResolveSnapshots ) )
+ {
+ defaultAnswer = 4;
+ }
+ else
+ {
+ try
+ {
+ defaultAnswer = Integer.parseInt( autoResolveSnapshots );
+ }
+ catch ( NumberFormatException e )
+ {
+ throw new ReleaseExecutionException( e.getMessage(), e );
+ }
+ }
+ }
+ if ( defaultAnswer >= 0 && defaultAnswer <= 4 )
+ {
+ prompter.showMessage( RESOLVE_SNAPSHOT_TYPE_PROMPT + " " + autoResolveSnapshots );
+ resolveSnapshotType = Integer.toString( defaultAnswer );
+ }
+ else
+ {
+ resolveSnapshotType =
+ prompter.prompt( RESOLVE_SNAPSHOT_TYPE_PROMPT, Arrays.asList( "0", "1", "2", "3" ), "1" );
+ }
}
switch ( Integer.parseInt( resolveSnapshotType.toLowerCase( Locale.ENGLISH ) ) )
{
// all
case 0:
- processSnapshot( projectDependencies, releaseDescriptor );
- processSnapshot( pluginDependencies, releaseDescriptor );
- processSnapshot( reportDependencies, releaseDescriptor );
- processSnapshot( extensionDependencies, releaseDescriptor );
+ processSnapshot( projectDependencies, releaseDescriptor, autoResolveSnapshots );
+ processSnapshot( pluginDependencies, releaseDescriptor, autoResolveSnapshots );
+ processSnapshot( reportDependencies, releaseDescriptor, autoResolveSnapshots );
+ processSnapshot( extensionDependencies, releaseDescriptor, autoResolveSnapshots );
break;
// project dependencies
case 1:
- processSnapshot( projectDependencies, releaseDescriptor );
+ processSnapshot( projectDependencies, releaseDescriptor, autoResolveSnapshots );
break;
// plugins
case 2:
- processSnapshot( pluginDependencies, releaseDescriptor );
+ processSnapshot( pluginDependencies, releaseDescriptor, autoResolveSnapshots );
break;
// reports
case 3:
- processSnapshot( reportDependencies, releaseDescriptor );
+ processSnapshot( reportDependencies, releaseDescriptor, autoResolveSnapshots );
break;
// extensions
case 4:
- processSnapshot( extensionDependencies, releaseDescriptor );
+ processSnapshot( extensionDependencies, releaseDescriptor, autoResolveSnapshots );
break;
default:
@@ -420,7 +472,8 @@ public class CheckDependencySnapshotsPhase
}
}
- private void processSnapshot( Set<Artifact> snapshotSet, ReleaseDescriptor releaseDescriptor )
+ private void processSnapshot( Set<Artifact> snapshotSet, ReleaseDescriptor releaseDescriptor,
+ String autoResolveSnapshots )
throws PrompterException, VersionParseException
{
Iterator<Artifact> iterator = snapshotSet.iterator();
@@ -435,8 +488,17 @@ public class CheckDependencySnapshotsPhase
prompter.showMessage(
"Dependency '" + versionlessKey + "' is a snapshot (" + currentArtifact.getVersion() + ")\n" );
- String result = prompter.prompt( "Which release version should it be set to?",
- versionInfo.getReleaseVersionString() );
+ String message = "Which release version should it be set to?";
+ String result;
+ if ( null != autoResolveSnapshots )
+ {
+ result = versionInfo.getReleaseVersionString();
+ prompter.showMessage( message + " " + result );
+ }
+ else
+ {
+ result = prompter.prompt( message, versionInfo.getReleaseVersionString() );
+ }
releaseDescriptor.addDependencyReleaseVersion( versionlessKey, result );
@@ -456,7 +518,16 @@ public class CheckDependencySnapshotsPhase
nextVersion = versionInfo.toString();
}
- result = prompter.prompt( "What version should the dependency be reset to for development?", nextVersion );
+ message = "What version should the dependency be reset to for development?";
+ if ( null != autoResolveSnapshots )
+ {
+ result = nextVersion;
+ prompter.showMessage( message + " " + result );
+ }
+ else
+ {
+ result = prompter.prompt( message, nextVersion );
+ }
releaseDescriptor.addDependencyDevelopmentVersion( versionlessKey, result );
}
diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo
index b63c4b4..6bf44f2 100644
--- a/maven-release-manager/src/main/mdo/release-descriptor.mdo
+++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo
@@ -563,6 +563,26 @@
</description>
</field>
+ <field>
+ <name>autoResolveSnapshots</name>
+ <version>3.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[Specifies whether unresolved SNAPSHOT dependencies are automatically resolved.
+ If set, it is used as the answer to use when being asked how unresolved SNAPSHOT
+ dependencies should be resolved:
+ <ul>
+ <li>"all" or "0": resolve all kinds of snapshots, ie. project, plugin, report and extension dependencies</li>
+ <li>"dependencies" or "1": resolve project dependencies</li>
+ <li>"plugins" or "2": resolve plugin dependencies</li>
+ <li>"reports" or "3": resolve report dependencies</li>
+ <li>"extensions" or "4": resolve extension dependencies</li>
+ </ul>
+ Additionally this implies that the default values for the dependency's release and next
+ development version are used.]]>
+ </description>
+ </field>
+
<!-- Announcement Information
Announcement related info, this can be a second part of the process.
@@ -798,7 +818,8 @@
!java.util.Objects.equals( performGoals, that.getPerformGoals() ) ||
!java.util.Objects.equals( defaultReleaseVersion, that.getDefaultReleaseVersion() ) ||
!java.util.Objects.equals( workItem, that.getWorkItem() ) ||
- !java.util.Objects.equals( scmReleasedPomRevision, that.getScmReleasedPomRevision() )
+ !java.util.Objects.equals( scmReleasedPomRevision, that.getScmReleasedPomRevision() ) ||
+ !java.util.Objects.equals( autoResolveSnapshots, that.getAutoResolveSnapshots() )
)
{
return false;
@@ -1054,6 +1075,7 @@
result = 29 * result + java.util.Objects.hashCode( defaultReleaseVersion );
result = 29 * result + java.util.Objects.hashCode( scmReleasedPomRevision );
result = 29 * result + java.util.Objects.hashCode( workItem );
+ result = 29 * result + java.util.Objects.hashCode( autoResolveSnapshots );
return result;
}
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/pom.xml b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/pom.xml
new file mode 100644
index 0000000..38bd07e
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins.release.its</groupId>
+ <artifactId>mrelease-835</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <scm>
+ <connection>scm:dummy|nul</connection>
+ <developerConnection>scm:dummy|nul</developerConnection>
+ </scm>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>@project.version@</version>
+ <configuration>
+ <autoResolveSnapshots>dependencies</autoResolveSnapshots>
+ <arguments>-Dflag -Dfoo=bar</arguments>
+ <mavenExecutorId>invoker</mavenExecutorId>
+ <goals>validate</goals>
+ <preparationGoals>validate</preparationGoals>
+ <completionGoals>verify</completionGoals>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.release</groupId>
+ <artifactId>maven-scm-provider-dummy</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>dependency</artifactId>
+ <version>1.2.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>dependency.test</artifactId>
+ <version>2.3.4-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/verify.groovy
new file mode 100644
index 0000000..027cc50
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/verify.groovy
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.exists()
+
+assert 1 == buildLog.getText().count("[DEBUG] (f) autoResolveSnapshots = dependencies")
+
+File pomXmlNext = new File( basedir, 'pom.xml.next' )
+assert pomXmlNext.exists()
+assert 1 == pomXmlNext.getText().count("<version>1.2.3</version>")
+assert 1 == pomXmlNext.getText().count("<version>2.3.4</version>")
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
index 1c3e057..9e601c0 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
@@ -280,6 +280,27 @@ public class PrepareReleaseMojo
property = "scmDevelopmentCommitComment" )
private String scmDevelopmentCommitComment = "@{prefix} prepare for next development iteration";
+ /**
+ * Specifies whether unresolved SNAPSHOT dependencies should automatically be resolved.
+ * If this is set, then this specifies the default answer to be used when unresolved SNAPSHOT
+ * dependencies should automatically be resolved ( 0:All 1:Project Dependencies 2:Plugins
+ * 3:Reports 4:Extensions ). Possible values are:
+ * <ul>
+ * <li>"all" or "0": resolve all kinds of snapshots, ie. project, plugin, report and extension dependencies </li>
+ * <li>"dependencies" or "1": resolve project dependencies</li>
+ * <li>"plugins" or "2": resolve plugin dependencis</li>
+ * <li>"reports" or "3": resolve report dependencies</li>
+ * <li>"extensions" or "4": resolve extension dependencies</li>
+ * </ul>
+ *
+ * @since 3.0.0
+ */
+ @Parameter( property = "autoResolveSnapshots" )
+ private String autoResolveSnapshots;
+
+ /**
+ * {@inheritDoc}
+ */
@Override
public void execute()
throws MojoExecutionException, MojoFailureException
@@ -321,6 +342,7 @@ public class PrepareReleaseMojo
config.setProjectNamingPolicyId( projectTagNamingPolicyId );
config.setScmDevelopmentCommitComment( scmDevelopmentCommitComment );
config.setScmReleaseCommitComment( scmReleaseCommitComment );
+ config.setAutoResolveSnapshots( autoResolveSnapshots );
if ( checkModificationExcludeList != null )
{