diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/MavenDependencyInjector.java b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/MavenDependencyInjector.java index 0594457685..b247b14857 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/MavenDependencyInjector.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/MavenDependencyInjector.java @@ -37,6 +37,7 @@ import org.apache.maven.model.Model; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.RepositorySystem; +import org.apache.maven.settings.Settings; import org.codehaus.plexus.logging.Logger; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.tycho.ArtifactDescriptor; @@ -66,7 +67,7 @@ public final class MavenDependencyInjector { public static void injectMavenDependencies(MavenProject project, DependencyArtifacts dependencies, DependencyArtifacts testDependencies, BundleReader bundleReader, Function descriptorMapping, Logger logger, - RepositorySystem repositorySystem) { + RepositorySystem repositorySystem, Settings settings) { MavenDependencyInjector generator = new MavenDependencyInjector(project, bundleReader, descriptorMapping, logger); for (ArtifactDescriptor artifact : dependencies.getArtifacts()) { @@ -97,7 +98,11 @@ public static void injectMavenDependencies(MavenProject project, DependencyArtif + reference.getUrl() + ", existing URL = " + artifactRepository.getUrl()); } } - project.setRemoteArtifactRepositories(new ArrayList<>(repositoryMap.values())); + List artifactRepositories = new ArrayList<>(repositoryMap.values()); + repositorySystem.injectMirror(artifactRepositories, settings.getMirrors()); + repositorySystem.injectProxy(artifactRepositories, settings.getProxies()); + repositorySystem.injectAuthentication(artifactRepositories, settings.getServers()); + project.setRemoteArtifactRepositories(artifactRepositories); } } diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java index 7ce5c6351b..1b752d02b4 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenDependenciesResolverConfigurer.java @@ -100,6 +100,9 @@ public boolean include(Artifact a) { } else { request.setRemoteRepositories(mavenSession.getCurrentProject().getRemoteArtifactRepositories()); } + repositorySystem.injectMirror(request.getRemoteRepositories(), mavenSession.getSettings().getMirrors()); + repositorySystem.injectProxy(request.getRemoteRepositories(), mavenSession.getSettings().getProxies()); + repositorySystem.injectAuthentication(request.getRemoteRepositories(), mavenSession.getSettings().getServers()); ArtifactResolutionResult result = repositorySystem.resolve(request); if (result.hasExceptions()) { throw new DependencyResolutionException("resolving " + artifact + " failed!", result.getExceptions()); diff --git a/tycho-its/projects/target.maven.httpAuthentication/pom.xml b/tycho-its/projects/target.maven.httpAuthentication/pom.xml new file mode 100644 index 0000000000..af5b29538e --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + tycho-its-project + target.maven.httpAuthentication + 0.0.1-SNAPSHOT + pom + + + 3.0.0-SNAPSHOT + + + + target.test + test.bundle + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho-version} + true + + + org.eclipse.tycho + target-platform-configuration + ${tycho-version} + + + + ${groupId} + target-definition + 0.0.1-SNAPSHOT + + + + + + + diff --git a/tycho-its/projects/target.maven.httpAuthentication/settings.xml b/tycho-its/projects/target.maven.httpAuthentication/settings.xml new file mode 100644 index 0000000000..2867e3effa --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/settings.xml @@ -0,0 +1,9 @@ + + + + test-server + test-user + test-password + + + diff --git a/tycho-its/projects/target.maven.httpAuthentication/target.test/platform.target b/tycho-its/projects/target.maven.httpAuthentication/target.test/platform.target new file mode 100644 index 0000000000..4b0761b598 --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/target.test/platform.target @@ -0,0 +1,23 @@ + + + + + + + + + test + bundle + 1.0.0 + jar + + + + + test-server + https://nexusext.app.corp.dsa.de/repository/sfp-alp-eal-group-releases/ + + + + + \ No newline at end of file diff --git a/tycho-its/projects/target.maven.httpAuthentication/target.test/pom.xml b/tycho-its/projects/target.maven.httpAuthentication/target.test/pom.xml new file mode 100644 index 0000000000..1a7680e2cf --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/target.test/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + target-definition + eclipse-target-definition + + + tycho-its-project + target.maven.httpAuthentication + 0.0.1-SNAPSHOT + + diff --git a/tycho-its/projects/target.maven.httpAuthentication/test.bundle/.classpath b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/.classpath new file mode 100644 index 0000000000..e801ebfb46 --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tycho-its/projects/target.maven.httpAuthentication/test.bundle/.settings/org.eclipse.jdt.core.prefs b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..c9545f06a4 --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/tycho-its/projects/target.maven.httpAuthentication/test.bundle/META-INF/MANIFEST.MF b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..67877d2201 --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/META-INF/MANIFEST.MF @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Bundle Plug-in +Bundle-SymbolicName: test.bundle +Bundle-Version: 0.0.1.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Require-Bundle: bundle diff --git a/tycho-its/projects/target.maven.httpAuthentication/test.bundle/build.properties b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/build.properties new file mode 100644 index 0000000000..34d2e4d2da --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/tycho-its/projects/target.maven.httpAuthentication/test.bundle/pom.xml b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/pom.xml new file mode 100644 index 0000000000..a436c77abe --- /dev/null +++ b/tycho-its/projects/target.maven.httpAuthentication/test.bundle/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + test.bundle + eclipse-plugin + + + tycho-its-project + target.maven.httpAuthentication + 0.0.1-SNAPSHOT + + \ No newline at end of file diff --git a/tycho-its/repositories/m2/test/bundle/1.0.0/bundle-1.0.0.jar b/tycho-its/repositories/m2/test/bundle/1.0.0/bundle-1.0.0.jar new file mode 100644 index 0000000000..eea97f4407 Binary files /dev/null and b/tycho-its/repositories/m2/test/bundle/1.0.0/bundle-1.0.0.jar differ diff --git a/tycho-its/repositories/m2/test/bundle/1.0.0/bundle-1.0.0.pom b/tycho-its/repositories/m2/test/bundle/1.0.0/bundle-1.0.0.pom new file mode 100644 index 0000000000..26acdb9b21 --- /dev/null +++ b/tycho-its/repositories/m2/test/bundle/1.0.0/bundle-1.0.0.pom @@ -0,0 +1,19 @@ + + + 4.0.0 + test + bundle + 1.0.0 + eclipse-plugin + + + + org.eclipse.tycho + tycho-maven-plugin + 2.7.0 + true + + + + diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/target/PasswordProtectedM2RepositoryTest.java b/tycho-its/src/test/java/org/eclipse/tycho/test/target/PasswordProtectedM2RepositoryTest.java new file mode 100644 index 0000000000..cd53df07e5 --- /dev/null +++ b/tycho-its/src/test/java/org/eclipse/tycho/test/target/PasswordProtectedM2RepositoryTest.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2022 Sonatype Inc. and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Patrick Ziegler - initial API and implementation + *******************************************************************************/ +package org.eclipse.tycho.test.target; + +import java.io.File; +import java.util.Properties; + +import org.apache.maven.it.Verifier; +import org.eclipse.tycho.test.AbstractTychoIntegrationTest; +import org.eclipse.tycho.test.util.HttpServer; +import org.eclipse.tycho.test.util.ResourceUtil; +import org.eclipse.tycho.test.util.TargetDefinitionUtil; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class PasswordProtectedM2RepositoryTest extends AbstractTychoIntegrationTest { + + private HttpServer server; + private String m2RepoUrl; + + @Before + public void startServer() throws Exception { + server = HttpServer.startServer("test-user", "test-password"); + m2RepoUrl = server.addServer("foo", ResourceUtil.resolveTestResource("repositories/m2")); + } + + @After + public void stopServer() throws Exception { + server.stop(); + } + + @Test + public void testTargetDefinition() throws Exception { + Verifier verifier = createVerifier("settings.xml"); + File platformBundle = new File(verifier.getBasedir(), "target.test"); + File platformFile = new File(platformBundle, "platform.target"); + TargetDefinitionUtil.setRepositoryURLs(platformFile, m2RepoUrl); + verifier.executeGoal("package"); + verifier.verifyErrorFreeLog(); + } + + private Verifier createVerifier(String settingsFile) throws Exception { + Verifier verifier = getVerifier("target.maven.httpAuthentication", false, + new File("projects/target.maven.httpAuthentication/" + settingsFile)); + Properties systemProperties = verifier.getSystemProperties(); + systemProperties.setProperty("m2.repo", m2RepoUrl); + return verifier; + } +} diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/util/TargetDefinitionUtil.java b/tycho-its/src/test/java/org/eclipse/tycho/test/util/TargetDefinitionUtil.java index 7cf5085a4b..88a7a8af16 100644 --- a/tycho-its/src/test/java/org/eclipse/tycho/test/util/TargetDefinitionUtil.java +++ b/tycho-its/src/test/java/org/eclipse/tycho/test/util/TargetDefinitionUtil.java @@ -76,6 +76,11 @@ public static void setRepositoryURLs(File targetDefinitionFile, String url) for (int i = 0; i < repositories.getLength(); i++) { Element repository = (Element) repositories.item(i); repository.setAttribute("location", url); + NodeList urls = repository.getElementsByTagName("url"); + // m2 repositories use an id and url tag + for (int j = 0; j < urls.getLength(); ++j) { + urls.item(j).setTextContent(url); + } } } try (FileOutputStream output = new FileOutputStream(targetDefinitionFile)) { diff --git a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java index a7adcf2741..1d72185ecd 100644 --- a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java +++ b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java @@ -44,6 +44,7 @@ import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException; import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException; import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.LegacySupport; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.RepositorySystem; @@ -130,6 +131,9 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen @Requirement private PluginRealmHelper pluginRealmHelper; + @Requirement + private LegacySupport context; + private P2ResolverFactory resolverFactory; private DependencyMetadataGenerator generator; @@ -500,6 +504,7 @@ public void initialize() throws InitializationException { public void injectDependenciesIntoMavenModel(MavenProject project, AbstractTychoProject projectType, DependencyArtifacts dependencyArtifacts, DependencyArtifacts testDependencyArtifacts, Logger logger) { MavenDependencyInjector.injectMavenDependencies(project, dependencyArtifacts, testDependencyArtifacts, - bundleReader, resolverFactory::resolveDependencyDescriptor, logger, repositorySystem); + bundleReader, resolverFactory::resolveDependencyDescriptor, logger, repositorySystem, + context.getSession().getSettings()); } }