This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch maven-resolver-1.9.x
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/maven-resolver-1.9.x by this
push:
new c1a8e857b [1.9.x] Name mappers cleanup and new GAECV mapper (#1674)
c1a8e857b is described below
commit c1a8e857ba4b5a3332b13efc5542b58ce2e55128
Author: Tamas Cservenak <[email protected]>
AuthorDate: Tue Nov 18 14:04:41 2025 +0100
[1.9.x] Name mappers cleanup and new GAECV mapper (#1674)
Cleanup name mappers usage and introduce new, more selective mapper GAECV.
Changes:
* introduce GAECV next to existing GAV name mapper.
* make default GAECV
---
.../eclipse/aether/impl/guice/AetherModule.java | 24 +++++++-
.../impl/synccontext/named/GAECVNameMapper.java | 66 ++++++++++++++++++++
.../impl/synccontext/named/GAVNameMapper.java | 31 +++++++---
.../impl/synccontext/named/NameMappers.java | 71 ++++++++++++++++++++--
.../named/NamedLockFactoryAdapterFactoryImpl.java | 5 +-
.../providers/FileGAECVNameMapperProvider.java} | 35 +++++++----
.../FileHashingGAECVNameMapperProvider.java} | 35 +++++++----
.../named/providers/GAECVNameMapperProvider.java} | 35 +++++++----
.../src/site/markdown/synccontextfactory.md.vm | 5 +-
.../impl/synccontext/FileLockAdapterTest.java | 5 +-
.../NamedLockFactoryAdapterTestSupport.java | 5 +-
.../synccontext/named/BasedirNameMapperTest.java | 2 +-
.../impl/synccontext/named/GAVNameMapperTest.java | 2 +-
.../synccontext/named/HashingNameMapperTest.java | 2 +-
.../NamedLockFactoryAdapterTestSupport.java | 5 +-
.../aether/supplier/RepositorySystemSupplier.java | 3 +
src/site/markdown/configuration.md | 2 +-
17 files changed, 269 insertions(+), 64 deletions(-)
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
index aad52e535..81bc001f5 100644
---
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
@@ -95,8 +95,11 @@ import
org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
import
org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactory;
import
org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactoryImpl;
import
org.eclipse.aether.internal.impl.synccontext.named.providers.DiscriminatingNameMapperProvider;
+import
org.eclipse.aether.internal.impl.synccontext.named.providers.FileGAECVNameMapperProvider;
import
org.eclipse.aether.internal.impl.synccontext.named.providers.FileGAVNameMapperProvider;
+import
org.eclipse.aether.internal.impl.synccontext.named.providers.FileHashingGAECVNameMapperProvider;
import
org.eclipse.aether.internal.impl.synccontext.named.providers.FileHashingGAVNameMapperProvider;
+import
org.eclipse.aether.internal.impl.synccontext.named.providers.GAECVNameMapperProvider;
import
org.eclipse.aether.internal.impl.synccontext.named.providers.GAVNameMapperProvider;
import
org.eclipse.aether.internal.impl.synccontext.named.providers.StaticNameMapperProvider;
import org.eclipse.aether.named.NamedLockFactory;
@@ -282,6 +285,10 @@ public class AetherModule extends AbstractModule {
.annotatedWith(Names.named(NameMappers.GAV_NAME))
.toProvider(GAVNameMapperProvider.class)
.in(Singleton.class);
+ bind(NameMapper.class)
+ .annotatedWith(Names.named(NameMappers.GAECV_NAME))
+ .toProvider(GAECVNameMapperProvider.class)
+ .in(Singleton.class);
bind(NameMapper.class)
.annotatedWith(Names.named(NameMappers.DISCRIMINATING_NAME))
.toProvider(DiscriminatingNameMapperProvider.class)
@@ -290,10 +297,18 @@ public class AetherModule extends AbstractModule {
.annotatedWith(Names.named(NameMappers.FILE_GAV_NAME))
.toProvider(FileGAVNameMapperProvider.class)
.in(Singleton.class);
+ bind(NameMapper.class)
+ .annotatedWith(Names.named(NameMappers.FILE_GAECV_NAME))
+ .toProvider(FileGAECVNameMapperProvider.class)
+ .in(Singleton.class);
bind(NameMapper.class)
.annotatedWith(Names.named(NameMappers.FILE_HGAV_NAME))
.toProvider(FileHashingGAVNameMapperProvider.class)
.in(Singleton.class);
+ bind(NameMapper.class)
+ .annotatedWith(Names.named(NameMappers.FILE_HGAECV_NAME))
+ .toProvider(FileHashingGAECVNameMapperProvider.class)
+ .in(Singleton.class);
bind(NamedLockFactory.class)
.annotatedWith(Names.named(NoopNamedLockFactory.NAME))
@@ -393,20 +408,27 @@ public class AetherModule extends AbstractModule {
return Collections.unmodifiableMap(result);
}
+ @SuppressWarnings("checkstyle:parameternumber")
@Provides
@Singleton
Map<String, NameMapper> provideNameMappers(
@Named(NameMappers.STATIC_NAME) NameMapper staticNameMapper,
@Named(NameMappers.GAV_NAME) NameMapper gavNameMapper,
+ @Named(NameMappers.GAECV_NAME) NameMapper gaecvNameMapper,
@Named(NameMappers.DISCRIMINATING_NAME) NameMapper
discriminatingNameMapper,
@Named(NameMappers.FILE_GAV_NAME) NameMapper fileGavNameMapper,
- @Named(NameMappers.FILE_HGAV_NAME) NameMapper
fileHashingGavNameMapper) {
+ @Named(NameMappers.FILE_GAECV_NAME) NameMapper fileGaecvNameMapper,
+ @Named(NameMappers.FILE_HGAV_NAME) NameMapper
fileHashingGavNameMapper,
+ @Named(NameMappers.FILE_HGAECV_NAME) NameMapper
fileHashingGaecvNameMapper) {
Map<String, NameMapper> result = new HashMap<>();
result.put(NameMappers.STATIC_NAME, staticNameMapper);
result.put(NameMappers.GAV_NAME, gavNameMapper);
+ result.put(NameMappers.GAECV_NAME, gaecvNameMapper);
result.put(NameMappers.DISCRIMINATING_NAME, discriminatingNameMapper);
result.put(NameMappers.FILE_GAV_NAME, fileGavNameMapper);
+ result.put(NameMappers.FILE_GAECV_NAME, fileGaecvNameMapper);
result.put(NameMappers.FILE_HGAV_NAME, fileHashingGavNameMapper);
+ result.put(NameMappers.FILE_HGAECV_NAME, fileHashingGaecvNameMapper);
return Collections.unmodifiableMap(result);
}
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/GAECVNameMapper.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/GAECVNameMapper.java
new file mode 100644
index 000000000..3d5344beb
--- /dev/null
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/GAECVNameMapper.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+package org.eclipse.aether.internal.impl.synccontext.named;
+
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * Artifact GAECV {@link NameMapper} extends {@link GAVNameMapper} and
improves artifact name mapping selectivity by
+ * using all coordinates.
+ *
+ * @since 1.9.25
+ */
+public class GAECVNameMapper extends GAVNameMapper {
+ public GAECVNameMapper(
+ boolean fileSystemFriendly,
+ String artifactPrefix,
+ String artifactSuffix,
+ String metadataPrefix,
+ String metadataSuffix,
+ String fieldSeparator) {
+ super(fileSystemFriendly, artifactPrefix, artifactSuffix,
metadataPrefix, metadataSuffix, fieldSeparator);
+ }
+
+ @Override
+ protected String getArtifactName(Artifact artifact) {
+ if (artifact.getClassifier().isEmpty()) {
+ return artifactPrefix
+ + artifact.getGroupId()
+ + fieldSeparator
+ + artifact.getArtifactId()
+ + fieldSeparator
+ + artifact.getExtension()
+ + fieldSeparator
+ + artifact.getBaseVersion()
+ + artifactSuffix;
+ } else {
+ return artifactPrefix
+ + artifact.getGroupId()
+ + fieldSeparator
+ + artifact.getArtifactId()
+ + fieldSeparator
+ + artifact.getExtension()
+ + fieldSeparator
+ + artifact.getClassifier()
+ + fieldSeparator
+ + artifact.getBaseVersion()
+ + artifactSuffix;
+ }
+ }
+}
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapper.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapper.java
index b08f7867c..39c34eb2c 100644
---
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapper.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapper.java
@@ -30,21 +30,24 @@ import static java.util.Objects.requireNonNull;
/**
* Artifact GAV {@link NameMapper}, uses artifact and metadata coordinates to
name their corresponding locks. Is not
- * considering local repository, only the artifact coordinates. May use custom
prefixes and sufixes and separators,
+ * considering local repository, only the artifact coordinates. May use custom
prefixes and suffixes and separators,
* hence this instance may or may not be filesystem friendly (depends on
strings used).
+ * <p>
+ * Note: in earlier Resolver 1.9.x versions this mapper was the default, but
it changed to {@link GAECVNameMapper}
+ * in 1.9.25.
*/
public class GAVNameMapper implements NameMapper {
- private final boolean fileSystemFriendly;
+ protected final boolean fileSystemFriendly;
- private final String artifactPrefix;
+ protected final String artifactPrefix;
- private final String artifactSuffix;
+ protected final String artifactSuffix;
- private final String metadataPrefix;
+ protected final String metadataPrefix;
- private final String metadataSuffix;
+ protected final String metadataSuffix;
- private final String fieldSeparator;
+ protected final String fieldSeparator;
public GAVNameMapper(
boolean fileSystemFriendly,
@@ -88,7 +91,7 @@ public class GAVNameMapper implements NameMapper {
return keys;
}
- private String getArtifactName(Artifact artifact) {
+ protected String getArtifactName(Artifact artifact) {
return artifactPrefix
+ artifact.getGroupId()
+ fieldSeparator
@@ -98,9 +101,9 @@ public class GAVNameMapper implements NameMapper {
+ artifactSuffix;
}
- private static final String MAVEN_METADATA = "maven-metadata.xml";
+ protected static final String MAVEN_METADATA = "maven-metadata.xml";
- private String getMetadataName(Metadata metadata) {
+ protected String getMetadataName(Metadata metadata) {
String name = metadataPrefix;
if (!metadata.getGroupId().isEmpty()) {
name += metadata.getGroupId();
@@ -122,10 +125,18 @@ public class GAVNameMapper implements NameMapper {
return name + metadataSuffix;
}
+ /**
+ * @deprecated Use {@link NameMappers} to create name mappers instead.
+ */
+ @Deprecated
public static NameMapper gav() {
return new GAVNameMapper(false, "artifact:", "", "metadata:", "", ":");
}
+ /**
+ * @deprecated Use {@link NameMappers} to create name mappers instead.
+ */
+ @Deprecated
public static NameMapper fileGav() {
return new GAVNameMapper(true, "artifact~", ".lock", "metadata~",
".lock", "~");
}
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NameMappers.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NameMappers.java
index 6297c21b2..b4cfb85d7 100644
---
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NameMappers.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NameMappers.java
@@ -21,11 +21,14 @@ package org.eclipse.aether.internal.impl.synccontext.named;
/**
* As end-user "mappers" are actually configurations/compositions and are
constructed from several NameMapper
* implementations, this helper class constructing them. This class also holds
"names" used by service locator and
- * Guice/Sisu as well.
+ * Guice/Sisu as well. Ideally, name mapper you want should exist here,
constructing name mappers should not be
+ * needed (unless some very specific case or testing).
*
* @since 1.9.4
*/
public final class NameMappers {
+ private NameMappers() {}
+
public static final String STATIC_NAME = "static";
public static final String GAV_NAME = "gav";
@@ -34,6 +37,21 @@ public final class NameMappers {
public static final String FILE_HGAV_NAME = "file-hgav";
+ /**
+ * @since 1.9.25
+ */
+ public static final String GAECV_NAME = "gaecv";
+
+ /**
+ * @since 1.9.25
+ */
+ public static final String FILE_GAECV_NAME = "file-gaecv";
+
+ /**
+ * @since 1.9.25
+ */
+ public static final String FILE_HGAECV_NAME = "file-hgaecv";
+
/**
* @since 1.9.6
*/
@@ -46,11 +64,47 @@ public final class NameMappers {
}
public static NameMapper gavNameMapper() {
- return GAVNameMapper.gav();
+ return gavNameMapper(false);
+ }
+
+ /**
+ * @since 1.9.25
+ */
+ public static NameMapper gavNameMapper(boolean fileSystemFriendly) {
+ if (fileSystemFriendly) {
+ return new GAVNameMapper(true, "artifact~", ".lock", "metadata~",
".lock", "~");
+ } else {
+ return new GAVNameMapper(false, "artifact:", "", "metadata:", "",
":");
+ }
+ }
+
+ /**
+ * @since 1.9.25
+ */
+ public static NameMapper gaecvNameMapper() {
+ return gaecvNameMapper(false);
+ }
+
+ /**
+ * @since 1.9.25
+ */
+ public static NameMapper gaecvNameMapper(boolean fileSystemFriendly) {
+ if (fileSystemFriendly) {
+ return new GAECVNameMapper(true, "artifact~", ".lock",
"metadata~", ".lock", "~");
+ } else {
+ return new GAECVNameMapper(false, "artifact:", "", "metadata:",
"", ":");
+ }
}
public static NameMapper fileGavNameMapper() {
- return new BasedirNameMapper(GAVNameMapper.fileGav());
+ return new BasedirNameMapper(gavNameMapper(true));
+ }
+
+ /**
+ * @since 1.9.25
+ */
+ public static NameMapper fileGaecvNameMapper() {
+ return new BasedirNameMapper(gaecvNameMapper(true));
}
/**
@@ -61,10 +115,17 @@ public final class NameMappers {
}
public static NameMapper fileHashingGavNameMapper() {
- return new BasedirNameMapper(new
HashingNameMapper(GAVNameMapper.gav()));
+ return new BasedirNameMapper(new
HashingNameMapper(gavNameMapper(false)));
+ }
+
+ /**
+ * @since 1.9.25
+ */
+ public static NameMapper fileHashingGaecvNameMapper() {
+ return new BasedirNameMapper(new
HashingNameMapper(gaecvNameMapper(false)));
}
public static NameMapper discriminatingNameMapper() {
- return new DiscriminatingNameMapper(GAVNameMapper.gav());
+ return new DiscriminatingNameMapper(gavNameMapper(false));
}
}
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NamedLockFactoryAdapterFactoryImpl.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NamedLockFactoryAdapterFactoryImpl.java
index 132c47260..d7a229857 100644
---
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NamedLockFactoryAdapterFactoryImpl.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NamedLockFactoryAdapterFactoryImpl.java
@@ -60,7 +60,7 @@ import static java.util.Objects.requireNonNull;
public class NamedLockFactoryAdapterFactoryImpl implements
NamedLockFactoryAdapterFactory, Service {
private static final String DEFAULT_FACTORY_NAME =
LocalReadWriteLockNamedLockFactory.NAME;
- private static final String DEFAULT_NAME_MAPPER_NAME =
NameMappers.GAV_NAME;
+ private static final String DEFAULT_NAME_MAPPER_NAME =
NameMappers.GAECV_NAME;
private static Map<String, NamedLockFactory> getManuallyCreatedFactories()
{
HashMap<String, NamedLockFactory> factories = new HashMap<>();
@@ -75,9 +75,12 @@ public class NamedLockFactoryAdapterFactoryImpl implements
NamedLockFactoryAdapt
HashMap<String, NameMapper> mappers = new HashMap<>();
mappers.put(NameMappers.STATIC_NAME, NameMappers.staticNameMapper());
mappers.put(NameMappers.GAV_NAME, NameMappers.gavNameMapper());
+ mappers.put(NameMappers.GAECV_NAME, NameMappers.gaecvNameMapper());
mappers.put(NameMappers.DISCRIMINATING_NAME,
NameMappers.discriminatingNameMapper());
mappers.put(NameMappers.FILE_GAV_NAME,
NameMappers.fileGavNameMapper());
+ mappers.put(NameMappers.FILE_GAECV_NAME,
NameMappers.fileGaecvNameMapper());
mappers.put(NameMappers.FILE_HGAV_NAME,
NameMappers.fileHashingGavNameMapper());
+ mappers.put(NameMappers.FILE_HGAECV_NAME,
NameMappers.fileHashingGaecvNameMapper());
return Collections.unmodifiableMap(mappers);
}
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/FileGAECVNameMapperProvider.java
similarity index 53%
copy from
maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
copy to
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/FileGAECVNameMapperProvider.java
index a199b83c8..d24fd77af 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/FileGAECVNameMapperProvider.java
@@ -16,18 +16,31 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.eclipse.aether.internal.impl.synccontext;
+package org.eclipse.aether.internal.impl.synccontext.named.providers;
-import org.eclipse.aether.internal.impl.synccontext.named.BasedirNameMapper;
-import org.eclipse.aether.internal.impl.synccontext.named.GAVNameMapper;
-import org.eclipse.aether.named.providers.FileLockNamedLockFactory;
-import org.junit.BeforeClass;
+import javax.inject.Named;
+import javax.inject.Provider;
+import javax.inject.Singleton;
-public class FileLockAdapterTest extends NamedLockFactoryAdapterTestSupport {
- @BeforeClass
- public static void createNamedLockFactory() {
- nameMapper = new BasedirNameMapper(GAVNameMapper.fileGav());
- namedLockFactory = new FileLockNamedLockFactory();
- createAdapter();
+import org.eclipse.aether.internal.impl.synccontext.named.NameMapper;
+import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
+
+/**
+ * The "file-gaecv" name mapper provider.
+ *
+ * @since 1.9.25
+ */
+@Singleton
+@Named(NameMappers.FILE_GAECV_NAME)
+public class FileGAECVNameMapperProvider implements Provider<NameMapper> {
+ private final NameMapper mapper;
+
+ public FileGAECVNameMapperProvider() {
+ this.mapper = NameMappers.fileGaecvNameMapper();
+ }
+
+ @Override
+ public NameMapper get() {
+ return mapper;
}
}
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/FileHashingGAECVNameMapperProvider.java
similarity index 52%
copy from
maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
copy to
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/FileHashingGAECVNameMapperProvider.java
index a199b83c8..81f6648dc 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/FileHashingGAECVNameMapperProvider.java
@@ -16,18 +16,31 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.eclipse.aether.internal.impl.synccontext;
+package org.eclipse.aether.internal.impl.synccontext.named.providers;
-import org.eclipse.aether.internal.impl.synccontext.named.BasedirNameMapper;
-import org.eclipse.aether.internal.impl.synccontext.named.GAVNameMapper;
-import org.eclipse.aether.named.providers.FileLockNamedLockFactory;
-import org.junit.BeforeClass;
+import javax.inject.Named;
+import javax.inject.Provider;
+import javax.inject.Singleton;
-public class FileLockAdapterTest extends NamedLockFactoryAdapterTestSupport {
- @BeforeClass
- public static void createNamedLockFactory() {
- nameMapper = new BasedirNameMapper(GAVNameMapper.fileGav());
- namedLockFactory = new FileLockNamedLockFactory();
- createAdapter();
+import org.eclipse.aether.internal.impl.synccontext.named.NameMapper;
+import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
+
+/**
+ * The "file-hgaecv" name mapper provider.
+ *
+ * @since 1.9.25
+ */
+@Singleton
+@Named(NameMappers.FILE_HGAECV_NAME)
+public class FileHashingGAECVNameMapperProvider implements
Provider<NameMapper> {
+ private final NameMapper mapper;
+
+ public FileHashingGAECVNameMapperProvider() {
+ this.mapper = NameMappers.fileHashingGaecvNameMapper();
+ }
+
+ @Override
+ public NameMapper get() {
+ return mapper;
}
}
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/GAECVNameMapperProvider.java
similarity index 54%
copy from
maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
copy to
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/GAECVNameMapperProvider.java
index a199b83c8..aadec8609 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/providers/GAECVNameMapperProvider.java
@@ -16,18 +16,31 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.eclipse.aether.internal.impl.synccontext;
+package org.eclipse.aether.internal.impl.synccontext.named.providers;
-import org.eclipse.aether.internal.impl.synccontext.named.BasedirNameMapper;
-import org.eclipse.aether.internal.impl.synccontext.named.GAVNameMapper;
-import org.eclipse.aether.named.providers.FileLockNamedLockFactory;
-import org.junit.BeforeClass;
+import javax.inject.Named;
+import javax.inject.Provider;
+import javax.inject.Singleton;
-public class FileLockAdapterTest extends NamedLockFactoryAdapterTestSupport {
- @BeforeClass
- public static void createNamedLockFactory() {
- nameMapper = new BasedirNameMapper(GAVNameMapper.fileGav());
- namedLockFactory = new FileLockNamedLockFactory();
- createAdapter();
+import org.eclipse.aether.internal.impl.synccontext.named.NameMapper;
+import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
+
+/**
+ * The "gaecv" name mapper provider.
+ *
+ * @since 1.9.25
+ */
+@Singleton
+@Named(NameMappers.GAECV_NAME)
+public class GAECVNameMapperProvider implements Provider<NameMapper> {
+ private final NameMapper mapper;
+
+ public GAECVNameMapperProvider() {
+ this.mapper = NameMappers.gaecvNameMapper();
+ }
+
+ @Override
+ public NameMapper get() {
+ return mapper;
}
}
diff --git a/maven-resolver-impl/src/site/markdown/synccontextfactory.md.vm
b/maven-resolver-impl/src/site/markdown/synccontextfactory.md.vm
index c970fa15e..67755b417 100644
--- a/maven-resolver-impl/src/site/markdown/synccontextfactory.md.vm
+++ b/maven-resolver-impl/src/site/markdown/synccontextfactory.md.vm
@@ -61,10 +61,13 @@ For the `aether.syncContext.named.factory` property
following values are allowed
For the `aether.syncContext.named.nameMapper` property following values are
allowed:
-- `discriminating` (default), uses hostname + local repo + GAV to create
unique lock names for artifacts.
+- `discriminating`, uses hostname + local repo + GAV to create unique lock
names for artifacts.
- `gav` uses GAV to create unique lock names for artifacts and metadata. Is
not unique if multiple local repositories are involved.
- `file-gav` uses GAV and session to create absolute file paths (to be used
with `file-lock` factory)
- `file-hgav` uses more compact layout than `file-gav` by SHA-1 digest,
similar to git (to be used with `file-lock` factory)
+- `gaecv` (default) uses GAECV to create unique lock names for artifacts and
metadata. Is not unique if multiple local repositories are involved.
+- `file-gaecv` uses GAECV and session to create absolute file paths (to be
used with `file-lock` factory)
+- `file-hgaecv` uses more compact layout than `file-gaecv` by SHA-1 digest,
similar to git (to be used with `file-lock` factory)
- `static` uses static (same) string as lock name for any input. Effectively
providing functionality same as old
"global" locking SyncContextFactory. Mostly for testing/experimental
purposes.
- `file-static` same as `static` but to be used with `file-lock` factory.
Mostly for testing/experimental purposes.
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
index a199b83c8..51ba46288 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
+++
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/FileLockAdapterTest.java
@@ -18,15 +18,14 @@
*/
package org.eclipse.aether.internal.impl.synccontext;
-import org.eclipse.aether.internal.impl.synccontext.named.BasedirNameMapper;
-import org.eclipse.aether.internal.impl.synccontext.named.GAVNameMapper;
+import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
import org.eclipse.aether.named.providers.FileLockNamedLockFactory;
import org.junit.BeforeClass;
public class FileLockAdapterTest extends NamedLockFactoryAdapterTestSupport {
@BeforeClass
public static void createNamedLockFactory() {
- nameMapper = new BasedirNameMapper(GAVNameMapper.fileGav());
+ nameMapper = NameMappers.fileGavNameMapper();
namedLockFactory = new FileLockNamedLockFactory();
createAdapter();
}
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/NamedLockFactoryAdapterTestSupport.java
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/NamedLockFactoryAdapterTestSupport.java
index 93226d814..8eb260cda 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/NamedLockFactoryAdapterTestSupport.java
+++
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/NamedLockFactoryAdapterTestSupport.java
@@ -29,9 +29,8 @@ import java.util.concurrent.TimeUnit;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.SyncContext;
import org.eclipse.aether.artifact.DefaultArtifact;
-import
org.eclipse.aether.internal.impl.synccontext.named.DiscriminatingNameMapper;
-import org.eclipse.aether.internal.impl.synccontext.named.GAVNameMapper;
import org.eclipse.aether.internal.impl.synccontext.named.NameMapper;
+import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
import
org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter;
import org.eclipse.aether.named.NamedLockFactory;
import org.eclipse.aether.named.support.LockUpgradeNotSupportedException;
@@ -59,7 +58,7 @@ public abstract class NamedLockFactoryAdapterTestSupport {
/**
* Subclass MAY populate this field but subclass must take care of proper
cleanup as well, if needed!
*/
- protected static NameMapper nameMapper = new
DiscriminatingNameMapper(GAVNameMapper.gav());
+ protected static NameMapper nameMapper =
NameMappers.discriminatingNameMapper();
/**
* Subclass MUST populate this field but subclass must take care of proper
cleanup as well, if needed! Once set,
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/BasedirNameMapperTest.java
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/BasedirNameMapperTest.java
index 0054b0285..ce5bc759d 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/BasedirNameMapperTest.java
+++
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/BasedirNameMapperTest.java
@@ -38,7 +38,7 @@ import static org.hamcrest.Matchers.hasSize;
public class BasedirNameMapperTest extends NameMapperTestSupport {
private static final String PS = File.separator;
- BasedirNameMapper mapper = new BasedirNameMapper(new
HashingNameMapper(GAVNameMapper.gav()));
+ NameMapper mapper = NameMappers.fileHashingGavNameMapper();
@Test
public void nullsAndEmptyInputs() {
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapperTest.java
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapperTest.java
index 0adc3b0ad..40f5c4fc4 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapperTest.java
+++
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/GAVNameMapperTest.java
@@ -34,7 +34,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
public class GAVNameMapperTest extends NameMapperTestSupport {
- NameMapper mapper = GAVNameMapper.fileGav();
+ NameMapper mapper = NameMappers.gavNameMapper(true);
@Test
public void nullsAndEmptyInputs() {
diff --git
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/HashingNameMapperTest.java
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/HashingNameMapperTest.java
index 458380ed5..03fb25f1a 100644
---
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/HashingNameMapperTest.java
+++
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/synccontext/named/HashingNameMapperTest.java
@@ -34,7 +34,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
public class HashingNameMapperTest extends NameMapperTestSupport {
- HashingNameMapper mapper = new HashingNameMapper(GAVNameMapper.gav());
+ HashingNameMapper mapper = new
HashingNameMapper(NameMappers.gavNameMapper(false));
@Test
public void nullsAndEmptyInputs() {
diff --git
a/maven-resolver-named-locks-hazelcast/src/test/java/org/eclipse/aether/named/hazelcast/NamedLockFactoryAdapterTestSupport.java
b/maven-resolver-named-locks-hazelcast/src/test/java/org/eclipse/aether/named/hazelcast/NamedLockFactoryAdapterTestSupport.java
index bc3310035..f74b98991 100644
---
a/maven-resolver-named-locks-hazelcast/src/test/java/org/eclipse/aether/named/hazelcast/NamedLockFactoryAdapterTestSupport.java
+++
b/maven-resolver-named-locks-hazelcast/src/test/java/org/eclipse/aether/named/hazelcast/NamedLockFactoryAdapterTestSupport.java
@@ -29,8 +29,7 @@ import java.util.concurrent.TimeUnit;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.SyncContext;
import org.eclipse.aether.artifact.DefaultArtifact;
-import
org.eclipse.aether.internal.impl.synccontext.named.DiscriminatingNameMapper;
-import org.eclipse.aether.internal.impl.synccontext.named.GAVNameMapper;
+import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
import
org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter;
import org.eclipse.aether.named.NamedLockFactory;
import org.eclipse.aether.named.support.LockUpgradeNotSupportedException;
@@ -63,7 +62,7 @@ public abstract class NamedLockFactoryAdapterTestSupport {
private RepositorySystemSession session;
protected static void setNamedLockFactory(final NamedLockFactory
namedLockFactory) {
- adapter = new NamedLockFactoryAdapter(new
DiscriminatingNameMapper(GAVNameMapper.gav()), namedLockFactory);
+ adapter = new
NamedLockFactoryAdapter(NameMappers.discriminatingNameMapper(),
namedLockFactory);
}
@AfterClass
diff --git
a/maven-resolver-supplier/src/main/java/org/eclipse/aether/supplier/RepositorySystemSupplier.java
b/maven-resolver-supplier/src/main/java/org/eclipse/aether/supplier/RepositorySystemSupplier.java
index 9e2f299a9..625740c63 100644
---
a/maven-resolver-supplier/src/main/java/org/eclipse/aether/supplier/RepositorySystemSupplier.java
+++
b/maven-resolver-supplier/src/main/java/org/eclipse/aether/supplier/RepositorySystemSupplier.java
@@ -186,9 +186,12 @@ public class RepositorySystemSupplier implements
Supplier<RepositorySystem> {
HashMap<String, NameMapper> result = new HashMap<>();
result.put(NameMappers.STATIC_NAME, NameMappers.staticNameMapper());
result.put(NameMappers.GAV_NAME, NameMappers.gavNameMapper());
+ result.put(NameMappers.GAECV_NAME, NameMappers.gaecvNameMapper());
result.put(NameMappers.DISCRIMINATING_NAME,
NameMappers.discriminatingNameMapper());
result.put(NameMappers.FILE_GAV_NAME, NameMappers.fileGavNameMapper());
+ result.put(NameMappers.FILE_GAECV_NAME,
NameMappers.fileGaecvNameMapper());
result.put(NameMappers.FILE_HGAV_NAME,
NameMappers.fileHashingGavNameMapper());
+ result.put(NameMappers.FILE_HGAECV_NAME,
NameMappers.fileHashingGaecvNameMapper());
return result;
}
diff --git a/src/site/markdown/configuration.md
b/src/site/markdown/configuration.md
index 6669adba3..f1c691574 100644
--- a/src/site/markdown/configuration.md
+++ b/src/site/markdown/configuration.md
@@ -100,7 +100,7 @@ under the License.
| `aether.syncContext.named.basedir.locksDir`
| String | The basedir path for file named locks. If relative,
resolved against local repository root, if absolute, used as is.
[...]
| `aether.syncContext.named.factory`
| String | Name of the named lock factory implementing the
`org.eclipse.aether.named.NamedLockFactory` interface.
[...]
| `aether.syncContext.named.hashing.depth`
| int | The directory depth to "spread" hashes in git-like
fashion, integer between 0 and 4 (inclusive).
[...]
-| `aether.syncContext.named.nameMapper`
| String | Name of name mapper implementing the
`org.eclipse.aether.internal.impl.synccontext.named.NameMapper` interface.
[...]
+| `aether.syncContext.named.nameMapper`
| String | Name of name mapper implementing the
`org.eclipse.aether.internal.impl.synccontext.named.NameMapper` interface.
[...]
| `aether.syncContext.named.retry`
| int | Count of retries SyncContext adapter should perform,
when obtaining locks.
[...]
| `aether.syncContext.named.retry.wait`
| long | Amount of milliseconds a thread to wait between
retries, when obtaining locks.
[...]
| `aether.syncContext.named.time`
| long | Amount of time a synchronization context shall wait
to obtain a lock.
[...]