mirror of https://github.com/apache/maven.git
[MNG-5659] Provide project-specific settings located in ${session.rootdir}/.mvn/settings.xml by default (#1059)
This commit is contained in:
parent
edeff8643e
commit
e6303aae32
|
@ -48,7 +48,7 @@ public interface SettingsBuilder extends Service {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
default SettingsBuilderResult build(
|
default SettingsBuilderResult build(
|
||||||
@Nonnull Session session, @Nonnull Source globalSettingsSource, @Nonnull Source userSettingsSource) {
|
@Nonnull Session session, @Nonnull Source globalSettingsSource, @Nonnull Source userSettingsSource) {
|
||||||
return build(SettingsBuilderRequest.build(session, globalSettingsSource, userSettingsSource));
|
return build(session, globalSettingsSource, null, userSettingsSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,6 +60,37 @@ public interface SettingsBuilder extends Service {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
default SettingsBuilderResult build(
|
default SettingsBuilderResult build(
|
||||||
@Nonnull Session session, @Nonnull Path globalSettingsPath, @Nonnull Path userSettingsPath) {
|
@Nonnull Session session, @Nonnull Path globalSettingsPath, @Nonnull Path userSettingsPath) {
|
||||||
return build(SettingsBuilderRequest.build(session, globalSettingsPath, userSettingsPath));
|
return build(session, globalSettingsPath, null, userSettingsPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the effective settings of the specified settings sources.
|
||||||
|
*
|
||||||
|
* @return the result of the settings building, never {@code null}
|
||||||
|
* @throws SettingsBuilderException if the effective settings could not be built
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
default SettingsBuilderResult build(
|
||||||
|
@Nonnull Session session,
|
||||||
|
@Nonnull Source globalSettingsSource,
|
||||||
|
@Nonnull Source projectSettingsSource,
|
||||||
|
@Nonnull Source userSettingsSource) {
|
||||||
|
return build(
|
||||||
|
SettingsBuilderRequest.build(session, globalSettingsSource, projectSettingsSource, userSettingsSource));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the effective settings of the specified settings paths.
|
||||||
|
*
|
||||||
|
* @return the result of the settings building, never {@code null}
|
||||||
|
* @throws SettingsBuilderException if the effective settings could not be built
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
default SettingsBuilderResult build(
|
||||||
|
@Nonnull Session session,
|
||||||
|
@Nonnull Path globalSettingsPath,
|
||||||
|
@Nonnull Path projectSettingsPath,
|
||||||
|
@Nonnull Path userSettingsPath) {
|
||||||
|
return build(SettingsBuilderRequest.build(session, globalSettingsPath, projectSettingsPath, userSettingsPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,22 @@ public interface SettingsBuilderRequest {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
Optional<Source> getGlobalSettingsSource();
|
Optional<Source> getGlobalSettingsSource();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the project settings source.
|
||||||
|
*
|
||||||
|
* @return the project settings source or {@code null} if none
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
Optional<Source> getProjectSettingsSource();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the project settings path.
|
||||||
|
*
|
||||||
|
* @return the project settings path or {@code null} if none
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
Optional<Path> getProjectSettingsPath();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the user settings path.
|
* Gets the user settings path.
|
||||||
*
|
*
|
||||||
|
@ -75,19 +91,39 @@ public interface SettingsBuilderRequest {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
static SettingsBuilderRequest build(
|
static SettingsBuilderRequest build(
|
||||||
@Nonnull Session session, @Nonnull Source globalSettingsSource, @Nonnull Source userSettingsSource) {
|
@Nonnull Session session, @Nonnull Source globalSettingsSource, @Nonnull Source userSettingsSource) {
|
||||||
|
return build(session, globalSettingsSource, null, userSettingsSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
static SettingsBuilderRequest build(
|
||||||
|
@Nonnull Session session, @Nonnull Path globalSettingsPath, @Nonnull Path userSettingsPath) {
|
||||||
|
return build(session, globalSettingsPath, null, userSettingsPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
static SettingsBuilderRequest build(
|
||||||
|
@Nonnull Session session,
|
||||||
|
@Nonnull Source globalSettingsSource,
|
||||||
|
@Nonnull Source projectSettingsSource,
|
||||||
|
@Nonnull Source userSettingsSource) {
|
||||||
return builder()
|
return builder()
|
||||||
.session(nonNull(session, "session cannot be null"))
|
.session(nonNull(session, "session cannot be null"))
|
||||||
.globalSettingsSource(nonNull(globalSettingsSource, "globalSettingsSource cannot be null"))
|
.globalSettingsSource(nonNull(globalSettingsSource, "globalSettingsSource cannot be null"))
|
||||||
|
.projectSettingsSource(nonNull(projectSettingsSource, "projectSettingsSource cannot be null"))
|
||||||
.userSettingsSource(nonNull(userSettingsSource, "userSettingsSource cannot be null"))
|
.userSettingsSource(nonNull(userSettingsSource, "userSettingsSource cannot be null"))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
static SettingsBuilderRequest build(
|
static SettingsBuilderRequest build(
|
||||||
@Nonnull Session session, @Nonnull Path globalSettingsPath, @Nonnull Path userSettingsPath) {
|
@Nonnull Session session,
|
||||||
|
@Nonnull Path globalSettingsPath,
|
||||||
|
@Nonnull Path projectSettingsPath,
|
||||||
|
@Nonnull Path userSettingsPath) {
|
||||||
return builder()
|
return builder()
|
||||||
.session(nonNull(session, "session cannot be null"))
|
.session(nonNull(session, "session cannot be null"))
|
||||||
.globalSettingsPath(nonNull(globalSettingsPath, "globalSettingsPath cannot be null"))
|
.globalSettingsPath(nonNull(globalSettingsPath, "globalSettingsPath cannot be null"))
|
||||||
|
.projectSettingsPath(nonNull(projectSettingsPath, "projectSettingsPath cannot be null"))
|
||||||
.userSettingsPath(nonNull(userSettingsPath, "userSettingsPath cannot be null"))
|
.userSettingsPath(nonNull(userSettingsPath, "userSettingsPath cannot be null"))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
@ -102,6 +138,8 @@ public interface SettingsBuilderRequest {
|
||||||
Session session;
|
Session session;
|
||||||
Path globalSettingsPath;
|
Path globalSettingsPath;
|
||||||
Source globalSettingsSource;
|
Source globalSettingsSource;
|
||||||
|
Path projectSettingsPath;
|
||||||
|
Source projectSettingsSource;
|
||||||
Path userSettingsPath;
|
Path userSettingsPath;
|
||||||
Source userSettingsSource;
|
Source userSettingsSource;
|
||||||
|
|
||||||
|
@ -120,6 +158,16 @@ public interface SettingsBuilderRequest {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SettingsBuilderRequestBuilder projectSettingsPath(Path projectSettingsPath) {
|
||||||
|
this.projectSettingsPath = projectSettingsPath;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SettingsBuilderRequestBuilder projectSettingsSource(Source projectSettingsSource) {
|
||||||
|
this.projectSettingsSource = projectSettingsSource;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public SettingsBuilderRequestBuilder userSettingsPath(Path userSettingsPath) {
|
public SettingsBuilderRequestBuilder userSettingsPath(Path userSettingsPath) {
|
||||||
this.userSettingsPath = userSettingsPath;
|
this.userSettingsPath = userSettingsPath;
|
||||||
return this;
|
return this;
|
||||||
|
@ -132,12 +180,20 @@ public interface SettingsBuilderRequest {
|
||||||
|
|
||||||
public SettingsBuilderRequest build() {
|
public SettingsBuilderRequest build() {
|
||||||
return new DefaultSettingsBuilderRequest(
|
return new DefaultSettingsBuilderRequest(
|
||||||
session, globalSettingsPath, globalSettingsSource, userSettingsPath, userSettingsSource);
|
session,
|
||||||
|
globalSettingsPath,
|
||||||
|
globalSettingsSource,
|
||||||
|
projectSettingsPath,
|
||||||
|
projectSettingsSource,
|
||||||
|
userSettingsPath,
|
||||||
|
userSettingsSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class DefaultSettingsBuilderRequest extends BaseRequest implements SettingsBuilderRequest {
|
private static class DefaultSettingsBuilderRequest extends BaseRequest implements SettingsBuilderRequest {
|
||||||
private final Path globalSettingsPath;
|
private final Path globalSettingsPath;
|
||||||
private final Source globalSettingsSource;
|
private final Source globalSettingsSource;
|
||||||
|
private final Path projectSettingsPath;
|
||||||
|
private final Source projectSettingsSource;
|
||||||
private final Path userSettingsPath;
|
private final Path userSettingsPath;
|
||||||
private final Source userSettingsSource;
|
private final Source userSettingsSource;
|
||||||
|
|
||||||
|
@ -146,11 +202,15 @@ public interface SettingsBuilderRequest {
|
||||||
@Nonnull Session session,
|
@Nonnull Session session,
|
||||||
@Nullable Path globalSettingsPath,
|
@Nullable Path globalSettingsPath,
|
||||||
@Nullable Source globalSettingsSource,
|
@Nullable Source globalSettingsSource,
|
||||||
|
@Nullable Path projectSettingsPath,
|
||||||
|
@Nullable Source projectSettingsSource,
|
||||||
@Nullable Path userSettingsPath,
|
@Nullable Path userSettingsPath,
|
||||||
@Nullable Source userSettingsSource) {
|
@Nullable Source userSettingsSource) {
|
||||||
super(session);
|
super(session);
|
||||||
this.globalSettingsPath = globalSettingsPath;
|
this.globalSettingsPath = globalSettingsPath;
|
||||||
this.globalSettingsSource = globalSettingsSource;
|
this.globalSettingsSource = globalSettingsSource;
|
||||||
|
this.projectSettingsPath = projectSettingsPath;
|
||||||
|
this.projectSettingsSource = projectSettingsSource;
|
||||||
this.userSettingsPath = userSettingsPath;
|
this.userSettingsPath = userSettingsPath;
|
||||||
this.userSettingsSource = userSettingsSource;
|
this.userSettingsSource = userSettingsSource;
|
||||||
}
|
}
|
||||||
|
@ -167,6 +227,18 @@ public interface SettingsBuilderRequest {
|
||||||
return Optional.ofNullable(globalSettingsSource);
|
return Optional.ofNullable(globalSettingsSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public Optional<Path> getProjectSettingsPath() {
|
||||||
|
return Optional.ofNullable(projectSettingsPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public Optional<Source> getProjectSettingsSource() {
|
||||||
|
return Optional.ofNullable(projectSettingsSource);
|
||||||
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public Optional<Path> getUserSettingsPath() {
|
public Optional<Path> getUserSettingsPath() {
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
<code>
|
<code>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
public static final String USER_LEVEL = "user-level";
|
public static final String USER_LEVEL = "user-level";
|
||||||
|
public static final String PROJECT_LEVEL = "project-level";
|
||||||
public static final String GLOBAL_LEVEL = "global-level";
|
public static final String GLOBAL_LEVEL = "global-level";
|
||||||
|
|
||||||
private String sourceLevel = USER_LEVEL;
|
private String sourceLevel = USER_LEVEL;
|
||||||
|
@ -64,9 +65,9 @@
|
||||||
{
|
{
|
||||||
throw new IllegalStateException( "Cannot reset sourceLevel attribute; it is already set to: " + sourceLevel );
|
throw new IllegalStateException( "Cannot reset sourceLevel attribute; it is already set to: " + sourceLevel );
|
||||||
}
|
}
|
||||||
else if ( !( USER_LEVEL.equals( sourceLevel ) || GLOBAL_LEVEL.equals( sourceLevel ) ) )
|
else if ( !( USER_LEVEL.equals( sourceLevel ) || PROJECT_LEVEL.equals( sourceLevel ) || GLOBAL_LEVEL.equals( sourceLevel ) ) )
|
||||||
{
|
{
|
||||||
throw new IllegalArgumentException( "sourceLevel must be one of: {" + USER_LEVEL + "," + GLOBAL_LEVEL + "}" );
|
throw new IllegalArgumentException( "sourceLevel must be one of: {" + USER_LEVEL + "," + PROJECT_LEVEL + "," + GLOBAL_LEVEL + "}" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -87,6 +87,7 @@ public class DefaultMavenSettingsBuilder extends AbstractLogEnabled implements M
|
||||||
public Settings buildSettings(MavenExecutionRequest request) throws IOException, XmlPullParserException {
|
public Settings buildSettings(MavenExecutionRequest request) throws IOException, XmlPullParserException {
|
||||||
SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
|
SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
|
||||||
settingsRequest.setUserSettingsFile(request.getUserSettingsFile());
|
settingsRequest.setUserSettingsFile(request.getUserSettingsFile());
|
||||||
|
settingsRequest.setProjectSettingsFile(request.getProjectSettingsFile());
|
||||||
settingsRequest.setGlobalSettingsFile(request.getGlobalSettingsFile());
|
settingsRequest.setGlobalSettingsFile(request.getGlobalSettingsFile());
|
||||||
settingsRequest.setUserProperties(request.getUserProperties());
|
settingsRequest.setUserProperties(request.getUserProperties());
|
||||||
settingsRequest.setSystemProperties(request.getSystemProperties());
|
settingsRequest.setSystemProperties(request.getSystemProperties());
|
||||||
|
|
|
@ -90,6 +90,8 @@ public class DefaultMavenExecutionRequest implements MavenExecutionRequest {
|
||||||
|
|
||||||
private File userSettingsFile;
|
private File userSettingsFile;
|
||||||
|
|
||||||
|
private File projectSettingsFile;
|
||||||
|
|
||||||
private File globalSettingsFile;
|
private File globalSettingsFile;
|
||||||
|
|
||||||
private File userToolchainsFile;
|
private File userToolchainsFile;
|
||||||
|
@ -842,6 +844,18 @@ public class DefaultMavenExecutionRequest implements MavenExecutionRequest {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getProjectSettingsFile() {
|
||||||
|
return projectSettingsFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MavenExecutionRequest setProjectSettingsFile(File projectSettingsFile) {
|
||||||
|
this.projectSettingsFile = projectSettingsFile;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public File getGlobalSettingsFile() {
|
public File getGlobalSettingsFile() {
|
||||||
return globalSettingsFile;
|
return globalSettingsFile;
|
||||||
|
|
|
@ -393,6 +393,10 @@ public interface MavenExecutionRequest {
|
||||||
|
|
||||||
MavenExecutionRequest setUserSettingsFile(File userSettingsFile);
|
MavenExecutionRequest setUserSettingsFile(File userSettingsFile);
|
||||||
|
|
||||||
|
File getProjectSettingsFile();
|
||||||
|
|
||||||
|
MavenExecutionRequest setProjectSettingsFile(File projectSettingsFile);
|
||||||
|
|
||||||
File getGlobalSettingsFile();
|
File getGlobalSettingsFile();
|
||||||
|
|
||||||
MavenExecutionRequest setGlobalSettingsFile(File globalSettingsFile);
|
MavenExecutionRequest setGlobalSettingsFile(File globalSettingsFile);
|
||||||
|
|
|
@ -78,6 +78,8 @@ public class CLIManager {
|
||||||
|
|
||||||
public static final char ALTERNATE_USER_SETTINGS = 's';
|
public static final char ALTERNATE_USER_SETTINGS = 's';
|
||||||
|
|
||||||
|
public static final String ALTERNATE_PROJECT_SETTINGS = "ps";
|
||||||
|
|
||||||
public static final String ALTERNATE_GLOBAL_SETTINGS = "gs";
|
public static final String ALTERNATE_GLOBAL_SETTINGS = "gs";
|
||||||
|
|
||||||
public static final char ALTERNATE_USER_TOOLCHAINS = 't';
|
public static final char ALTERNATE_USER_TOOLCHAINS = 't';
|
||||||
|
@ -205,6 +207,11 @@ public class CLIManager {
|
||||||
.desc("Alternate path for the user settings file")
|
.desc("Alternate path for the user settings file")
|
||||||
.hasArg()
|
.hasArg()
|
||||||
.build());
|
.build());
|
||||||
|
options.addOption(Option.builder(ALTERNATE_PROJECT_SETTINGS)
|
||||||
|
.longOpt("project-settings")
|
||||||
|
.desc("Alternate path for the project settings file")
|
||||||
|
.hasArg()
|
||||||
|
.build());
|
||||||
options.addOption(Option.builder(ALTERNATE_GLOBAL_SETTINGS)
|
options.addOption(Option.builder(ALTERNATE_GLOBAL_SETTINGS)
|
||||||
.longOpt("global-settings")
|
.longOpt("global-settings")
|
||||||
.desc("Alternate path for the global settings file")
|
.desc("Alternate path for the global settings file")
|
||||||
|
|
|
@ -110,4 +110,12 @@ public class CliRequest {
|
||||||
public void setUserProperties(Properties properties) {
|
public void setUserProperties(Properties properties) {
|
||||||
this.userProperties.putAll(properties);
|
this.userProperties.putAll(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Path getRootDirectory() {
|
||||||
|
return rootDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path getTopDirectory() {
|
||||||
|
return topDirectory;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import javax.inject.Singleton;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.apache.commons.cli.CommandLine;
|
import org.apache.commons.cli.CommandLine;
|
||||||
import org.apache.maven.artifact.InvalidRepositoryException;
|
import org.apache.maven.artifact.InvalidRepositoryException;
|
||||||
|
@ -66,6 +67,8 @@ public class SettingsXmlConfigurationProcessor implements ConfigurationProcessor
|
||||||
|
|
||||||
public static final File DEFAULT_USER_SETTINGS_FILE = new File(USER_MAVEN_CONFIGURATION_HOME, "settings.xml");
|
public static final File DEFAULT_USER_SETTINGS_FILE = new File(USER_MAVEN_CONFIGURATION_HOME, "settings.xml");
|
||||||
|
|
||||||
|
public static final File DEFAULT_PROJECT_SETTINGS_FILE = new File(".mvn", "settings.xml");
|
||||||
|
|
||||||
public static final File DEFAULT_GLOBAL_SETTINGS_FILE = new File(System.getProperty("maven.conf"), "settings.xml");
|
public static final File DEFAULT_GLOBAL_SETTINGS_FILE = new File(System.getProperty("maven.conf"), "settings.xml");
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(SettingsXmlConfigurationProcessor.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(SettingsXmlConfigurationProcessor.class);
|
||||||
|
@ -98,6 +101,24 @@ public class SettingsXmlConfigurationProcessor implements ConfigurationProcessor
|
||||||
userSettingsFile = DEFAULT_USER_SETTINGS_FILE;
|
userSettingsFile = DEFAULT_USER_SETTINGS_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File projectSettingsFile;
|
||||||
|
|
||||||
|
if (commandLine.hasOption(CLIManager.ALTERNATE_PROJECT_SETTINGS)) {
|
||||||
|
projectSettingsFile = new File(commandLine.getOptionValue(CLIManager.ALTERNATE_PROJECT_SETTINGS));
|
||||||
|
projectSettingsFile = resolveFile(projectSettingsFile, workingDirectory);
|
||||||
|
|
||||||
|
if (!projectSettingsFile.isFile()) {
|
||||||
|
throw new FileNotFoundException(
|
||||||
|
"The specified project settings file does not exist: " + projectSettingsFile);
|
||||||
|
}
|
||||||
|
} else if (cliRequest.getRootDirectory() != null) {
|
||||||
|
projectSettingsFile = DEFAULT_PROJECT_SETTINGS_FILE;
|
||||||
|
projectSettingsFile = resolveFile(
|
||||||
|
projectSettingsFile, cliRequest.getRootDirectory().toString());
|
||||||
|
} else {
|
||||||
|
projectSettingsFile = null;
|
||||||
|
}
|
||||||
|
|
||||||
File globalSettingsFile;
|
File globalSettingsFile;
|
||||||
|
|
||||||
if (commandLine.hasOption(CLIManager.ALTERNATE_GLOBAL_SETTINGS)) {
|
if (commandLine.hasOption(CLIManager.ALTERNATE_GLOBAL_SETTINGS)) {
|
||||||
|
@ -113,13 +134,21 @@ public class SettingsXmlConfigurationProcessor implements ConfigurationProcessor
|
||||||
}
|
}
|
||||||
|
|
||||||
request.setGlobalSettingsFile(globalSettingsFile);
|
request.setGlobalSettingsFile(globalSettingsFile);
|
||||||
|
request.setProjectSettingsFile(projectSettingsFile);
|
||||||
request.setUserSettingsFile(userSettingsFile);
|
request.setUserSettingsFile(userSettingsFile);
|
||||||
|
|
||||||
SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
|
SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
|
||||||
settingsRequest.setGlobalSettingsFile(globalSettingsFile);
|
settingsRequest.setGlobalSettingsFile(globalSettingsFile);
|
||||||
|
settingsRequest.setProjectSettingsFile(projectSettingsFile);
|
||||||
settingsRequest.setUserSettingsFile(userSettingsFile);
|
settingsRequest.setUserSettingsFile(userSettingsFile);
|
||||||
settingsRequest.setSystemProperties(cliRequest.getSystemProperties());
|
settingsRequest.setSystemProperties(cliRequest.getSystemProperties());
|
||||||
settingsRequest.setUserProperties(cliRequest.getUserProperties());
|
Properties props = cliRequest.getUserProperties();
|
||||||
|
if (cliRequest.getRootDirectory() != null) {
|
||||||
|
props = new Properties();
|
||||||
|
props.putAll(cliRequest.getUserProperties());
|
||||||
|
props.put("session.rootDirectory", cliRequest.getRootDirectory().toString());
|
||||||
|
}
|
||||||
|
settingsRequest.setUserProperties(props);
|
||||||
|
|
||||||
if (request.getEventSpyDispatcher() != null) {
|
if (request.getEventSpyDispatcher() != null) {
|
||||||
request.getEventSpyDispatcher().onEvent(settingsRequest);
|
request.getEventSpyDispatcher().onEvent(settingsRequest);
|
||||||
|
@ -128,6 +157,9 @@ public class SettingsXmlConfigurationProcessor implements ConfigurationProcessor
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"Reading global settings from '{}'",
|
"Reading global settings from '{}'",
|
||||||
getLocation(settingsRequest.getGlobalSettingsSource(), settingsRequest.getGlobalSettingsFile()));
|
getLocation(settingsRequest.getGlobalSettingsSource(), settingsRequest.getGlobalSettingsFile()));
|
||||||
|
LOGGER.debug(
|
||||||
|
"Reading project settings from '{}'",
|
||||||
|
getLocation(settingsRequest.getProjectSettingsSource(), settingsRequest.getProjectSettingsFile()));
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"Reading user settings from '{}'",
|
"Reading user settings from '{}'",
|
||||||
getLocation(settingsRequest.getUserSettingsSource(), settingsRequest.getUserSettingsFile()));
|
getLocation(settingsRequest.getUserSettingsSource(), settingsRequest.getUserSettingsFile()));
|
||||||
|
|
|
@ -78,7 +78,13 @@ under the License.
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>com.github.siom79.japicmp</groupId>
|
<groupId>com.github.siom79.japicmp</groupId>
|
||||||
<artifactId>japicmp-maven-plugin</artifactId>
|
<artifactId>japicmp-maven-plugin</artifactId>
|
||||||
<configuration />
|
<configuration>
|
||||||
|
<parameter>
|
||||||
|
<excludes>
|
||||||
|
<exclude>org.apache.maven.settings.validation.SettingsValidator#validate(org.apache.maven.settings.Settings,boolean,org.apache.maven.settings.building.SettingsProblemCollector):METHOD_NEW_DEFAULT</exclude>
|
||||||
|
</excludes>
|
||||||
|
</parameter>
|
||||||
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
|
@ -32,6 +32,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.apache.maven.building.FileSource;
|
import org.apache.maven.building.FileSource;
|
||||||
import org.apache.maven.building.Source;
|
import org.apache.maven.building.Source;
|
||||||
|
import org.apache.maven.settings.Server;
|
||||||
import org.apache.maven.settings.Settings;
|
import org.apache.maven.settings.Settings;
|
||||||
import org.apache.maven.settings.TrackableBase;
|
import org.apache.maven.settings.TrackableBase;
|
||||||
import org.apache.maven.settings.io.SettingsParseException;
|
import org.apache.maven.settings.io.SettingsParseException;
|
||||||
|
@ -90,12 +91,17 @@ public class DefaultSettingsBuilder implements SettingsBuilder {
|
||||||
|
|
||||||
Source globalSettingsSource =
|
Source globalSettingsSource =
|
||||||
getSettingsSource(request.getGlobalSettingsFile(), request.getGlobalSettingsSource());
|
getSettingsSource(request.getGlobalSettingsFile(), request.getGlobalSettingsSource());
|
||||||
Settings globalSettings = readSettings(globalSettingsSource, request, problems);
|
Settings globalSettings = readSettings(globalSettingsSource, false, request, problems);
|
||||||
|
|
||||||
|
Source projectSettingsSource =
|
||||||
|
getSettingsSource(request.getProjectSettingsFile(), request.getProjectSettingsSource());
|
||||||
|
Settings projectSettings = readSettings(projectSettingsSource, true, request, problems);
|
||||||
|
|
||||||
Source userSettingsSource = getSettingsSource(request.getUserSettingsFile(), request.getUserSettingsSource());
|
Source userSettingsSource = getSettingsSource(request.getUserSettingsFile(), request.getUserSettingsSource());
|
||||||
Settings userSettings = readSettings(userSettingsSource, request, problems);
|
Settings userSettings = readSettings(userSettingsSource, false, request, problems);
|
||||||
|
|
||||||
settingsMerger.merge(userSettings, globalSettings, TrackableBase.GLOBAL_LEVEL);
|
settingsMerger.merge(projectSettings, globalSettings, TrackableBase.GLOBAL_LEVEL);
|
||||||
|
settingsMerger.merge(userSettings, projectSettings, TrackableBase.PROJECT_LEVEL);
|
||||||
|
|
||||||
problems.setSource("");
|
problems.setSource("");
|
||||||
|
|
||||||
|
@ -139,7 +145,10 @@ public class DefaultSettingsBuilder implements SettingsBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Settings readSettings(
|
private Settings readSettings(
|
||||||
Source settingsSource, SettingsBuildingRequest request, DefaultSettingsProblemCollector problems) {
|
Source settingsSource,
|
||||||
|
boolean isProjectSettings,
|
||||||
|
SettingsBuildingRequest request,
|
||||||
|
DefaultSettingsProblemCollector problems) {
|
||||||
if (settingsSource == null) {
|
if (settingsSource == null) {
|
||||||
return new Settings();
|
return new Settings();
|
||||||
}
|
}
|
||||||
|
@ -179,7 +188,23 @@ public class DefaultSettingsBuilder implements SettingsBuilder {
|
||||||
return new Settings();
|
return new Settings();
|
||||||
}
|
}
|
||||||
|
|
||||||
settingsValidator.validate(settings, problems);
|
settingsValidator.validate(settings, isProjectSettings, problems);
|
||||||
|
|
||||||
|
if (isProjectSettings) {
|
||||||
|
settings.setLocalRepository(null);
|
||||||
|
settings.setInteractiveMode(true);
|
||||||
|
settings.setOffline(false);
|
||||||
|
settings.setProxies(Collections.emptyList());
|
||||||
|
settings.setUsePluginRegistry(false);
|
||||||
|
for (Server server : settings.getServers()) {
|
||||||
|
server.setUsername(null);
|
||||||
|
server.setPassword(null);
|
||||||
|
server.setPrivateKey(null);
|
||||||
|
server.setPassword(null);
|
||||||
|
server.setFilePermissions(null);
|
||||||
|
server.setDirectoryPermissions(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,10 +30,14 @@ public class DefaultSettingsBuildingRequest implements SettingsBuildingRequest {
|
||||||
|
|
||||||
private File globalSettingsFile;
|
private File globalSettingsFile;
|
||||||
|
|
||||||
|
private File projectSettingsFile;
|
||||||
|
|
||||||
private File userSettingsFile;
|
private File userSettingsFile;
|
||||||
|
|
||||||
private SettingsSource globalSettingsSource;
|
private SettingsSource globalSettingsSource;
|
||||||
|
|
||||||
|
private SettingsSource projectSettingsSource;
|
||||||
|
|
||||||
private SettingsSource userSettingsSource;
|
private SettingsSource userSettingsSource;
|
||||||
|
|
||||||
private Properties systemProperties;
|
private Properties systemProperties;
|
||||||
|
@ -64,6 +68,30 @@ public class DefaultSettingsBuildingRequest implements SettingsBuildingRequest {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getProjectSettingsFile() {
|
||||||
|
return projectSettingsFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DefaultSettingsBuildingRequest setProjectSettingsFile(File projectSettingsFile) {
|
||||||
|
this.projectSettingsFile = projectSettingsFile;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingsSource getProjectSettingsSource() {
|
||||||
|
return projectSettingsSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DefaultSettingsBuildingRequest setProjectSettingsSource(SettingsSource projectSettingsSource) {
|
||||||
|
this.projectSettingsSource = projectSettingsSource;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public File getUserSettingsFile() {
|
public File getUserSettingsFile() {
|
||||||
return userSettingsFile;
|
return userSettingsFile;
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
package org.apache.maven.settings.building;
|
package org.apache.maven.settings.building;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the effective settings from a user settings file and/or a global settings file.
|
* Builds the effective settings from a user settings file, a project settings file
|
||||||
|
* and/or a global settings file.
|
||||||
*
|
*
|
||||||
* @author Benjamin Bentmann
|
* @author Benjamin Bentmann
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -60,6 +60,40 @@ public interface SettingsBuildingRequest {
|
||||||
*/
|
*/
|
||||||
SettingsBuildingRequest setGlobalSettingsSource(SettingsSource globalSettingsSource);
|
SettingsBuildingRequest setGlobalSettingsSource(SettingsSource globalSettingsSource);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the project settings file.
|
||||||
|
*
|
||||||
|
* @return The project settings file or {@code null} if none.
|
||||||
|
* @since 4.0.0
|
||||||
|
*/
|
||||||
|
File getProjectSettingsFile();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the project settings file. A non-existent settings file is equivalent to empty settings.
|
||||||
|
*
|
||||||
|
* @param projectSettingsFile The project settings file, may be {@code null} to disable project settings.
|
||||||
|
* @return This request, never {@code null}.
|
||||||
|
* @since 4.0.0
|
||||||
|
*/
|
||||||
|
DefaultSettingsBuildingRequest setProjectSettingsFile(File projectSettingsFile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the project settings source.
|
||||||
|
*
|
||||||
|
* @return The project settings source or {@code null} if none.
|
||||||
|
* @since 4.0.0
|
||||||
|
*/
|
||||||
|
SettingsSource getProjectSettingsSource();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the project settings source.
|
||||||
|
*
|
||||||
|
* @param projectSettingsSource The project settings source, may be {@code null} to disable global settings.
|
||||||
|
* @return This request, never {@code null}.
|
||||||
|
* @since 4.0.0
|
||||||
|
*/
|
||||||
|
SettingsBuildingRequest setProjectSettingsSource(SettingsSource projectSettingsSource);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the user settings file.
|
* Gets the user settings file.
|
||||||
*
|
*
|
||||||
|
|
|
@ -49,6 +49,44 @@ public class DefaultSettingsValidator implements SettingsValidator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate(Settings settings, SettingsProblemCollector problems) {
|
public void validate(Settings settings, SettingsProblemCollector problems) {
|
||||||
|
validate(settings, false, problems);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate(Settings settings, boolean isProjectSettings, SettingsProblemCollector problems) {
|
||||||
|
if (isProjectSettings) {
|
||||||
|
String msgS = "is not supported on project settings.";
|
||||||
|
String msgP = "are not supported on project settings.";
|
||||||
|
if (settings.getLocalRepository() != null
|
||||||
|
&& !settings.getLocalRepository().isEmpty()) {
|
||||||
|
addViolation(problems, Severity.WARNING, "localRepository", null, msgS);
|
||||||
|
}
|
||||||
|
if (settings.getInteractiveMode() != null && !settings.getInteractiveMode()) {
|
||||||
|
addViolation(problems, Severity.WARNING, "interactiveMode", null, msgS);
|
||||||
|
}
|
||||||
|
if (settings.isOffline()) {
|
||||||
|
addViolation(problems, Severity.WARNING, "offline", null, msgS);
|
||||||
|
}
|
||||||
|
if (!settings.getProxies().isEmpty()) {
|
||||||
|
addViolation(problems, Severity.WARNING, "proxies", null, msgP);
|
||||||
|
}
|
||||||
|
if (settings.isUsePluginRegistry()) {
|
||||||
|
addViolation(problems, Severity.WARNING, "usePluginRegistry", null, msgS);
|
||||||
|
}
|
||||||
|
List<Server> servers = settings.getServers();
|
||||||
|
for (int i = 0; i < servers.size(); i++) {
|
||||||
|
Server server = servers.get(i);
|
||||||
|
String serverField = "servers.server[" + i + "]";
|
||||||
|
validateStringEmpty(problems, serverField + ".username", server.getUsername(), msgS);
|
||||||
|
validateStringEmpty(problems, serverField + ".password", server.getPassword(), msgS);
|
||||||
|
validateStringEmpty(problems, serverField + ".privateKey", server.getPrivateKey(), msgS);
|
||||||
|
validateStringEmpty(problems, serverField + ".passphrase", server.getPassphrase(), msgS);
|
||||||
|
validateStringEmpty(problems, serverField + ".filePermissions", server.getFilePermissions(), msgS);
|
||||||
|
validateStringEmpty(
|
||||||
|
problems, serverField + ".directoryPermissions", server.getDirectoryPermissions(), msgS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (settings.isUsePluginRegistry()) {
|
if (settings.isUsePluginRegistry()) {
|
||||||
addViolation(problems, Severity.WARNING, "usePluginRegistry", null, "is deprecated and has no effect.");
|
addViolation(problems, Severity.WARNING, "usePluginRegistry", null, "is deprecated and has no effect.");
|
||||||
}
|
}
|
||||||
|
@ -207,6 +245,25 @@ public class DefaultSettingsValidator implements SettingsValidator {
|
||||||
// Field validation
|
// Field validation
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts:
|
||||||
|
* <p/>
|
||||||
|
* <ul>
|
||||||
|
* <li><code>string.length == null</code>
|
||||||
|
* <li><code>string.length == 0</code>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
private static boolean validateStringEmpty(
|
||||||
|
SettingsProblemCollector problems, String fieldName, String string, String message) {
|
||||||
|
if (string == null || string.length() == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
addViolation(problems, Severity.WARNING, fieldName, null, message);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Asserts:
|
* Asserts:
|
||||||
* <p/>
|
* <p/>
|
||||||
|
|
|
@ -35,4 +35,15 @@ public interface SettingsValidator {
|
||||||
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
|
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
|
||||||
*/
|
*/
|
||||||
void validate(Settings settings, SettingsProblemCollector problems);
|
void validate(Settings settings, SettingsProblemCollector problems);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate the specified settings.
|
||||||
|
*
|
||||||
|
* @param settings The settings to validate, must not be {@code null}.
|
||||||
|
* @param isProjectSettings Boolean indicating if the validation is for project settings or user / global settings.
|
||||||
|
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
|
||||||
|
*/
|
||||||
|
default void validate(Settings settings, boolean isProjectSettings, SettingsProblemCollector problems) {
|
||||||
|
validate(settings, problems);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue