Skip to content

Commit

Permalink
FURNACE-137: Fixed mirror usage
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Feb 8, 2017
1 parent 9371c27 commit 0352469
Show file tree
Hide file tree
Showing 4 changed files with 236 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;

import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Settings;
import org.eclipse.aether.repository.Authentication;
Expand All @@ -31,21 +33,23 @@ public static List<RemoteRepository> getRemoteRepositories(MavenContainer contai
Set<RemoteRepository> remoteRepos = new HashSet<>();
remoteRepos.addAll(container.getEnabledRepositoriesFromProfile(settings));
// If no remote repositories found or no mirrors to central found, add central
if (remoteRepos.isEmpty() || !hasCentralMirror(settings))
if (remoteRepos.isEmpty())

This comment has been minimized.

Copy link
@mareknovotny

mareknovotny Mar 23, 2017

Contributor

This is suspicious condition, if you have remote repository in active profile(s), the Central URL won't be set. Why ?

see https://issues.jboss.org/browse/FURNACE-141

This comment has been minimized.

Copy link
@gastaldi

gastaldi Mar 23, 2017

Author Member

I think you're right. It doesn't make much sense unless we're talking about mirrors only. Can you provide a PR fixing this? Sorry for the trouble

This comment has been minimized.

Copy link
@mareknovotny

mareknovotny Mar 24, 2017

Contributor

I will try, i see you changed that condition multiple times.
If I read and understand the Maven documentation correctly there need to be always added/available Maven central as remote repository until you have configured
<mirrorOf>central</mirrorOf> or some sort of <mirrorOf>*</mirrorOf> or <mirrorOf>external:*</mirrorOf> or combined multiple ids into mirrorOf delimited by comma.

{
String centralRepoURL = getCentralMirrorURL(settings).orElse(MAVEN_CENTRAL_REPO);
// Add central
remoteRepos.add(convertToMavenRepo("central", MAVEN_CENTRAL_REPO, settings));
remoteRepos.add(convertToMavenRepo("central", centralRepoURL, settings));
}
return new ArrayList<>(remoteRepos);
}

static boolean hasCentralMirror(Settings settings)
static Optional<String> getCentralMirrorURL(Settings settings)
{
return settings.getMirrors().stream()
.anyMatch(m ->
"central".equals(m.getMirrorOf()) ||
"*".equals(m.getMirrorOf()) ||
MAVEN_CENTRAL_REPO.equals(m.getMirrorOf()));
.filter(m -> "central".equals(m.getMirrorOf()) ||
"*".equals(m.getMirrorOf()) ||
MAVEN_CENTRAL_REPO.equals(m.getMirrorOf()))
.map(Mirror::getUrl)
.findFirst();
}

static RemoteRepository convertToMavenRepo(final String id, String url, final Settings settings)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.furnace.manager.maven.util;

import static org.hamcrest.CoreMatchers.equalTo;

import java.io.File;
import java.util.List;

import org.apache.maven.settings.Settings;
import org.apache.maven.settings.building.DefaultSettingsBuilderFactory;
import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
import org.apache.maven.settings.building.SettingsBuilder;
import org.apache.maven.settings.building.SettingsBuildingRequest;
import org.eclipse.aether.repository.RemoteRepository;
import org.jboss.forge.furnace.manager.maven.MavenContainer;
import org.junit.Assert;
import org.junit.Test;

