You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2024/12/13 15:19:17 UTC
(sling-org-apache-sling-feature) branch feature/SLING-12566-m2-settings created (now 9c55fa2)
This is an automated email from the ASF dual-hosted git repository.
sseifert pushed a change to branch feature/SLING-12566-m2-settings
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature.git
at 9c55fa2 SLING-12566 Respect localRepository configuration in ~/.m2/settings.xml before defaulting to ~/.m2/repository
This branch includes the following new commits:
new 9c55fa2 SLING-12566 Respect localRepository configuration in ~/.m2/settings.xml before defaulting to ~/.m2/repository
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(sling-org-apache-sling-feature) 01/01: SLING-12566 Respect localRepository configuration in ~/.m2/settings.xml before defaulting to ~/.m2/repository
Posted by ss...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sseifert pushed a commit to branch feature/SLING-12566-m2-settings
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature.git
commit 9c55fa2efcb0676eafe09898f4382c83844da4ce
Author: Stefan Seifert <st...@users.noreply.github.com>
AuthorDate: Fri Dec 13 16:18:12 2024 +0100
SLING-12566 Respect localRepository configuration in ~/.m2/settings.xml before defaulting to ~/.m2/repository
---
.../io/artifacts/ArtifactManagerConfig.java | 45 +++++++++++++++++++++-
1 file changed, 43 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManagerConfig.java b/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManagerConfig.java
index 5dde69d..568e729 100644
--- a/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManagerConfig.java
+++ b/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManagerConfig.java
@@ -18,12 +18,23 @@
*/
package org.apache.sling.feature.io.artifacts;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
import java.io.File;
+import java.io.IOException;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.sling.feature.io.artifacts.spi.ArtifactProviderContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
/**
* This class holds the configuration of artifact manager.
@@ -54,17 +65,20 @@ public class ArtifactManagerConfig implements ArtifactProviderContext {
*/
private final @NotNull String repoHome;
+ private static final Logger logger = LoggerFactory.getLogger(ArtifactManagerConfig.class);
+
/**
* Create a new configuration object. Set the default values
*/
public ArtifactManagerConfig() {
// set defaults
+ String mvnRepositoryDirectory = getMvnRepositoryDirectory();
this.repositoryUrls = new String[] {
- "file://" + new File(System.getProperty("user.home")).toURI().getPath() + ".m2/repository",
+ "file://" + new File(mvnRepositoryDirectory).toURI().getPath(),
"https://repo.maven.apache.org/maven2",
"https://repository.apache.org/content/groups/snapshots"
};
- this.repoHome = System.getProperty("user.home") + "/.m2/repository/";
+ this.repoHome = mvnRepositoryDirectory + "/";
}
/**
@@ -179,4 +193,31 @@ public class ArtifactManagerConfig implements ArtifactProviderContext {
String getMvnHome() {
return this.repoHome;
}
+
+ /**
+ * Get the .m2 directory for the current user.
+ * If a ~/.m2/settings.xml exists, it is checked for a localRepository configuration.
+ * Otherwise ~/.m2/repository is used as default value.
+ * @return Maven repository directory
+ */
+ private static final String getMvnRepositoryDirectory() {
+ String mavenDirectory = System.getProperty("user.home") + "/.m2";
+ File settings = new File(mavenDirectory, "settings.xml");
+ if (settings.exists()) {
+ try {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document doc = builder.parse(settings);
+ NodeList nodes = doc.getElementsByTagName("localRepository");
+ if (nodes.getLength() > 0) {
+ String localRepository = nodes.item(0).getTextContent();
+ return new File(localRepository).getAbsolutePath();
+ }
+ } catch (ParserConfigurationException | SAXException | IOException ex) {
+ logger.warn("Unable to parse " + settings.getAbsolutePath(), ex);
+ }
+ }
+ return mavenDirectory + "/repository";
+ }
}