mirror of https://github.com/apache/maven.git
[MNG-5754] Toolchains should be read during initialization
MavenExecutionRequest has been extended with toolchains, which is filled by MavenCli Interfaces have been extended with new methods, assuming only Maven provides implementations
This commit is contained in:
parent
99f763decd
commit
f75008743b
|
@ -22,7 +22,9 @@ package org.apache.maven.execution;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
@ -32,6 +34,7 @@ import org.apache.maven.project.ProjectBuildingRequest;
|
||||||
import org.apache.maven.settings.Mirror;
|
import org.apache.maven.settings.Mirror;
|
||||||
import org.apache.maven.settings.Proxy;
|
import org.apache.maven.settings.Proxy;
|
||||||
import org.apache.maven.settings.Server;
|
import org.apache.maven.settings.Server;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
import org.eclipse.aether.DefaultRepositoryCache;
|
import org.eclipse.aether.DefaultRepositoryCache;
|
||||||
import org.eclipse.aether.RepositoryCache;
|
import org.eclipse.aether.RepositoryCache;
|
||||||
import org.eclipse.aether.repository.WorkspaceReader;
|
import org.eclipse.aether.repository.WorkspaceReader;
|
||||||
|
@ -139,6 +142,8 @@ public class DefaultMavenExecutionRequest
|
||||||
private int degreeOfConcurrency = 1;
|
private int degreeOfConcurrency = 1;
|
||||||
|
|
||||||
private String builderId = "singlethreaded";
|
private String builderId = "singlethreaded";
|
||||||
|
|
||||||
|
private Map<String, List<ToolchainModel>> toolchains;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Suppress SNAPSHOT updates.
|
* Suppress SNAPSHOT updates.
|
||||||
|
@ -1127,4 +1132,21 @@ public class DefaultMavenExecutionRequest
|
||||||
{
|
{
|
||||||
return builderId;
|
return builderId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, List<ToolchainModel>> getToolchains()
|
||||||
|
{
|
||||||
|
if ( toolchains == null )
|
||||||
|
{
|
||||||
|
toolchains = new HashMap<String, List<ToolchainModel>>();
|
||||||
|
}
|
||||||
|
return toolchains;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MavenExecutionRequest setToolchains( Map<String, List<ToolchainModel>> toolchains )
|
||||||
|
{
|
||||||
|
this.toolchains = toolchains;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,11 @@ package org.apache.maven.execution;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.maven.artifact.InvalidRepositoryException;
|
import org.apache.maven.artifact.InvalidRepositoryException;
|
||||||
|
@ -34,6 +37,8 @@ import org.apache.maven.settings.Repository;
|
||||||
import org.apache.maven.settings.Server;
|
import org.apache.maven.settings.Server;
|
||||||
import org.apache.maven.settings.Settings;
|
import org.apache.maven.settings.Settings;
|
||||||
import org.apache.maven.settings.SettingsUtils;
|
import org.apache.maven.settings.SettingsUtils;
|
||||||
|
import org.apache.maven.toolchain.model.PersistedToolchains;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
import org.codehaus.plexus.component.annotations.Component;
|
import org.codehaus.plexus.component.annotations.Component;
|
||||||
import org.codehaus.plexus.component.annotations.Requirement;
|
import org.codehaus.plexus.component.annotations.Requirement;
|
||||||
import org.codehaus.plexus.util.StringUtils;
|
import org.codehaus.plexus.util.StringUtils;
|
||||||
|
@ -46,6 +51,7 @@ public class DefaultMavenExecutionRequestPopulator
|
||||||
@Requirement
|
@Requirement
|
||||||
private RepositorySystem repositorySystem;
|
private RepositorySystem repositorySystem;
|
||||||
|
|
||||||
|
@Override
|
||||||
public MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
|
public MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
|
||||||
throws MavenExecutionRequestPopulationException
|
throws MavenExecutionRequestPopulationException
|
||||||
{
|
{
|
||||||
|
@ -134,6 +140,29 @@ public class DefaultMavenExecutionRequestPopulator
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MavenExecutionRequest populateFromToolchains( MavenExecutionRequest request, PersistedToolchains toolchains )
|
||||||
|
throws MavenExecutionRequestPopulationException
|
||||||
|
{
|
||||||
|
if ( toolchains != null )
|
||||||
|
{
|
||||||
|
Map<String, List<ToolchainModel>> groupedToolchains = new HashMap<String, List<ToolchainModel>>( 2 );
|
||||||
|
|
||||||
|
for ( ToolchainModel model : toolchains.getToolchains() )
|
||||||
|
{
|
||||||
|
if ( !groupedToolchains.containsKey( model.getType() ) )
|
||||||
|
{
|
||||||
|
groupedToolchains.put( model.getType(), new ArrayList<ToolchainModel>() );
|
||||||
|
}
|
||||||
|
|
||||||
|
groupedToolchains.get( model.getType() ).add( model );
|
||||||
|
}
|
||||||
|
|
||||||
|
request.setToolchains( groupedToolchains );
|
||||||
|
}
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
private void populateDefaultPluginGroups( MavenExecutionRequest request )
|
private void populateDefaultPluginGroups( MavenExecutionRequest request )
|
||||||
{
|
{
|
||||||
request.addPluginGroup( "org.apache.maven.plugins" );
|
request.addPluginGroup( "org.apache.maven.plugins" );
|
||||||
|
|
|
@ -22,6 +22,7 @@ package org.apache.maven.execution;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
@ -31,6 +32,7 @@ import org.apache.maven.project.ProjectBuildingRequest;
|
||||||
import org.apache.maven.settings.Mirror;
|
import org.apache.maven.settings.Mirror;
|
||||||
import org.apache.maven.settings.Proxy;
|
import org.apache.maven.settings.Proxy;
|
||||||
import org.apache.maven.settings.Server;
|
import org.apache.maven.settings.Server;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
import org.codehaus.plexus.logging.Logger;
|
import org.codehaus.plexus.logging.Logger;
|
||||||
import org.eclipse.aether.RepositoryCache;
|
import org.eclipse.aether.RepositoryCache;
|
||||||
import org.eclipse.aether.repository.WorkspaceReader;
|
import org.eclipse.aether.repository.WorkspaceReader;
|
||||||
|
@ -394,4 +396,19 @@ public interface MavenExecutionRequest
|
||||||
*/
|
*/
|
||||||
String getBuilderId();
|
String getBuilderId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param toolchains all toolchains grouped by type
|
||||||
|
* @return this request
|
||||||
|
* @since 3.2.6
|
||||||
|
*/
|
||||||
|
MavenExecutionRequest setToolchains( Map<String, List<ToolchainModel>> toolchains );
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return all toolchains grouped by type, never {@code null}
|
||||||
|
* @since 3.2.6
|
||||||
|
*/
|
||||||
|
Map<String, List<ToolchainModel>> getToolchains();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.maven.execution;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.apache.maven.settings.Settings;
|
import org.apache.maven.settings.Settings;
|
||||||
|
import org.apache.maven.toolchain.model.PersistedToolchains;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assists in populating an execution request for invocation of Maven.
|
* Assists in populating an execution request for invocation of Maven.
|
||||||
|
@ -42,6 +43,20 @@ public interface MavenExecutionRequestPopulator
|
||||||
MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
|
MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
|
||||||
throws MavenExecutionRequestPopulationException;
|
throws MavenExecutionRequestPopulationException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies the values from the given toolchains into the specified execution request. This method will replace any
|
||||||
|
* existing values in the execution request that are controlled by the toolchains. Hence, it is expected that this
|
||||||
|
* method is called on a new/empty execution request before the caller mutates it to fit its needs.
|
||||||
|
*
|
||||||
|
* @param request The execution request to populate, must not be {@code null}.
|
||||||
|
* @param toolchains The toolchains to copy into the execution request, may be {@code null}.
|
||||||
|
* @return The populated execution request, never {@code null}.
|
||||||
|
* @throws MavenExecutionRequestPopulationException If the execution request could not be populated.
|
||||||
|
* @since 3.2.6
|
||||||
|
*/
|
||||||
|
MavenExecutionRequest populateFromToolchains( MavenExecutionRequest request, PersistedToolchains toolchains )
|
||||||
|
throws MavenExecutionRequestPopulationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injects default values like plugin groups or repositories into the specified execution request.
|
* Injects default values like plugin groups or repositories into the specified execution request.
|
||||||
*
|
*
|
||||||
|
|
|
@ -37,6 +37,8 @@ import org.apache.commons.cli.UnrecognizedOptionException;
|
||||||
import org.apache.maven.BuildAbort;
|
import org.apache.maven.BuildAbort;
|
||||||
import org.apache.maven.InternalErrorException;
|
import org.apache.maven.InternalErrorException;
|
||||||
import org.apache.maven.Maven;
|
import org.apache.maven.Maven;
|
||||||
|
import org.apache.maven.building.FileSource;
|
||||||
|
import org.apache.maven.building.Problem;
|
||||||
import org.apache.maven.building.Source;
|
import org.apache.maven.building.Source;
|
||||||
import org.apache.maven.cli.event.DefaultEventSpyContext;
|
import org.apache.maven.cli.event.DefaultEventSpyContext;
|
||||||
import org.apache.maven.cli.event.ExecutionEventLogger;
|
import org.apache.maven.cli.event.ExecutionEventLogger;
|
||||||
|
@ -66,7 +68,11 @@ import org.apache.maven.settings.building.SettingsBuilder;
|
||||||
import org.apache.maven.settings.building.SettingsBuildingRequest;
|
import org.apache.maven.settings.building.SettingsBuildingRequest;
|
||||||
import org.apache.maven.settings.building.SettingsBuildingResult;
|
import org.apache.maven.settings.building.SettingsBuildingResult;
|
||||||
import org.apache.maven.settings.building.SettingsProblem;
|
import org.apache.maven.settings.building.SettingsProblem;
|
||||||
|
import org.apache.maven.toolchain.MisconfiguredToolchainException;
|
||||||
|
import org.apache.maven.toolchain.building.DefaultToolchainsBuildingRequest;
|
||||||
import org.apache.maven.toolchain.building.ToolchainsBuilder;
|
import org.apache.maven.toolchain.building.ToolchainsBuilder;
|
||||||
|
import org.apache.maven.toolchain.building.ToolchainsBuildingException;
|
||||||
|
import org.apache.maven.toolchain.building.ToolchainsBuildingResult;
|
||||||
import org.codehaus.plexus.ContainerConfiguration;
|
import org.codehaus.plexus.ContainerConfiguration;
|
||||||
import org.codehaus.plexus.DefaultContainerConfiguration;
|
import org.codehaus.plexus.DefaultContainerConfiguration;
|
||||||
import org.codehaus.plexus.DefaultPlexusContainer;
|
import org.codehaus.plexus.DefaultPlexusContainer;
|
||||||
|
@ -445,6 +451,8 @@ public class MavenCli
|
||||||
|
|
||||||
settingsBuilder = container.lookup( SettingsBuilder.class );
|
settingsBuilder = container.lookup( SettingsBuilder.class );
|
||||||
|
|
||||||
|
toolchainsBuilder = container.lookup( ToolchainsBuilder.class );
|
||||||
|
|
||||||
dispatcher = (DefaultSecDispatcher) container.lookup( SecDispatcher.class, "maven" );
|
dispatcher = (DefaultSecDispatcher) container.lookup( SecDispatcher.class, "maven" );
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
|
@ -837,18 +845,60 @@ public class MavenCli
|
||||||
|
|
||||||
cliRequest.request.setGlobalToolchainsFile( globalToolchainsFile );
|
cliRequest.request.setGlobalToolchainsFile( globalToolchainsFile );
|
||||||
cliRequest.request.setUserToolchainsFile( userToolchainsFile );
|
cliRequest.request.setUserToolchainsFile( userToolchainsFile );
|
||||||
|
|
||||||
// Unlike settings, the toolchains aren't built here.
|
DefaultToolchainsBuildingRequest toolchainsRequest = new DefaultToolchainsBuildingRequest();
|
||||||
// That's done by the maven-toolchains-plugin, by calling it from the project with the proper configuration
|
if ( globalToolchainsFile.isFile() )
|
||||||
|
{
|
||||||
|
toolchainsRequest.setGlobalToolchainsSource( new FileSource( globalToolchainsFile ) );
|
||||||
|
}
|
||||||
|
if ( userToolchainsFile.isFile() )
|
||||||
|
{
|
||||||
|
toolchainsRequest.setUserToolchainsSource( new FileSource( userToolchainsFile ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
eventSpyDispatcher.onEvent( toolchainsRequest );
|
||||||
|
|
||||||
|
slf4jLogger.debug( "Reading global toolchains from "
|
||||||
|
+ getLocation( toolchainsRequest.getGlobalToolchainsSource(), globalToolchainsFile ) );
|
||||||
|
slf4jLogger.debug( "Reading user toolchains from "
|
||||||
|
+ getLocation( toolchainsRequest.getUserToolchainsSource(), userToolchainsFile ) );
|
||||||
|
|
||||||
|
ToolchainsBuildingResult toolchainsResult;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
toolchainsResult = toolchainsBuilder.build( toolchainsRequest );
|
||||||
|
}
|
||||||
|
catch ( ToolchainsBuildingException e )
|
||||||
|
{
|
||||||
|
throw new MisconfiguredToolchainException( e.getMessage(), e );
|
||||||
|
}
|
||||||
|
|
||||||
|
eventSpyDispatcher.onEvent( toolchainsRequest );
|
||||||
|
|
||||||
|
executionRequestPopulator.populateFromToolchains( cliRequest.request,
|
||||||
|
toolchainsResult.getEffectiveToolchains() );
|
||||||
|
|
||||||
|
if ( !toolchainsResult.getProblems().isEmpty() && slf4jLogger.isWarnEnabled() )
|
||||||
|
{
|
||||||
|
slf4jLogger.warn( "" );
|
||||||
|
slf4jLogger.warn( "Some problems were encountered while building the effective toolchains" );
|
||||||
|
|
||||||
|
for ( Problem problem : toolchainsResult.getProblems() )
|
||||||
|
{
|
||||||
|
slf4jLogger.warn( problem.getMessage() + " @ " + problem.getLocation() );
|
||||||
|
}
|
||||||
|
|
||||||
|
slf4jLogger.warn( "" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object getLocation( Source source, File file )
|
private Object getLocation( Source source, File defaultLocation )
|
||||||
{
|
{
|
||||||
if ( source != null )
|
if ( source != null )
|
||||||
{
|
{
|
||||||
return source.getLocation();
|
return source.getLocation();
|
||||||
}
|
}
|
||||||
return file;
|
return defaultLocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MavenExecutionRequest populateRequest( CliRequest cliRequest )
|
private MavenExecutionRequest populateRequest( CliRequest cliRequest )
|
||||||
|
|
Loading…
Reference in New Issue