/**
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*/
public class MavenRepositoriesTest
{

@Test
public void testMirrorCentralWithoutProfiles() throws Exception
{
SettingsBuilder settingsBuilder = new DefaultSettingsBuilderFactory().newInstance();
SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
settingsRequest.setUserSettingsFile(new File("src/test/resources/profiles/mirror-settings.xml"));
Settings settings = settingsBuilder.build(settingsRequest).getEffectiveSettings();
MavenContainer container = new MavenContainer();
List<RemoteRepository> remoteRepositories = MavenRepositories.getRemoteRepositories(container, settings);
Assert.assertThat(remoteRepositories.size(), equalTo(1));
Assert.assertThat(remoteRepositories.get(0).getId(), equalTo("central"));
Assert.assertThat(remoteRepositories.get(0).getUrl(),
equalTo("http://repo.cloudbees.com/content/repositories/central/"));
}

}
168 changes: 168 additions & 0 deletions manager/resolver/maven/src/test/resources/profiles/mirror-settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>jboss-releases-repository</id>
<username>gastaldi</username>
<password>{GCnCtu0Cd2MHAxuw8pxNtvHGDoxfHUkDYiy9rzZperI=}</password>
<configuration>
<httpHeaders>
<property>
<name>User-Agent</name>
<value>Maven m2Release (java:${java.vm.version} ${env.BUILD_TAG})</value>
</property>
</httpHeaders>
</configuration>
</server>
<server>
<id>jboss-staging-repository</id>
<username>gastaldi</username>
<password>{GCnCtu0Cd2MHAxuw8pxNtvHGDoxfHUkDYiy9rzZperI=}</password>
<configuration>
<httpHeaders>
<property>
<name>User-Agent</name>
<value>Maven m2Release (java:${java.vm.version} ${env.BUILD_TAG})</value>
</property>
</httpHeaders>
</configuration>
</server>
<server>
<id>ossrh</id>
<username>gastaldi</username>
<password>{GCnCtu0Cd2MHAxuw8pxNtvHGDoxfHUkDYiy9rzZperI=}</password>
<configuration>
<httpHeaders>
<property>
<name>User-Agent</name>
<value>Maven m2Release (java:${java.vm.version} ${env.BUILD_TAG})</value>
</property>
</httpHeaders>
</configuration>
</server>
<server>
<id>jboss-snapshots-repository</id>
<username>gastaldi</username>
<password>{GCnCtu0Cd2MHAxuw8pxNtvHGDoxfHUkDYiy9rzZperI=}</password>
</server>
</servers>
<mirrors>
<mirror>
<id>cloudbees-central-mirror</id>
<mirrorOf>central</mirrorOf>
<name>Central Repository Mirror</name>
<url>http://repo.cloudbees.com/content/repositories/central/</url>
</mirror>
<mirror>
<id>cloudbees-jboss-mirror</id>
<mirrorOf>jboss-public-repository-group</mirrorOf>
<name>JBoss Public Repository Group Mirror</name>
<url>http://repo.cloudbees.com/content/groups/jboss-public-repository-group/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>gpg</id>
<properties>
<!-- https://www.cloudbees.com/blog/how-do-maven-release-builds-devcloud-central -->
<gpg.useagent>true</gpg.useagent>
<gpg.keyname>355D4497</gpg.keyname>
<gpg.passphrase>n0th1ng</gpg.passphrase>
<gpg.homedir>/private/forge/.gnupg</gpg.homedir>
<gpg.publickeyring>/private/forge/.gnupg/pubring.gpg</gpg.publickeyring>
<gpg.secretkeyring>/private/forge/.gnupg/secring.gpg</gpg.secretkeyring>
<gpg.lockMode>never</gpg.lockMode>
<gpg.defaultkeyring>false</gpg.defaultkeyring>
</properties>
</profile>
<profile>
<id>cloudbees-public-repository</id>
<repositories>
<repository>
<id>cloudbees-public-repository</id>
<name>CloudBees Repository</name>
<url>http://repo.cloudbees.com/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>cloudbees-snapshots-repository</id>
<url>http://repo.cloudbees.com/content/groups/public/</url>
<layout>default</layout>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>cloudbees-public-repository</id>
<name>CloudBees Repository</name>
<url>http://repo.cloudbees.com/content/groups/public/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>jboss-public-repository</id>
<repositories>
<repository>
<id>jboss-public-repository</id>
<name>JBoss Repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>jboss-snapshots-repository</id>
<url>https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
<layout>default</layout>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>jboss-public-repository</id>
<name>JBoss Public Maven Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>gpg</activeProfile>
<!--
<activeProfile>cloudbees-public-repository</activeProfile>
-->
</activeProfiles>
</settings>
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import org.eclipse.aether.util.repository.DefaultProxySelector;
import org.jboss.forge.furnace.manager.maven.MavenContainer;
import org.jboss.forge.furnace.manager.maven.addon.MavenAddonDependencyResolver;
import org.jboss.forge.furnace.manager.maven.util.MavenRepositories;

public class ProjectHelper
{
Expand All @@ -69,8 +70,8 @@ public Model loadPomFromFile(File pomFile, String... profiles)
ModelBuildingResult result;
try
{
request.setModelResolver(new MavenModelResolver(system, session, mavenContainer
.getEnabledRepositoriesFromProfile(settings)));
request.setModelResolver(new MavenModelResolver(system, session,
MavenRepositories.getRemoteRepositories(mavenContainer, settings)));
result = builder.build(request);
}
// wrap exception message
Expand Down Expand Up @@ -135,7 +136,7 @@ private ProjectBuildingRequest getBuildingRequest(PlexusContainer plexus)
new File(settings.getLocalRepository()).toURI().toURL().toString(), null, true, true);
request.setLocalRepository(localRepository);

List<org.apache.maven.artifact.repository.ArtifactRepository> settingsRepos = new ArrayList<org.apache.maven.artifact.repository.ArtifactRepository>(
List<org.apache.maven.artifact.repository.ArtifactRepository> settingsRepos = new ArrayList<>(
request.getRemoteRepositories());
List<String> activeProfiles = settings.getActiveProfiles();

Expand Down Expand Up @@ -180,7 +181,7 @@ private ProjectBuildingRequest getBuildingRequest(PlexusContainer plexus)
}
}
repositorySession.setMirrorSelector(mirrorSelector);

LazyAuthenticationSelector authSelector = new LazyAuthenticationSelector(mirrorSelector);
for (Server server : settings.getServers())
{
Expand Down Expand Up @@ -216,7 +217,7 @@ private ProjectBuildingRequest getBuildingRequest(PlexusContainer plexus)
}
return request;
}

/**
* Returns <code>true</code> if this model is a single-project addon
*/
Expand All @@ -233,10 +234,11 @@ public boolean isAddon(Model model)
for (PluginExecution execution : plugin.getExecutions())
{
Xpp3Dom config = (Xpp3Dom) execution.getConfiguration();
if (config!= null)
if (config != null)
{
Xpp3Dom classifierNode = config.getChild("classifier");
if (classifierNode != null && MavenAddonDependencyResolver.FORGE_ADDON_CLASSIFIER.equals(classifierNode.getValue()))
if (classifierNode != null
&& MavenAddonDependencyResolver.FORGE_ADDON_CLASSIFIER.equals(classifierNode.getValue()))
{
result = true;
break PLUGIN_LOOP;
Expand All @@ -248,5 +250,5 @@ public boolean isAddon(Model model)
}
return result;
}

}

0 comments on commit 0352469

Please sign in to comment.