This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-3.9.x by this push:
new 88681b8b76 [3.9.x] Apply resolver changes and improvements (#11536)
88681b8b76 is described below
commit 88681b8b764e523298a7f98d428a8ec5ffc16548
Author: Tamas Cservenak <[email protected]>
AuthorDate: Wed Dec 10 12:34:27 2025 +0100
[3.9.x] Apply resolver changes and improvements (#11536)
Changes:
* allow per-request metadata nature
* redirect maven-compat update check manager to resolver
---
.../legacy/DefaultUpdateCheckManager.java | 139 +++------------------
.../transform/TransformationManagerTest.java | 8 ++
.../legacy/DefaultUpdateCheckManagerTest.java | 4 +-
.../repository/legacy/DefaultWagonManagerTest.java | 8 ++
.../internal/DefaultVersionRangeResolver.java | 2 +-
5 files changed, 39 insertions(+), 122 deletions(-)
diff --git
a/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
b/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
index fe32f9c138..320cd4ef97 100644
---
a/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
+++
b/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
@@ -19,13 +19,8 @@
package org.apache.maven.repository.legacy;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.channels.Channels;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileLock;
import java.util.Date;
+import java.util.HashMap;
import java.util.Properties;
import org.apache.maven.artifact.Artifact;
@@ -35,21 +30,31 @@
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
import org.apache.maven.repository.Proxy;
import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.internal.impl.TrackingFileManager;
/**
* DefaultUpdateCheckManager
*/
@Component(role = UpdateCheckManager.class)
public class DefaultUpdateCheckManager extends AbstractLogEnabled implements
UpdateCheckManager {
+ @Requirement
+ private TrackingFileManager trackingFileManager;
private static final String ERROR_KEY_SUFFIX = ".error";
- public DefaultUpdateCheckManager() {}
+ public DefaultUpdateCheckManager() {
+ // for plexus
+ }
- public DefaultUpdateCheckManager(Logger logger) {
+ /**
+ * For testing purposes.
+ */
+ public DefaultUpdateCheckManager(Logger logger, TrackingFileManager
trackingFileManager) {
enableLogging(logger);
+ this.trackingFileManager = trackingFileManager;
}
public static final String LAST_UPDATE_TAG = ".lastUpdated";
@@ -148,7 +153,7 @@ public void touch(Artifact artifact, ArtifactRepository
repository, String error
File touchfile = getTouchfile(artifact);
if (file.exists()) {
- touchfile.delete();
+ trackingFileManager.delete(touchfile);
} else {
writeLastUpdated(touchfile, getRepositoryKey(repository), error);
}
@@ -192,70 +197,10 @@ String getRepositoryKey(ArtifactRepository repository) {
}
private void writeLastUpdated(File touchfile, String key, String error) {
- synchronized (touchfile.getAbsolutePath().intern()) {
- if (!touchfile.getParentFile().exists()
- && !touchfile.getParentFile().mkdirs()) {
- getLogger()
- .debug("Failed to create directory: " +
touchfile.getParent()
- + " for tracking artifact metadata
resolution.");
- return;
- }
-
- FileChannel channel = null;
- FileLock lock = null;
- try {
- Properties props = new Properties();
-
- channel = new RandomAccessFile(touchfile, "rw").getChannel();
- lock = channel.lock();
-
- if (touchfile.canRead()) {
- getLogger().debug("Reading resolution-state from: " +
touchfile);
- props.load(Channels.newInputStream(channel));
- }
-
- props.setProperty(key,
Long.toString(System.currentTimeMillis()));
-
- if (error != null) {
- props.setProperty(key + ERROR_KEY_SUFFIX, error);
- } else {
- props.remove(key + ERROR_KEY_SUFFIX);
- }
-
- getLogger().debug("Writing resolution-state to: " + touchfile);
- channel.truncate(0);
- props.store(Channels.newOutputStream(channel), "Last modified
on: " + new Date());
-
- lock.release();
- lock = null;
-
- channel.close();
- channel = null;
- } catch (IOException e) {
- getLogger()
- .debug(
- "Failed to record lastUpdated information for
resolution.\nFile: "
- + touchfile.toString() + "; key: " +
key,
- e);
- } finally {
- if (lock != null) {
- try {
- lock.release();
- } catch (IOException e) {
- getLogger()
- .debug("Error releasing exclusive lock for
resolution tracking file: " + touchfile, e);
- }
- }
-
- if (channel != null) {
- try {
- channel.close();
- } catch (IOException e) {
- getLogger().debug("Error closing FileChannel for
resolution tracking file: " + touchfile, e);
- }
- }
- }
- }
+ HashMap<String, String> update = new HashMap<>();
+ update.put(key, Long.toString(System.currentTimeMillis()));
+ update.put(key + ERROR_KEY_SUFFIX, error); // error==null => remove
mapping
+ trackingFileManager.update(touchfile, update);
}
Date readLastUpdated(File touchfile, String key) {
@@ -284,53 +229,7 @@ private String getError(File touchFile, String key) {
}
private Properties read(File touchfile) {
- if (!touchfile.canRead()) {
- getLogger().debug("Skipped unreadable resolution tracking file " +
touchfile);
- return null;
- }
-
- synchronized (touchfile.getAbsolutePath().intern()) {
- FileInputStream in = null;
- FileLock lock = null;
-
- try {
- Properties props = new Properties();
-
- in = new FileInputStream(touchfile);
- lock = in.getChannel().lock(0, Long.MAX_VALUE, true);
-
- getLogger().debug("Reading resolution-state from: " +
touchfile);
- props.load(in);
-
- lock.release();
- lock = null;
-
- in.close();
- in = null;
-
- return props;
- } catch (IOException e) {
- getLogger().debug("Failed to read resolution tracking file " +
touchfile, e);
-
- return null;
- } finally {
- if (lock != null) {
- try {
- lock.release();
- } catch (IOException e) {
- getLogger().debug("Error releasing shared lock for
resolution tracking file: " + touchfile, e);
- }
- }
-
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- getLogger().debug("Error closing FileChannel for
resolution tracking file: " + touchfile, e);
- }
- }
- }
- }
+ return trackingFileManager.read(touchfile);
}
File getTouchfile(Artifact artifact) {
diff --git
a/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java
b/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java
index f6ee97bf32..5ea7a9c888 100644
---
a/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java
+++
b/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java
@@ -24,10 +24,18 @@
import
org.apache.maven.repository.legacy.resolver.transform.LatestArtifactTransformation;
import
org.apache.maven.repository.legacy.resolver.transform.ReleaseArtifactTransformation;
import
org.apache.maven.repository.legacy.resolver.transform.SnapshotTransformation;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusTestCase;
/** @author Jason van Zyl */
public class TransformationManagerTest extends PlexusTestCase {
+ @Override
+ protected void customizeContainerConfiguration(ContainerConfiguration
configuration) {
+ configuration.setAutoWiring(true);
+ configuration.setClassPathScanning(PlexusConstants.SCANNING_INDEX);
+ }
+
public void testTransformationManager() throws Exception {
ArtifactTransformationManager tm =
lookup(ArtifactTransformationManager.class);
diff --git
a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
index 8d5d156e26..8492ec30ff 100644
---
a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
+++
b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
@@ -28,6 +28,7 @@
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
+import org.eclipse.aether.internal.impl.DefaultTrackingFileManager;
public class DefaultUpdateCheckManagerTest extends
AbstractArtifactComponentTestCase {
@@ -42,7 +43,8 @@ protected String component() {
protected void setUp() throws Exception {
super.setUp();
- updateCheckManager = new DefaultUpdateCheckManager(new
ConsoleLogger(Logger.LEVEL_DEBUG, "test"));
+ updateCheckManager = new DefaultUpdateCheckManager(
+ new ConsoleLogger(Logger.LEVEL_DEBUG, "test"), new
DefaultTrackingFileManager());
}
public void testArtifact() throws Exception {
diff --git
a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
index 54271769b4..f5467ab146 100644
---
a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
+++
b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
@@ -42,6 +42,8 @@
import org.apache.maven.wagon.events.TransferListener;
import org.apache.maven.wagon.observers.AbstractTransferListener;
import org.apache.maven.wagon.observers.Debug;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.util.FileUtils;
@@ -57,6 +59,12 @@ public class DefaultWagonManagerTest extends PlexusTestCase {
private ArtifactRepositoryFactory artifactRepositoryFactory;
+ @Override
+ protected void customizeContainerConfiguration(ContainerConfiguration
configuration) {
+ configuration.setAutoWiring(true);
+ configuration.setClassPathScanning(PlexusConstants.SCANNING_INDEX);
+ }
+
protected void setUp() throws Exception {
super.setUp();
wagonManager = (DefaultWagonManager) lookup(WagonManager.class);
diff --git
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
index 6bbb4ec9f0..23b7bc84b5 100644
---
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
+++
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
@@ -156,7 +156,7 @@ public VersionRangeResult
resolveVersionRange(RepositorySystemSession session, V
} else {
Metadata.Nature wantedNature;
String natureString = ConfigUtils.getString(
- session, Metadata.Nature.RELEASE_OR_SNAPSHOT.name(),
MAVEN_VERSION_RANGE_RESOLUTION_NATURE);
+ session, request.getNature().name(),
MAVEN_VERSION_RANGE_RESOLUTION_NATURE);
if ("auto".equals(natureString)) {
org.eclipse.aether.artifact.Artifact lowerArtifact =
lowerBound != null
? request.getArtifact()