You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2019/07/26 06:56:42 UTC
[maven-invoker-plugin] branch master updated: [MINVOKER-249]
InstallMojo extraArtifacts are always downloaded (optionally local repo
must checked first)
This is an automated email from the ASF dual-hosted git repository.
olamy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-invoker-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new ecb35c2 [MINVOKER-249] InstallMojo extraArtifacts are always downloaded (optionally local repo must checked first)
ecb35c2 is described below
commit ecb35c2e729e130581075a2bc33d8b770b8d072c
Author: olivier lamy <ol...@apache.org>
AuthorDate: Fri Jul 26 16:56:23 2019 +1000
[MINVOKER-249] InstallMojo extraArtifacts are always downloaded (optionally local repo must checked first)
Signed-off-by: olivier lamy <ol...@apache.org>
---
pom.xml | 6 ++
src/it/install-extra-artifacts-local-repo/pom.xml | 71 +++++++++++++++++++++
.../install-extra-artifacts-local-repo/verify.bsh | 69 +++++++++++++++++++++
.../apache/maven/plugins/invoker/InstallMojo.java | 72 ++++++++++++++++++----
4 files changed, 205 insertions(+), 13 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5461d7a..342467b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -333,6 +333,12 @@ under the License.
<goal>clean</goal>
<goal>initialize</goal>
</goals>
+ <extraArtifacts>
+ <extraArtifact>junit:junit:3.8.2</extraArtifact>
+ <extraArtifact>org.apache.maven.plugins:maven-clean-plugin:2.4:maven-plugin</extraArtifact>
+ <extraArtifact>org.apache.maven.plugins:maven-clean-plugin:2.4:jar:javadoc</extraArtifact>
+ <extraArtifact>jdom:jdom:1.1</extraArtifact>
+ </extraArtifacts>
</configuration>
</plugin>
</plugins>
diff --git a/src/it/install-extra-artifacts-local-repo/pom.xml b/src/it/install-extra-artifacts-local-repo/pom.xml
new file mode 100644
index 0000000..6634ce0
--- /dev/null
+++ b/src/it/install-extra-artifacts-local-repo/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.invoker</groupId>
+ <artifactId>stage-extras</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <description>
+ Test to check for staging of external dependencies directly from local repository (MINVOKER-102).
+ </description>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-invoker-plugin</artifactId>
+ <version>@pom.version@</version>
+ <configuration>
+ <useLocalRepository>true</useLocalRepository>
+ <localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath>
+ <extraArtifacts>
+ <!-- gid:aid:version -->
+ <extraArtifact>junit:junit:3.8.2</extraArtifact>
+ <!-- gid:aid:version:type -->
+ <extraArtifact>org.apache.maven.plugins:maven-clean-plugin:2.4:maven-plugin</extraArtifact>
+ <!-- gid:aid:version:type:classifier -->
+ <extraArtifact>org.apache.maven.plugins:maven-clean-plugin:2.4:jar:javadoc</extraArtifact>
+ <!-- relocated -->
+ <extraArtifact>jdom:jdom:1.1</extraArtifact>
+ </extraArtifacts>
+ </configuration>
+ <executions>
+ <execution>
+ <id>integration-test</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>install</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/src/it/install-extra-artifacts-local-repo/verify.bsh b/src/it/install-extra-artifacts-local-repo/verify.bsh
new file mode 100644
index 0000000..ba95e36
--- /dev/null
+++ b/src/it/install-extra-artifacts-local-repo/verify.bsh
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
+
+try
+{
+ File itRepoDir = new File( basedir, "target/it-repo" );
+ if ( !itRepoDir.isDirectory() )
+ {
+ System.out.println( "IT local repository missing: " + itRepoDir );
+ return false;
+ }
+
+ String[] files =
+ {
+ "org/apache/maven/plugins/maven-clean-plugin/2.4/maven-clean-plugin-2.4.jar",
+ "org/apache/maven/plugins/maven-clean-plugin/2.4/maven-clean-plugin-2.4.pom",
+ "org/apache/maven/plugins/maven-clean-plugin/2.4/maven-clean-plugin-2.4-javadoc.jar",
+ "org/apache/maven/plugins/maven-plugins/16/maven-plugins-16.pom",
+ "org/apache/maven/maven-parent/15/maven-parent-15.pom",
+ "org/apache/apache/6/apache-6.pom",
+ "org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.jar",
+ "org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.pom",
+ "junit/junit/3.8.2/junit-3.8.2.jar",
+ "junit/junit/3.8.2/junit-3.8.2.pom",
+ "jdom/jdom/1.1/jdom-1.1.pom",
+ "org/jdom/jdom/1.1/jdom-1.1.pom",
+ "org/jdom/jdom/1.1/jdom-1.1.jar",
+ };
+ for ( String file : files )
+ {
+ File stagedFile = new File( itRepoDir, file );
+ System.out.println( "Checking for existence of: " + stagedFile );
+ if ( !stagedFile.isFile() )
+ {
+ throw new IllegalStateException( "Missing: " + stagedFile );
+ }
+ if ( file.endsWith( "jdom-1.1.jar" ) && stagedFile.length() < 1024 * 10 )
+ {
+ throw new IllegalStateException( "Corrupt: " + stagedFile );
+ }
+ }
+}
+catch( Throwable t )
+{
+ t.printStackTrace();
+ return false;
+}
+
+return true;
diff --git a/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java b/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java
index 63543c9..0610d8c 100644
--- a/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java
+++ b/src/main/java/org/apache/maven/plugins/invoker/InstallMojo.java
@@ -19,15 +19,6 @@ package org.apache.maven.plugins.invoker;
* under the License.
*/
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.Map;
-
import org.apache.commons.lang.StringUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
@@ -46,12 +37,25 @@ import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.artifact.filter.resolve.PatternExclusionsFilter;
import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
+import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
import org.apache.maven.shared.transfer.repository.RepositoryManager;
import org.codehaus.plexus.util.FileUtils;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+
/**
* Installs the project artifacts of the main build into the local repository as a preparation to run the sub projects.
* More precisely, all artifacts of the project itself, all its locally reachable parent POMs and all its dependencies
@@ -161,6 +165,14 @@ public class InstallMojo
@Component
private DependencyResolver resolver;
+ /**
+ * if the local repository is not used as test repo, the parameter can force get artifacts from local repo
+ * if available instead of download the artifacts again.
+ * @since 3.2.1
+ */
+ @Parameter( property = "invoker.useLocalRepository", defaultValue = "false" )
+ private boolean useLocalRepository;
+
private ProjectBuildingRequest projectBuildingRequest;
/**
@@ -205,8 +217,19 @@ public class InstallMojo
{
throw new MojoExecutionException( "Failed to create directory: " + localRepositoryPath );
}
- projectBuildingRequest =
- repositoryManager.setLocalRepositoryBasedir( session.getProjectBuildingRequest(), localRepositoryPath );
+
+ // we just don't want to download everything again..
+ if ( !localRepository.getBasedir().equals( localRepositoryPath.getPath() ) && useLocalRepository )
+ {
+ projectBuildingRequest =
+ repositoryManager.setLocalRepositoryBasedir( session.getProjectBuildingRequest(),
+ new File( localRepository.getBasedir() ) );
+ }
+ else
+ {
+ projectBuildingRequest =
+ repositoryManager.setLocalRepositoryBasedir( session.getProjectBuildingRequest(), localRepositoryPath );
+ }
}
/**
@@ -618,14 +641,37 @@ public class InstallMojo
coordinate.setType( type );
coordinate.setClassifier( classifier );
- resolver.resolveDependencies( projectBuildingRequest, coordinate,
- new PatternExclusionsFilter( Collections.<String>emptyList() ) );
+ Iterable<ArtifactResult> artifactResults =
+ resolver.resolveDependencies( projectBuildingRequest, coordinate,
+ new PatternExclusionsFilter( Collections.<String>emptyList() ) );
+ if ( !localRepository.getBasedir().equals( localRepositoryPath.getPath() ) && useLocalRepository )
+ {
+ // using another request with the correct target repo
+ installer.install( repositoryManager.setLocalRepositoryBasedir( session.getProjectBuildingRequest(),
+ localRepositoryPath ),
+ toArtifactsList( artifactResults ) );
+ }
}
catch ( DependencyResolverException e )
{
throw new MojoExecutionException( "Unable to resolve dependencies for: " + coordinate, e );
}
+ catch ( ArtifactInstallerException e )
+ {
+ throw new MojoExecutionException( "Fail to install artifacts: " + coordinate, e );
+ }
+ }
+ }
+
+ // FIXME could be simplify with using lambda... maybe in the next century... :P
+ private List<Artifact> toArtifactsList( Iterable<ArtifactResult> artifactResults )
+ {
+ List<Artifact> artifacts = new ArrayList<>( );
+ for ( ArtifactResult artifactResult : artifactResults )
+ {
+ artifacts.add( artifactResult.getArtifact() );
}
+ return artifacts;
}
}