Skip to content

Commit

Permalink
Use the new ToolchainsBuilder and SettingsBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
gnodet committed Oct 7, 2024
1 parent b2b868f commit c97675e
Show file tree
Hide file tree
Showing 10 changed files with 1,618 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,16 @@ public class DefaultToolchainsBuilder implements ToolchainsBuilder {

private final Interpolator interpolator;

private final ToolchainsXmlFactory toolchainsXmlFactory;

public DefaultToolchainsBuilder() {
this(new DefaultInterpolator());
this(new DefaultInterpolator(), new DefaultToolchainsXmlFactory());
}

@Inject
public DefaultToolchainsBuilder(Interpolator interpolator) {
public DefaultToolchainsBuilder(Interpolator interpolator, ToolchainsXmlFactory toolchainsXmlFactory) {
this.interpolator = interpolator;
this.toolchainsXmlFactory = toolchainsXmlFactory;
}

@Override
Expand Down Expand Up @@ -110,25 +113,21 @@ private PersistedToolchains readToolchains(
if (is == null) {
return PersistedToolchains.newInstance();
}
toolchains = request.getSession()
.getService(ToolchainsXmlFactory.class)
.read(XmlReaderRequest.builder()
.inputStream(is)
.location(toolchainsSource.getLocation())
.strict(true)
.build());
toolchains = toolchainsXmlFactory.read(XmlReaderRequest.builder()
.inputStream(is)
.location(toolchainsSource.getLocation())
.strict(true)
.build());
} catch (XmlReaderException e) {
InputStream is = toolchainsSource.openStream();
if (is == null) {
return PersistedToolchains.newInstance();
}
toolchains = request.getSession()
.getService(ToolchainsXmlFactory.class)
.read(XmlReaderRequest.builder()
.inputStream(is)
.location(toolchainsSource.getLocation())
.strict(false)
.build());
toolchains = toolchainsXmlFactory.read(XmlReaderRequest.builder()
.inputStream(is)
.location(toolchainsSource.getLocation())
.strict(false)
.build());
Location loc = e.getCause() instanceof XMLStreamException xe ? xe.getLocation() : null;
problems.add(new DefaultBuilderProblem(
toolchainsSource.getLocation(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.apache.maven.internal.impl.model.DefaultRootLocator
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@
import org.apache.maven.api.cli.ParserException;
import org.apache.maven.api.cli.ParserRequest;
import org.apache.maven.api.cli.extensions.CoreExtension;
import org.apache.maven.api.services.model.RootLocator;
import org.apache.maven.cli.CLIReportingUtils;
import org.apache.maven.cli.internal.extension.io.CoreExtensionsStaxReader;
import org.apache.maven.cli.props.MavenPropertiesLoader;
import org.apache.maven.model.root.RootLocator;
import org.apache.maven.properties.internal.EnvironmentUtils;
import org.apache.maven.properties.internal.SystemProperties;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,33 @@
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.function.Function;

import org.apache.maven.api.Constants;
import org.apache.maven.api.Session;
import org.apache.maven.api.cli.Invoker;
import org.apache.maven.api.cli.InvokerException;
import org.apache.maven.api.cli.InvokerRequest;
import org.apache.maven.api.cli.Logger;
import org.apache.maven.api.cli.Options;
import org.apache.maven.api.services.BuilderProblem;
import org.apache.maven.api.services.Lookup;
import org.apache.maven.api.services.MessageBuilder;
import org.apache.maven.api.services.SettingsBuilder;
import org.apache.maven.api.services.SettingsBuilderRequest;
import org.apache.maven.api.services.SettingsBuilderResult;
import org.apache.maven.api.services.Source;
import org.apache.maven.api.settings.Mirror;
import org.apache.maven.api.settings.Profile;
import org.apache.maven.api.settings.Proxy;
import org.apache.maven.api.settings.Repository;
import org.apache.maven.api.settings.Server;
import org.apache.maven.api.settings.Settings;
import org.apache.maven.artifact.InvalidRepositoryException;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
Expand All @@ -52,28 +65,17 @@
import org.apache.maven.cli.transfer.QuietMavenTransferListener;
import org.apache.maven.cli.transfer.SimplexTransferListener;
import org.apache.maven.cli.transfer.Slf4jMavenTransferListener;
import org.apache.maven.cling.invoker.mvn.ProtoSession;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.internal.impl.SettingsUtilsV4;
import org.apache.maven.jline.MessageUtils;
import org.apache.maven.logwrapper.LogLevelRecorder;
import org.apache.maven.logwrapper.MavenSlf4jWrapperFactory;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Profile;
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Repository;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.SettingsUtils;
import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
import org.apache.maven.settings.building.SettingsBuilder;
import org.apache.maven.settings.building.SettingsBuildingRequest;
import org.apache.maven.settings.building.SettingsBuildingResult;
import org.apache.maven.settings.building.SettingsProblem;
import org.eclipse.aether.transfer.TransferListener;
import org.slf4j.ILoggerFactory;
import org.slf4j.LoggerFactory;

import static java.util.Objects.requireNonNull;
import static org.apache.maven.cling.invoker.Utils.toFile;
import static org.apache.maven.cling.invoker.Utils.toMavenExecutionRequestLoggingLevel;
import static org.apache.maven.cling.invoker.Utils.toProperties;

Expand Down Expand Up @@ -114,6 +116,7 @@ public static class LookupInvokerContext<
public final InputStream stdIn;
public final PrintWriter stdOut;
public final PrintWriter stdErr;
public final Session session;

protected LookupInvokerContext(LookupInvoker<O, R, C> invoker, R invokerRequest) {
this.invoker = invoker;
Expand All @@ -131,6 +134,12 @@ protected LookupInvokerContext(LookupInvoker<O, R, C> invoker, R invokerRequest)
this.stdOut = new PrintWriter(invokerRequest.out().orElse(System.out), true);
this.stdErr = new PrintWriter(invokerRequest.err().orElse(System.err), true);
this.logger = invokerRequest.parserRequest().logger();

Map<String, String> user = new HashMap<>(invokerRequest.userProperties());
user.put("session.rootDirectory", invokerRequest.rootDirectory().toString());
user.put("session.topDirectory", invokerRequest.topDirectory().toString());
Map<String, String> system = new HashMap<>(invokerRequest.systemProperties());
this.session = ProtoSession.create(user, system);
}

public Logger logger;
Expand Down Expand Up @@ -443,36 +452,29 @@ protected void settings(C context, SettingsBuilder settingsBuilder) throws Excep
context.projectSettingsPath = projectSettingsFile;
context.userSettingsPath = userSettingsFile;

SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
settingsRequest.setGlobalSettingsFile(toFile(installationSettingsFile));
settingsRequest.setProjectSettingsFile(toFile(projectSettingsFile));
settingsRequest.setUserSettingsFile(toFile(userSettingsFile));
settingsRequest.setSystemProperties(toProperties(context.invokerRequest.systemProperties()));
Properties props = toProperties(context.invokerRequest.userProperties());
props.put(
"session.rootDirectory", context.invokerRequest.rootDirectory().toString());
props.put("session.topDirectory", context.invokerRequest.topDirectory().toString());

settingsRequest.setUserProperties(props);
SettingsBuilderRequest settingsRequest = SettingsBuilderRequest.builder()
.session(context.session)
.installationSettingsSource(
installationSettingsFile != null && Files.exists(installationSettingsFile)
? Source.fromPath(installationSettingsFile)
: null)
.projectSettingsSource(
projectSettingsFile != null && Files.exists(projectSettingsFile)
? Source.fromPath(projectSettingsFile)
: null)
.userSettingsSource(
userSettingsFile != null && Files.exists(userSettingsFile)
? Source.fromPath(userSettingsFile)
: null)
.build();

customizeSettingsRequest(context, settingsRequest);

context.logger.debug("Reading installation settings from '"
+ (settingsRequest.getGlobalSettingsSource() != null
? settingsRequest.getGlobalSettingsSource().getLocation()
: settingsRequest.getGlobalSettingsFile())
+ "'");
context.logger.debug("Reading project settings from '"
+ (settingsRequest.getProjectSettingsSource() != null
? settingsRequest.getProjectSettingsSource().getLocation()
: settingsRequest.getProjectSettingsFile())
+ "'");
context.logger.debug("Reading user settings from '"
+ (settingsRequest.getUserSettingsSource() != null
? settingsRequest.getUserSettingsSource().getLocation()
: settingsRequest.getUserSettingsFile())
+ "'");

SettingsBuildingResult settingsResult = settingsBuilder.build(settingsRequest);
context.logger.debug("Reading installation settings from '" + installationSettingsFile + "'");
context.logger.debug("Reading project settings from '" + projectSettingsFile + "'");
context.logger.debug("Reading user settings from '" + userSettingsFile + "'");

SettingsBuilderResult settingsResult = settingsBuilder.build(settingsRequest);
customizeSettingsResult(context, settingsResult);

context.effectiveSettings = settingsResult.getEffectiveSettings();
Expand All @@ -483,17 +485,17 @@ protected void settings(C context, SettingsBuilder settingsBuilder) throws Excep
context.logger.warn("");
context.logger.warn("Some problems were encountered while building the effective settings");

for (SettingsProblem problem : settingsResult.getProblems()) {
for (BuilderProblem problem : settingsResult.getProblems()) {
context.logger.warn(problem.getMessage() + " @ " + problem.getLocation());
}
context.logger.warn("");
}
}

protected void customizeSettingsRequest(C context, SettingsBuildingRequest settingsBuildingRequest)
protected void customizeSettingsRequest(C context, SettingsBuilderRequest settingsBuilderRequest)
throws Exception {}

protected void customizeSettingsResult(C context, SettingsBuildingResult settingsBuildingResult) throws Exception {}
protected void customizeSettingsResult(C context, SettingsBuilderResult settingsBuilderResult) throws Exception {}

protected boolean mayDisableInteractiveMode(C context, boolean proposedInteractive) {
if (!context.invokerRequest.options().forceInteractive().orElse(false)) {
Expand Down Expand Up @@ -582,7 +584,7 @@ protected void populateRequestFromSettings(MavenExecutionRequest request, Settin
request.setPluginGroups(settings.getPluginGroups());
request.setLocalRepositoryPath(settings.getLocalRepository());
for (Server server : settings.getServers()) {
request.addServer(server);
request.addServer(new org.apache.maven.settings.Server(server));
}

// <proxies>
Expand All @@ -601,7 +603,7 @@ protected void populateRequestFromSettings(MavenExecutionRequest request, Settin
if (!proxy.isActive()) {
continue;
}
request.addProxy(proxy);
request.addProxy(new org.apache.maven.settings.Proxy(proxy));
}

// <mirrors>
Expand All @@ -613,34 +615,38 @@ protected void populateRequestFromSettings(MavenExecutionRequest request, Settin
// </mirrors>

for (Mirror mirror : settings.getMirrors()) {
request.addMirror(mirror);
request.addMirror(new org.apache.maven.settings.Mirror(mirror));
}

for (Repository remoteRepository : settings.getRepositories()) {
try {
request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(remoteRepository));
request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(
new org.apache.maven.settings.Repository(remoteRepository)));
} catch (InvalidRepositoryException e) {
// do nothing for now
}
}

for (Repository pluginRepository : settings.getPluginRepositories()) {
try {
request.addPluginArtifactRepository(MavenRepositorySystem.buildArtifactRepository(pluginRepository));
request.addPluginArtifactRepository(MavenRepositorySystem.buildArtifactRepository(
new org.apache.maven.settings.Repository(pluginRepository)));
} catch (InvalidRepositoryException e) {
// do nothing for now
}
}

request.setActiveProfiles(settings.getActiveProfiles());
for (Profile rawProfile : settings.getProfiles()) {
request.addProfile(SettingsUtils.convertFromSettingsProfile(rawProfile));
request.addProfile(
new org.apache.maven.model.Profile(SettingsUtilsV4.convertFromSettingsProfile(rawProfile)));

if (settings.getActiveProfiles().contains(rawProfile.getId())) {
List<Repository> remoteRepositories = rawProfile.getRepositories();
for (Repository remoteRepository : remoteRepositories) {
try {
request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(remoteRepository));
request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(
new org.apache.maven.settings.Repository(remoteRepository)));
} catch (InvalidRepositoryException e) {
// do nothing for now
}
Expand All @@ -649,8 +655,8 @@ protected void populateRequestFromSettings(MavenExecutionRequest request, Settin
List<Repository> pluginRepositories = rawProfile.getPluginRepositories();
for (Repository pluginRepository : pluginRepositories) {
try {
request.addPluginArtifactRepository(
MavenRepositorySystem.buildArtifactRepository(pluginRepository));
request.addPluginArtifactRepository(MavenRepositorySystem.buildArtifactRepository(
new org.apache.maven.settings.Repository(pluginRepository)));
} catch (InvalidRepositoryException e) {
// do nothing for now
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.apache.maven.api.cli.Options;
import org.apache.maven.api.cli.extensions.CoreExtension;
import org.apache.maven.api.services.MessageBuilderFactory;
import org.apache.maven.api.services.SettingsBuilder;
import org.apache.maven.cli.ExtensionConfigurationModule;
import org.apache.maven.cli.internal.BootstrapCoreExtensionManager;
import org.apache.maven.cli.logging.Slf4jLoggerManager;
Expand All @@ -49,7 +50,6 @@
import org.apache.maven.extension.internal.CoreExtensionEntry;
import org.apache.maven.session.scope.internal.SessionScope;
import org.apache.maven.session.scope.internal.SessionScopeModule;
import org.apache.maven.settings.building.SettingsBuilder;
import org.codehaus.plexus.ContainerConfiguration;
import org.codehaus.plexus.DefaultContainerConfiguration;
import org.codehaus.plexus.DefaultPlexusContainer;
Expand Down
Loading

0 comments on commit c97675e

Please sign in to comment.