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 2019/10/27 21:43:04 UTC
[maven-dependency-plugin] 01/03: - Add mirrors,
proxies and authentication for remote repositories,
including Jetty test server.
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MDEP-579
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git
commit 21029c663571b94670eef992a08d8ea7e77f5ead
Author: Pim Moerenhout <pi...@gmail.com>
AuthorDate: Tue Aug 20 15:31:38 2019 +0200
- Add mirrors, proxies and authentication for remote repositories, including Jetty test server.
---
pom.xml | 25 ++++++
.../apache/maven/plugins/dependency/GetMojo.java | 17 +++-
.../maven/plugins/dependency/TestGetMojo.java | 87 ++++++++++++++++++++-
src/test/resources/unit/get-test/realm.properties | 19 +++++
.../get-test/repository/test/test/1.0/test-1.0.jar | Bin 0 -> 1804 bytes
.../repository/test/test/1.0/test-1.0.jar.sha1 | 1 +
.../get-test/repository/test/test/1.0/test-1.0.pom | 41 ++++++++++
.../repository/test/test/1.0/test-1.0.pom.sha1 | 1 +
8 files changed, 188 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7c2d4e0..6f864f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,6 +91,7 @@ under the License.
<properties>
<mavenVersion>3.0</mavenVersion>
<doxiaVersion>1.9</doxiaVersion>
+ <jettyVersion>9.2.28.v20190418</jettyVersion>
<pluginTestingVersion>2.1</pluginTestingVersion>
<javaVersion>7</javaVersion>
</properties>
@@ -314,6 +315,25 @@ under the License.
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${jettyVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>${jettyVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-webapp</artifactId>
+ <version>${jettyVersion}</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<build>
@@ -334,6 +354,11 @@ under the License.
<exclude>src/it/projects/tree-multimodule/module-a/expected.txt</exclude>
<exclude>src/it/projects/tree-multimodule/module-b/expected.txt</exclude>
<exclude>src/it/projects/tree-verbose/expected.txt</exclude>
+ <!--
+ These files contain real repository artifacts.
+ -->
+ <exclude>src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1</exclude>
+ <exclude>src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1</exclude>
</excludes>
</configuration>
</plugin>
diff --git a/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java b/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
index d434e64..420c71b 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
@@ -41,6 +41,8 @@ import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.settings.Settings;
import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
@@ -71,8 +73,8 @@ public class GetMojo
private ArtifactResolver artifactResolver;
/**
- *
- */
+ *
+ */
@Component
private DependencyResolver dependencyResolver;
@@ -85,6 +87,12 @@ public class GetMojo
@Component( role = ArtifactRepositoryLayout.class )
private Map<String, ArtifactRepositoryLayout> repositoryLayouts;
+ /**
+ * The repository system.
+ */
+ @Component
+ private RepositorySystem repositorySystem;
+
private DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
/**
@@ -214,6 +222,11 @@ public class GetMojo
ProjectBuildingRequest buildingRequest =
new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
+ Settings settings = session.getSettings();
+ repositorySystem.injectMirror( repoList, settings.getMirrors() );
+ repositorySystem.injectProxy( repoList, settings.getProxies() );
+ repositorySystem.injectAuthentication( repoList, settings.getServers() );
+
buildingRequest.setRemoteRepositories( repoList );
if ( transitive )
diff --git a/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java b/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
index 32d602c..c41ed56 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
@@ -20,13 +20,27 @@ package org.apache.maven.plugins.dependency;
*/
import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.eclipse.jetty.security.ConstraintMapping;
+import org.eclipse.jetty.security.ConstraintSecurityHandler;
+import org.eclipse.jetty.security.HashLoginService;
+import org.eclipse.jetty.security.LoginService;
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.server.handler.ResourceHandler;
+import org.eclipse.jetty.util.security.Constraint;
import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
@@ -48,7 +62,14 @@ public class TestGetMojo
assertNotNull( mojo );
LegacySupport legacySupport = lookup( LegacySupport.class );
- legacySupport.setSession( newMavenSession( new MavenProjectStub() ) );
+ MavenSession session = newMavenSession(new MavenProjectStub());
+ Settings settings = session.getSettings();
+ Server server = new Server();
+ server.setId( "myserver" );
+ server.setUsername( "foo" );
+ server.setPassword( "bar" );
+ settings.addServer(server);
+ legacySupport.setSession( session );
DefaultRepositorySystemSession repoSession =
(DefaultRepositorySystemSession) legacySupport.getRepositorySession();
repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( testDir.getAbsolutePath() ) );
@@ -101,6 +122,27 @@ public class TestGetMojo
}
/**
+ * Test remote repositories parameter with basic authentication
+ *
+ * @throws Exception in case of errors
+ */
+ public void testRemoteRepositoriesAuthentication()
+ throws Exception
+ {
+ org.eclipse.jetty.server.Server server = createServer( 8000 );
+ server.start();
+
+ setVariableValueToObject( mojo, "remoteRepositories", "myserver::default::http://localhost:8000/maven" );
+ mojo.setGroupId( "test" );
+ mojo.setArtifactId( "test" );
+ mojo.setVersion( "1.0" );
+
+ mojo.execute();
+
+ server.stop();
+ }
+
+ /**
* Test parsing of the remote repositories parameter
*
* @throws Exception in case of errors
@@ -154,4 +196,47 @@ public class TestGetMojo
// expected
}
}
+
+ private ContextHandler createContextHandler() {
+ ResourceHandler resourceHandler = new ResourceHandler();
+ Path resourceDirectory = Paths.get("src", "test", "resources", "unit", "get-test", "repository");
+ resourceHandler.setResourceBase(resourceDirectory.toString());
+ resourceHandler.setDirectoriesListed(true);
+
+ ContextHandler contextHandler = new ContextHandler("/maven");
+ contextHandler.setHandler(resourceHandler);
+ return contextHandler;
+ }
+
+ private org.eclipse.jetty.server.Server createServer( int port) {
+ org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server( port );
+ server.setStopAtShutdown( true );
+
+ LoginService loginService = new HashLoginService("myrealm",
+ "src/test/resources/unit/get-test/realm.properties");
+ server.addBean(loginService);
+
+ ConstraintSecurityHandler security = new ConstraintSecurityHandler();
+ server.setHandler( security );
+
+ Constraint constraint = new Constraint();
+ constraint.setName( "auth" );
+ constraint.setAuthenticate( true );
+ constraint.setRoles(new String[]{ "userrole" });
+
+ ConstraintMapping mapping = new ConstraintMapping();
+ mapping.setPathSpec( "/*" );
+ mapping.setConstraint( constraint );
+
+ security.setConstraintMappings( Collections.singletonList( mapping ) );
+ security.setAuthenticator( new BasicAuthenticator() );
+ security.setLoginService( loginService );
+
+ ContextHandler contextHandler = createContextHandler();
+ contextHandler.setServer( server );
+
+ security.setHandler( contextHandler );
+ server.setHandler( security );
+ return server;
+ }
}
diff --git a/src/test/resources/unit/get-test/realm.properties b/src/test/resources/unit/get-test/realm.properties
new file mode 100644
index 0000000..dcd199f
--- /dev/null
+++ b/src/test/resources/unit/get-test/realm.properties
@@ -0,0 +1,19 @@
+# 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.
+
+# username: password[,rolename ...]
+foo: bar,userrole
\ No newline at end of file
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar
new file mode 100644
index 0000000..37a4da5
Binary files /dev/null and b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar differ
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1 b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1
new file mode 100644
index 0000000..0864701
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1
@@ -0,0 +1 @@
+0c4e63c56b0d2ab20f8d559cdedb4e4d76f91c63
\ No newline at end of file
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom
new file mode 100644
index 0000000..ee5233d
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom
@@ -0,0 +1,41 @@
+<?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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1 b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1
new file mode 100644
index 0000000..e072920
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1
@@ -0,0 +1 @@
+25f93607d7da80b975b5fea2072f628d049c2110
\ No newline at end of file