[1.x] Fix user properties interpolation and maven.multiModuleProjectDirectory (fixes #1031) (#1056)

This commit is contained in:
Guillaume Nodet
2024-07-16 17:16:31 +02:00
committed by GitHub
parent a5a5eb5782
commit df5a179269
4 changed files with 59 additions and 4 deletions

View File

@@ -132,9 +132,11 @@ public class DefaultClient implements Client {
} else {
dir = parameters.userDir();
}
Path multiModuleProjectDirectory = parameters.multiModuleProjectDirectory(dir);
System.setProperty(
Environment.MAVEN_MULTIMODULE_PROJECT_DIRECTORY.getProperty(),
parameters.multiModuleProjectDirectory(dir).toString());
Environment.MAVEN_MULTIMODULE_PROJECT_DIRECTORY.getProperty(), multiModuleProjectDirectory.toString());
Environment.MAVEN_MULTIMODULE_PROJECT_DIRECTORY.addCommandLineOption(
args, multiModuleProjectDirectory.toString());
// .mvn/jvm.config
if (Files.isRegularFile(parameters.jvmConfigPath())) {

View File

@@ -1443,7 +1443,6 @@ public class DaemonMavenCli implements DaemonCli {
static void populateProperties(CliRequest cliRequest, Properties systemProperties, Properties userProperties)
throws InterpolationException {
addEnvVars(systemProperties);
// ----------------------------------------------------------------------
// Options that are set on the command line become system properties
@@ -1462,6 +1461,7 @@ public class DaemonMavenCli implements DaemonCli {
}
}
addEnvVars(systemProperties);
SystemProperties.addSystemProperties(systemProperties);
StringSearchInterpolator interpolator = createInterpolator(cliRequest, cliProperties, systemProperties);
@@ -1471,6 +1471,14 @@ public class DaemonMavenCli implements DaemonCli {
userProperties.setProperty(name, value);
}
systemProperties.putAll(userProperties);
// ----------------------------------------------------------------------
// I'm leaving the setting of system properties here as not to break
// the SystemPropertyProfileActivator. This won't harm embedding. jvz.
// ----------------------------------------------------------------------
userProperties.forEach((k, v) -> System.setProperty((String) k, (String) v));
// ----------------------------------------------------------------------
// Properties containing info about the currently running version of Maven
// These override any corresponding properties set on the command line

View File

@@ -56,4 +56,38 @@ class MavenConfNativeIT {
assertTrue(
o.getMessages().stream().anyMatch(m -> m.toString().contains(conf)), "Output should contain " + conf);
}
@Test
void interpolation() throws IOException, InterruptedException {
final TestClientOutput o = new TestClientOutput();
client.execute(
o,
"org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate",
"-D",
"expression=something",
"-q",
"-DforceStdout",
"--raw-streams")
.assertSuccess();
String conf = parameters.multiModuleProjectDirectory().toString();
assertTrue(
o.getMessages().stream().anyMatch(m -> m.toString().contains(conf)), "Output should contain " + conf);
}
@Test
void multiModuleProjectDirectory() throws IOException, InterruptedException {
final TestClientOutput o = new TestClientOutput();
client.execute(
o,
"org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate",
"-D",
"expression=maven.multiModuleProjectDirectory",
"-q",
"-DforceStdout",
"--raw-streams")
.assertSuccess();
String conf = parameters.multiModuleProjectDirectory().toString();
assertTrue(
o.getMessages().stream().anyMatch(m -> m.toString().contains(conf)), "Output should contain " + conf);
}
}

View File

@@ -18,7 +18,18 @@
*/
package org.mvndaemon.mvnd.it;
import java.io.IOException;
import org.junit.jupiter.api.Test;
import org.mvndaemon.mvnd.junit.MvndTest;
@MvndTest(projectDir = "src/test/projects/maven-conf")
class MavenConfTest extends MavenConfNativeIT {}
class MavenConfTest extends MavenConfNativeIT {
@Test
@Override
void multiModuleProjectDirectory() throws IOException, InterruptedException {
// empty test as multiModuleProjectDirectory is set by the client
// and can not be really tested
}
}