michael-o commented on code in PR #1595:
URL: https://github.com/apache/maven/pull/1595#discussion_r1720797587


##########
maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java:
##########
@@ -1204,40 +1211,57 @@ void toolchains(CliRequest cliRequest) throws Exception 
{
                         "The specified user toolchains file does not exist: " 
+ userToolchainsFile);
             }
         } else {
-            userToolchainsFile = DEFAULT_USER_TOOLCHAINS_FILE;
+            String userToolchainsFileStr = 
cliRequest.getUserProperties().getProperty(Constants.MAVEN_USER_TOOLCHAINS);
+            if (userToolchainsFileStr != null) {
+                userToolchainsFile = new File(userToolchainsFileStr);
+            }
         }
 
-        File globalToolchainsFile;
+        File installationToolchainsFile = null;

Review Comment:
   Why not use `Path` here throughout?



##########
maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java:
##########
@@ -1624,20 +1643,65 @@ static void populateProperties(
         String mavenBuildVersion = 
CLIReportingUtils.createMavenVersionString(buildProperties);
         systemProperties.setProperty("maven.build.version", mavenBuildVersion);
 
-        BasicInterpolator interpolator =
-                createInterpolator(paths, systemProperties, userProperties, 
userSpecifiedProperties);
-        for (Map.Entry<Object, Object> e : userSpecifiedProperties.entrySet()) 
{
-            String name = (String) e.getKey();
-            String value = interpolator.interpolate((String) e.getValue());
-            userProperties.setProperty(name, value);
-            // 
----------------------------------------------------------------------
-            // I'm leaving the setting of system properties here as not to 
break
-            // the SystemPropertyProfileActivator. This won't harm embedding. 
jvz.
-            // 
----------------------------------------------------------------------
-            if (System.getProperty(name) == null) {
-                System.setProperty(name, value);
-            }
+        // 
----------------------------------------------------------------------
+        // Options that are set on the command line become system properties
+        // and therefore are set in the session properties. System properties
+        // are most dominant.
+        // 
----------------------------------------------------------------------
+
+        Properties userSpecifiedProperties =
+                
commandLine.getOptionProperties(String.valueOf(CLIManager.SET_USER_PROPERTY));
+        userProperties.putAll(userSpecifiedProperties);
+
+        // 
----------------------------------------------------------------------
+        // Load config files
+        // 
----------------------------------------------------------------------
+        Function<String, String> callback =
+                or(paths::getProperty, prefix("cli.", 
commandLine::getOptionValue), systemProperties::getProperty);
+
+        Path mavenConf;
+        if (systemProperties.getProperty(MAVEN_INSTALLATION_CONF) != null) {
+            mavenConf = 
fileSystem.getPath(systemProperties.getProperty(MAVEN_INSTALLATION_CONF));
+        } else if (systemProperties.getProperty("maven.conf") != null) {
+            mavenConf = 
fileSystem.getPath(systemProperties.getProperty("maven.conf"));
+        } else if (systemProperties.getProperty(MAVEN_HOME) != null) {
+            mavenConf = 
fileSystem.getPath(systemProperties.getProperty(MAVEN_HOME), "conf");
+        } else {
+            mavenConf = fileSystem.getPath("");
         }
+        Path propertiesFile = mavenConf.resolve("maven.properties");
+        MavenPropertiesLoader.loadProperties(userProperties, propertiesFile, 
callback, false);
+
+        // 
----------------------------------------------------------------------
+        // I'm leaving the setting of system properties here as not to break
+        // the SystemPropertyProfileActivator. This won't harm embedding. jvz.
+        // 
----------------------------------------------------------------------
+        Set<String> sys = 
SystemProperties.getSystemProperties().stringPropertyNames();
+        userProperties.stringPropertyNames().stream()
+                .filter(k -> !sys.contains(k))
+                .forEach(k -> System.setProperty(k, 
userProperties.getProperty(k)));
+    }

Review Comment:
   We must seriously reconsider this promotion in the future before GA.



##########
maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java:
##########
@@ -874,9 +873,17 @@ private static <T> List<T> reverse(List<T> list) {
     }
 
     private List<File> parseExtClasspath(CliRequest cliRequest) {
-        String extClassPath = 
cliRequest.userProperties.getProperty(EXT_CLASS_PATH);
+        String extClassPath = 
cliRequest.userProperties.getProperty(Constants.MAVEN_EXT_CLASS_PATH);
         if (extClassPath == null) {
-            extClassPath = 
cliRequest.systemProperties.getProperty(EXT_CLASS_PATH);
+            extClassPath = 
cliRequest.systemProperties.getProperty(Constants.MAVEN_EXT_CLASS_PATH);
+            if (extClassPath != null) {
+                slf4jLogger.warn(
+                        "The property {} has been set using a JVM system 
property which is deprecated. "
+                                + "The property can be passed as a maven 
argument or in the maven project configuration file,"
+                                + "usually located at {}.",

Review Comment:
   Args should be surrounded by single quotes.



##########
maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java:
##########
@@ -874,9 +873,17 @@ private static <T> List<T> reverse(List<T> list) {
     }
 
     private List<File> parseExtClasspath(CliRequest cliRequest) {
-        String extClassPath = 
cliRequest.userProperties.getProperty(EXT_CLASS_PATH);
+        String extClassPath = 
cliRequest.userProperties.getProperty(Constants.MAVEN_EXT_CLASS_PATH);
         if (extClassPath == null) {
-            extClassPath = 
cliRequest.systemProperties.getProperty(EXT_CLASS_PATH);
+            extClassPath = 
cliRequest.systemProperties.getProperty(Constants.MAVEN_EXT_CLASS_PATH);
+            if (extClassPath != null) {
+                slf4jLogger.warn(
+                        "The property {} has been set using a JVM system 
property which is deprecated. "
+                                + "The property can be passed as a maven 
argument or in the maven project configuration file,"
+                                + "usually located at {}.",
+                        Constants.MAVEN_EXT_CLASS_PATH,
+                        "[rootDirectory]/.mvn/maven.properties");

Review Comment:
   This message should use prop syntax: 
`"${rootDirectory}/.mvn/maven.properties"}`, no?



##########
maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java:
##########
@@ -1380,14 +1404,14 @@ private static boolean isRunningOnCI(Properties 
systemProperties) {
     }
 
     private String determineLocalRepositoryPath(final MavenExecutionRequest 
request) {
-        String userDefinedLocalRepo = 
request.getUserProperties().getProperty(MavenCli.LOCAL_REPO_PROPERTY);
+        String userDefinedLocalRepo = 
request.getUserProperties().getProperty(Constants.MAVEN_REPO_LOCAL);
         if (userDefinedLocalRepo != null) {
             return userDefinedLocalRepo;
         }
 
         // TODO Investigate why this can also be a Java system property and 
not just a Maven user property like
         // other properties
-        return 
request.getSystemProperties().getProperty(MavenCli.LOCAL_REPO_PROPERTY);
+        return 
request.getSystemProperties().getProperty(Constants.MAVEN_REPO_LOCAL);

Review Comment:
   @gnodet, should this also issue a warning like you did with ext classpath 
being a system property?



##########
maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java:
##########
@@ -1204,40 +1211,57 @@ void toolchains(CliRequest cliRequest) throws Exception 
{
                         "The specified user toolchains file does not exist: " 
+ userToolchainsFile);
             }
         } else {
-            userToolchainsFile = DEFAULT_USER_TOOLCHAINS_FILE;
+            String userToolchainsFileStr = 
cliRequest.getUserProperties().getProperty(Constants.MAVEN_USER_TOOLCHAINS);
+            if (userToolchainsFileStr != null) {
+                userToolchainsFile = new File(userToolchainsFileStr);
+            }
         }
 
-        File globalToolchainsFile;
+        File installationToolchainsFile = null;
 
-        if 
(cliRequest.commandLine.hasOption(CLIManager.ALTERNATE_GLOBAL_TOOLCHAINS)) {
-            globalToolchainsFile =
+        if 
(cliRequest.commandLine.hasOption(CLIManager.ALTERNATE_INSTALLATION_TOOLCHAINS))
 {
+            installationToolchainsFile =
+                    new 
File(cliRequest.commandLine.getOptionValue(CLIManager.ALTERNATE_INSTALLATION_TOOLCHAINS));
+            installationToolchainsFile = 
resolveFile(installationToolchainsFile, cliRequest.workingDirectory);
+
+            if (!installationToolchainsFile.isFile()) {
+                throw new FileNotFoundException(
+                        "The specified installation toolchains file does not 
exist: " + installationToolchainsFile);
+            }
+        } else if 
(cliRequest.commandLine.hasOption(CLIManager.ALTERNATE_GLOBAL_TOOLCHAINS)) {
+            installationToolchainsFile =
                     new 
File(cliRequest.commandLine.getOptionValue(CLIManager.ALTERNATE_GLOBAL_TOOLCHAINS));
-            globalToolchainsFile = resolveFile(globalToolchainsFile, 
cliRequest.workingDirectory);
+            installationToolchainsFile = 
resolveFile(installationToolchainsFile, cliRequest.workingDirectory);
 
-            if (!globalToolchainsFile.isFile()) {
+            if (!installationToolchainsFile.isFile()) {
                 throw new FileNotFoundException(
-                        "The specified global toolchains file does not exist: 
" + globalToolchainsFile);
+                        "The specified installation toolchains file does not 
exist: " + installationToolchainsFile);
             }
         } else {
-            globalToolchainsFile = DEFAULT_GLOBAL_TOOLCHAINS_FILE;
+            String installationToolchainsFileStr =
+                    
cliRequest.getUserProperties().getProperty(Constants.MAVEN_INSTALLATION_TOOLCHAINS);
+            if (installationToolchainsFileStr != null) {
+                installationToolchainsFile = new 
File(installationToolchainsFileStr);
+                installationToolchainsFile = 
resolveFile(installationToolchainsFile, cliRequest.workingDirectory);
+            }

Review Comment:
   This entire block makes me think: WE fail here if the toolchains file cannot 
be loaded, but we do not fail if core extensions file is provided, but not 
valid? FNFE and frieds...



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to