diff --git a/src/it/released-version-existing-snapshot/invoker.properties b/src/it/released-version-existing-snapshot/invoker.properties
new file mode 100644
index 00000000..93b7e528
--- /dev/null
+++ b/src/it/released-version-existing-snapshot/invoker.properties
@@ -0,0 +1,2 @@
+invoker.goals = validate
+invoker.settingsFile = src/it/released-version-existing-snapshot/settings-maven-oss-snapshot.xml
diff --git a/src/it/released-version-existing-snapshot/pom.xml b/src/it/released-version-existing-snapshot/pom.xml
new file mode 100644
index 00000000..501a9873
--- /dev/null
+++ b/src/it/released-version-existing-snapshot/pom.xml
@@ -0,0 +1,32 @@
+
+ 4.0.0
+
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+ 1.0.0-SNAPHOST
+ build-helper-maven-plugin-released-version-it
+
+
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+ released-version
+
+ released-version
+
+
+ myReleasedVersion
+
+
+
+
+
+
+
+
diff --git a/src/it/released-version-existing-snapshot/settings-maven-oss-snapshot.xml b/src/it/released-version-existing-snapshot/settings-maven-oss-snapshot.xml
new file mode 100644
index 00000000..6fc12b25
--- /dev/null
+++ b/src/it/released-version-existing-snapshot/settings-maven-oss-snapshot.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+ default
+
+
+
+ oss-snap
+ https://oss.sonatype.org/content/groups/public/
+
+ false
+ fail
+
+
+ true
+ fail
+
+
+
+
+
+
+ default
+
+
diff --git a/src/it/released-version-existing-snapshot/verify.groovy b/src/it/released-version-existing-snapshot/verify.groovy
new file mode 100644
index 00000000..9e0650bc
--- /dev/null
+++ b/src/it/released-version-existing-snapshot/verify.groovy
@@ -0,0 +1,11 @@
+File file = new File( basedir, "build.log" );
+assert file.exists();
+
+String text = file.getText("utf-8");
+
+// we have SNAPSHOT on list
+assert text.matches('(?ms)^.*Resolved versions: .*-SNAPSHOT.*$')
+
+// but released version is not a SNAPSHOT
+assert text.matches( '(?ms)^.*Released version: .*$')
+assert !text.matches( '(?ms)^.*Released version: .*-SNAPSHOT.*$')
diff --git a/src/it/remove-project-artifact/invoker.properties b/src/it/remove-project-artifact/invoker.properties
new file mode 100644
index 00000000..ac820416
--- /dev/null
+++ b/src/it/remove-project-artifact/invoker.properties
@@ -0,0 +1,5 @@
+# first install something
+invoker.goals.1 = install
+
+# next try to delete
+invoker.goals.2 = package
diff --git a/src/it/remove-project-artifact/pom.xml b/src/it/remove-project-artifact/pom.xml
new file mode 100644
index 00000000..f9b421cb
--- /dev/null
+++ b/src/it/remove-project-artifact/pom.xml
@@ -0,0 +1,26 @@
+
+ 4.0.0
+
+ org.codehaus.mojo
+ remove-project-artifact-it
+ 1.0-SNAPSHOT
+
+
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+ released-version
+
+ remove-project-artifact
+
+
+
+
+
+
+
+
diff --git a/src/it/remove-project-artifact/verify.groovy b/src/it/remove-project-artifact/verify.groovy
new file mode 100644
index 00000000..122decda
--- /dev/null
+++ b/src/it/remove-project-artifact/verify.groovy
@@ -0,0 +1,8 @@
+File file = new File(basedir, "build.log");
+assert file.exists();
+
+String text = file.getText("utf-8");
+
+def FS = File.separator
+
+assert 2 == text.count("org${FS}codehaus${FS}mojo${FS}remove-project-artifact-it removed.") : 'removed log should be present twice'
diff --git a/src/main/java/org/codehaus/mojo/buildhelper/ReleasedVersionMojo.java b/src/main/java/org/codehaus/mojo/buildhelper/ReleasedVersionMojo.java
index 77d3c7fa..67260e47 100644
--- a/src/main/java/org/codehaus/mojo/buildhelper/ReleasedVersionMojo.java
+++ b/src/main/java/org/codehaus/mojo/buildhelper/ReleasedVersionMojo.java
@@ -24,19 +24,21 @@
* SOFTWARE.
*/
-import java.util.List;
import java.util.Objects;
import org.apache.maven.artifact.ArtifactUtils;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.resolution.VersionRangeRequest;
+import org.eclipse.aether.resolution.VersionRangeResolutionException;
+import org.eclipse.aether.resolution.VersionRangeResult;
/**
* Resolve the latest released version of this project. This mojo sets the following properties:
@@ -46,6 +48,8 @@
* [propertyPrefix].majorVersion
* [propertyPrefix].minorVersion
* [propertyPrefix].incrementalVersion
+ * [propertyPrefix].buildNumber
+ * [propertyPrefix].qualifier
*
*
* Where the propertyPrefix is the string set in the mojo parameter.
@@ -61,17 +65,15 @@ public class ReleasedVersionMojo
/**
* The artifact metadata source to use.
*/
- @Component
- private ArtifactMetadataSource artifactMetadataSource;
@Component
- private ArtifactFactory artifactFactory;
+ private RepositorySystem repoSystem;
- @Parameter( defaultValue = "${localRepository}", readonly = true )
- private ArtifactRepository localRepository;
+ @Component
+ private ArtifactHandlerManager artifactHandlerManager;
- @Parameter( defaultValue = "${project.remoteArtifactRepositories}", readonly = true )
- private List remoteArtifactRepositories;
+ @Parameter( defaultValue = "${repositorySystemSession}", readonly = true )
+ private RepositorySystemSession repoSession;
/**
* Prefix string to use for the set of version properties.
@@ -92,6 +94,7 @@ private void defineVersionProperty( String name, int value )
@SuppressWarnings( "unchecked" )
public void execute()
{
+
/*
* We use a dummy version "0" here to check for all released version.
* Reason: The current project's version is completely irrelevant for the check to retrieve all available versions.
@@ -100,23 +103,27 @@ public void execute()
* Using the dummy version "0" which looks like a released version, the repos with releases are requested.
* see https://github.com/mojohaus/build-helper-maven-plugin/issues/108
*/
- final String DUMMY_VERSION = "0";
- org.apache.maven.artifact.Artifact artifact =
- artifactFactory.createArtifact( getProject().getGroupId(), getProject().getArtifactId(), DUMMY_VERSION, "", "" );
try
{
- ArtifactVersion releasedVersion = null;
- List versions =
- artifactMetadataSource.retrieveAvailableVersions( artifact, localRepository,
- remoteArtifactRepositories );
- for ( ArtifactVersion version : versions )
- {
- if ( !ArtifactUtils.isSnapshot( version.toString() )
- && ( releasedVersion == null || version.compareTo( releasedVersion ) > 0 ) )
- {
- releasedVersion = version;
- }
- }
+
+ DefaultArtifact artifact =
+ new DefaultArtifact(getProject().getGroupId(), getProject().getArtifactId(),
+ artifactHandlerManager.getArtifactHandler(getProject().getPackaging()).getExtension(), "[0,)");
+
+ getLog().debug("Artifact for lookup released version: " + artifact);
+ VersionRangeRequest request = new VersionRangeRequest(artifact, getProject().getRemoteProjectRepositories(), null);
+
+ VersionRangeResult versionRangeResult = repoSystem.resolveVersionRange(repoSession, request);
+
+ getLog().debug("Resolved versions: " + versionRangeResult.getVersions());
+
+ DefaultArtifactVersion releasedVersion = versionRangeResult.getVersions().stream()
+ .filter(v -> !ArtifactUtils.isSnapshot(v.toString()))
+ .map(v -> new DefaultArtifactVersion(v.toString()))
+ .max(DefaultArtifactVersion::compareTo)
+ .orElse(null);
+
+ getLog().debug("Released version: " + releasedVersion);
if ( releasedVersion != null )
{
@@ -142,7 +149,7 @@ public void execute()
}
}
- catch ( ArtifactMetadataRetrievalException e )
+ catch (VersionRangeResolutionException e )
{
if ( getLog().isWarnEnabled() )
{
diff --git a/src/main/java/org/codehaus/mojo/buildhelper/RemoveLocalArtifactMojo.java b/src/main/java/org/codehaus/mojo/buildhelper/RemoveLocalArtifactMojo.java
index 1e2c59b0..9603b9cf 100644
--- a/src/main/java/org/codehaus/mojo/buildhelper/RemoveLocalArtifactMojo.java
+++ b/src/main/java/org/codehaus/mojo/buildhelper/RemoveLocalArtifactMojo.java
@@ -27,14 +27,16 @@
import java.io.File;
import java.io.IOException;
-import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.RepositoryUtils;
import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.FileUtils;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.LocalRepositoryManager;
/**
* Remove project's artifacts from local repository. Useful to keep only one copy of large local snapshot, for example:
@@ -71,18 +73,18 @@ public class RemoveLocalArtifactMojo
@Parameter( readonly = true, defaultValue = "${project}" )
private MavenProject project;
- /**
- * @since 1.1
- */
- @Parameter( defaultValue = "${localRepository}", readonly = true )
- private ArtifactRepository localRepository;
+ @Parameter( readonly = true, defaultValue = "${repositorySystemSession}" )
+ private RepositorySystemSession repoSession;
public void execute()
- throws MojoFailureException
+ throws MojoExecutionException
{
- File localArtifactFile =
- new File( localRepository.getBasedir(), localRepository.pathOf( project.getArtifact() ) );
+ LocalRepositoryManager lrm = repoSession.getLocalRepositoryManager();
+
+ String artifactPath = lrm.getPathForLocalArtifact(RepositoryUtils.toArtifact(project.getArtifact()));
+ File repoBasedir = lrm.getRepository().getBasedir();
+ File localArtifactFile = new File( repoBasedir, artifactPath );
File localArtifactDirectory = localArtifactFile.getParentFile();
if ( removeAll )
@@ -104,7 +106,7 @@ public void execute()
final String failureMessage = "Cannot delete " + localArtifactDirectory;
if ( failOnError )
{
- throw new MojoFailureException( failureMessage );
+ throw new MojoExecutionException( failureMessage );
}
else
{