This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-verifier.git
The following commit(s) were added to refs/heads/master by this push:
new ef9d6fb [MSHARED-1414] Interpolate expressions in settings file
correctly (#91)
ef9d6fb is described below
commit ef9d6fb01132b91998683268d51a75c9aca8e4b8
Author: Konrad Windszus <[email protected]>
AuthorDate: Thu Jun 20 18:05:19 2024 +0200
[MSHARED-1414] Interpolate expressions in settings file correctly (#91)
---
pom.xml | 6 ++-
.../org/apache/maven/shared/verifier/Verifier.java | 54 +++++++++++++---------
.../apache/maven/shared/verifier/VerifierTest.java | 9 ++++
src/test/resources/settings-with-expressions.xml | 22 +++++++++
4 files changed, 69 insertions(+), 22 deletions(-)
diff --git a/pom.xml b/pom.xml
index 54392fe..e6d91c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,7 +75,11 @@
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-xml</artifactId>
</dependency>
-
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings-builder</artifactId>
+ <version>3.9.8</version>
+ </dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
diff --git a/src/main/java/org/apache/maven/shared/verifier/Verifier.java
b/src/main/java/org/apache/maven/shared/verifier/Verifier.java
index 362b11d..378ffd0 100644
--- a/src/main/java/org/apache/maven/shared/verifier/Verifier.java
+++ b/src/main/java/org/apache/maven/shared/verifier/Verifier.java
@@ -65,6 +65,12 @@ import java.util.Properties;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
+import org.apache.maven.settings.building.DefaultSettingsBuilder;
+import org.apache.maven.settings.building.DefaultSettingsBuilderFactory;
+import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsBuildingException;
+import org.apache.maven.settings.building.SettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsBuildingResult;
import org.apache.maven.shared.utils.StringUtils;
import org.apache.maven.shared.utils.io.FileUtils;
import org.xml.sax.InputSource;
@@ -88,6 +94,14 @@ public class Verifier {
*/
private static final String CLEAN_CLI_ARGUMENT =
"org.apache.maven.plugins:maven-clean-plugin:clean";
+ public static final String USER_HOME = System.getProperty("user.home");
+
+ public static final File USER_MAVEN_CONFIGURATION_HOME = new
File(USER_HOME, ".m2");
+
+ public static final File DEFAULT_USER_SETTINGS_FILE = new
File(USER_MAVEN_CONFIGURATION_HOME, "settings.xml");
+
+ public static final File DEFAULT_GLOBAL_SETTINGS_FILE = new
File(System.getProperty("maven.conf"), "settings.xml");
+
private String localRepo;
private final String basedir;
@@ -627,31 +641,25 @@ public class Verifier {
return getArtifactMetadataPath(gid, aid, null);
}
- private static String retrieveLocalRepo(String settingsXmlPath) throws
VerificationException {
- UserModelReader userModelReader = new UserModelReader();
-
- String userHome = System.getProperty("user.home");
-
- File userXml;
-
- String repo = null;
+ static String retrieveLocalRepo(String settingsXmlPath) throws
SettingsBuildingException {
+ DefaultSettingsBuilderFactory settingsBuilderFactory = new
DefaultSettingsBuilderFactory();
+ DefaultSettingsBuilder settingsBuilder =
settingsBuilderFactory.newInstance();
+ File userSettingsFile;
if (settingsXmlPath != null) {
- userXml = new File(settingsXmlPath);
+ userSettingsFile = new File(settingsXmlPath);
} else {
- userXml = new File(userHome, ".m2/settings.xml");
+ userSettingsFile = DEFAULT_USER_SETTINGS_FILE;
}
- if (userXml.exists()) {
- userModelReader.parse(userXml);
-
- String localRepository = userModelReader.getLocalRepository();
- if (localRepository != null) {
- repo = new File(localRepository).getAbsolutePath();
- }
- }
+ SettingsBuildingRequest settingsBuildingRequest = new
DefaultSettingsBuildingRequest();
+
settingsBuildingRequest.setGlobalSettingsFile(DEFAULT_GLOBAL_SETTINGS_FILE);
+ settingsBuildingRequest.setUserSettingsFile(userSettingsFile);
+ settingsBuildingRequest.setSystemProperties(System.getProperties());
- return repo;
+ // takes care of interpolation and merging
+ SettingsBuildingResult result =
settingsBuilder.build(settingsBuildingRequest);
+ return result.getEffectiveSettings().getLocalRepository();
}
public void deleteArtifact(String org, String name, String version, String
ext) throws IOException {
@@ -1228,11 +1236,15 @@ public class Verifier {
}
if (localRepo == null) {
- localRepo = retrieveLocalRepo(settingsFile);
+ try {
+ localRepo = retrieveLocalRepo(settingsFile);
+ } catch (SettingsBuildingException e) {
+ throw new VerificationException("Cannot read settings.xml to
determine local repository location", e);
+ }
}
if (localRepo == null) {
- localRepo = System.getProperty("user.home") + "/.m2/repository";
+ localRepo = USER_HOME + "/.m2/repository";
}
File repoDir = new File(localRepo);
diff --git a/src/test/java/org/apache/maven/shared/verifier/VerifierTest.java
b/src/test/java/org/apache/maven/shared/verifier/VerifierTest.java
index 1ce198d..9fc3bdd 100644
--- a/src/test/java/org/apache/maven/shared/verifier/VerifierTest.java
+++ b/src/test/java/org/apache/maven/shared/verifier/VerifierTest.java
@@ -50,6 +50,7 @@ import java.util.Properties;
import java.util.stream.Stream;
import org.apache.commons.io.FileUtils;
+import org.apache.maven.settings.building.SettingsBuildingException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest;
@@ -234,6 +235,14 @@ public class VerifierTest {
assertThat(verifier.launcher.cliArgs, allOf(hasItemInArray("cliArg1"),
hasItemInArray("cliArg2")));
}
+ @Test
+ void testInterpolationInSettingsFile() throws SettingsBuildingException {
+ // use settings.xml with expressions for local repo
+ String localRepo =
Verifier.retrieveLocalRepo("src/test/resources/settings-with-expressions.xml");
+ String expectedLocalRepo = System.getProperty("user.home") +
"/test-repository";
+ assertEquals(expectedLocalRepo, localRepo);
+ }
+
@Test
public void useRealLogFile() throws Exception {
FileUtils.copyDirectory(new File("src/test/resources"), new
File("target/test-project"));
diff --git a/src/test/resources/settings-with-expressions.xml
b/src/test/resources/settings-with-expressions.xml
new file mode 100644
index 0000000..fdfc742
--- /dev/null
+++ b/src/test/resources/settings-with-expressions.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
+ <localRepository>${user.home}/test-repository</localRepository>
+</settings>
\ No newline at end of file