Skip to content

Commit

Permalink
fix remoteRepo for standalone mode when maven's conf is used
Browse files Browse the repository at this point in the history
  • Loading branch information
jetoile committed Oct 15, 2018
1 parent 28fab22 commit 7d47379
Showing 1 changed file with 43 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.cli.logging.Slf4jLoggerManager;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
import org.apache.maven.settings.building.SettingsBuilder;
Expand Down Expand Up @@ -62,6 +63,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import static fr.jetoile.hadoopunit.HadoopUnitConfig.DEFAULT_PROPS_FILE;
import static org.fusesource.jansi.Ansi.Color.GREEN;
Expand All @@ -75,6 +77,8 @@ public class HadoopStandaloneBootstrap {
static private List<ComponentProperties> componentsToStop = new ArrayList<>();
static private List<ComponentProperties> componentsProperty = new ArrayList();

static private Settings settings = null;

/**
* code from org.apache.maven.cli.MavenCli.container(CliRequest)
* <p>
Expand Down Expand Up @@ -139,6 +143,33 @@ public static DefaultRepositorySystemSession newRepositorySystemSession(Reposito
if (StringUtils.isNotEmpty(mavenHome)) {
//if MAVEN_HOME or M2_HOME are defined, will read maven's configuration throught settings.xml
LOGGER.info("is going to use the local maven configuration: {}", mavenHome);
Settings settings = getLocalSettings(mavenHome);

localRepositoryDir = settings.getLocalRepository();
if (localRepositoryDir == null) {
LOGGER.debug("is going to use default maven local repository");
localRepositoryDir = System.getProperty("user.home") + "/.m2/repository";
}
LOGGER.debug("is going to use {} repository" + localRepositoryDir);
} else {
LOGGER.debug("is going to use the maven repository from {} with key {}", DEFAULT_PROPS_FILE, "maven.local.repo");
localRepositoryDir = hadoopUnitConfiguration.getString("maven.local.repo");
}

LocalRepository localRepo = new LocalRepository(localRepositoryDir);
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));

boolean debug = Boolean.parseBoolean(hadoopUnitConfiguration.getString("maven.debug"));
if (debug) {
session.setTransferListener(new ConsoleTransferListener());
session.setRepositoryListener(new ConsoleRepositoryListener());
}

return session;
}

private static Settings getLocalSettings(String mavenHome) {
if (settings == null) {
File globalSettingsFile = new File(mavenHome + "/conf/settings.xml");
if (!globalSettingsFile.exists()) {
LOGGER.error("maven global settings.xml file not found : " + globalSettingsFile);
Expand All @@ -160,34 +191,13 @@ public static DefaultRepositorySystemSession newRepositorySystemSession(Reposito
SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
settingsRequest.setGlobalSettingsFile(globalSettingsFile);
settingsRequest.setUserSettingsFile(userSettingsFile);
Settings settings = null;
try {
settings = defaultSettingsBuilder.build(settingsRequest).getEffectiveSettings();
} catch (SettingsBuildingException e) {
LOGGER.error("unable to get settings", e);
}

localRepositoryDir = settings.getLocalRepository();
if (localRepositoryDir == null) {
LOGGER.debug("is going to use default maven local repository");
localRepositoryDir = System.getProperty("user.home") + "/.m2/repository";
}
LOGGER.debug("is going to use {} repository" + localRepositoryDir);
} else {
LOGGER.debug("is going to use the maven repository from {} with key {}", DEFAULT_PROPS_FILE, "maven.central.repo");
localRepositoryDir = hadoopUnitConfiguration.getString("maven.local.repo");
}

LocalRepository localRepo = new LocalRepository(localRepositoryDir);
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));

boolean debug = Boolean.parseBoolean(hadoopUnitConfiguration.getString("maven.debug"));
if (debug) {
session.setTransferListener(new ConsoleTransferListener());
session.setRepositoryListener(new ConsoleRepositoryListener());
}

return session;
return settings;
}

private static String getInstalledMavenHome() {
Expand Down Expand Up @@ -258,10 +268,7 @@ public static void main(String[] args) throws BootstrapException {
Artifact artifact = new DefaultArtifact(hadoopUnitConfiguration.getString(c.getArtifactKey()));
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(new Dependency(artifact, JavaScopes.RUNTIME));

if (StringUtils.isNotEmpty(getInstalledMavenHome())) {
collectRequest.setRepositories(newRepositories());
}
collectRequest.setRepositories(getRemoteRepositories());

DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFilter);

Expand Down Expand Up @@ -302,6 +309,16 @@ public void run() {
printBanner();
}

private static List<RemoteRepository> getRemoteRepositories() {
if (!StringUtils.isNotEmpty(getInstalledMavenHome())) {
return newRepositories();
} else {
List<Mirror> mirrors = getLocalSettings(getInstalledMavenHome()).getMirrors();
List<RemoteRepository> remoteRepositories = mirrors.stream().map(mirror -> new RemoteRepository.Builder(mirror.getId(), "default", mirror.getUrl()).build()).collect(Collectors.toList());
return remoteRepositories;
}
}

private static void printBanner() {
HadoopUtils.INSTANCE.printBanner(System.out);
componentsProperty.stream().forEach(c -> {
Expand Down

0 comments on commit 7d47379

Please sign in to comment.