Package org.eclipse.aether.internal.impl
Class EnhancedLocalRepositoryManagerFactory
- java.lang.Object
-
- org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory
-
- All Implemented Interfaces:
org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory
@Singleton @Named("enhanced") public class EnhancedLocalRepositoryManagerFactory extends java.lang.Object implements org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactoryCreates enhanced local repository managers for repository types"default"or"" (automatic). Enhanced local repository manager is built upon the classical Maven 2.0 local repository structure but additionally keeps track of from what repositories a cached artifact was resolved. Resolution of locally cached artifacts will be rejected in case the current resolution request does not match the known source repositories of an artifact, thereby emulating physically separated artifact caches per remote repository.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringCONFIG_PROP_LEGACY_LOCAL_REPOSITORYMarks whether the local repository is meant to be shared (or was shared) with legacy Maven 3.9 or older versions.static java.lang.StringCONFIG_PROP_TRACKING_FILENAMEFilename of the file in which to track the remote repositories.static java.lang.StringCONFIG_PROP_VERIFY_REAL_PATHWhether to verify that the real (on-disk) path of a locally cached artifact matches the requested path spelling before the artifact is used.static booleanDEFAULT_LEGACY_LOCAL_REPOSITORYstatic java.lang.StringDEFAULT_TRACKING_FILENAMEstatic booleanDEFAULT_VERIFY_REAL_PATHstatic java.lang.StringNAME
-
Constructor Summary
Constructors Constructor Description EnhancedLocalRepositoryManagerFactory(LocalPathComposer localPathComposer, TrackingFileManager trackingFileManager, LocalPathPrefixComposerFactory localPathPrefixComposerFactory, org.eclipse.aether.spi.remoterepo.RepositoryKeyFunctionFactory repositoryKeyFunctionFactory)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description floatgetPriority()org.eclipse.aether.repository.LocalRepositoryManagernewInstance(org.eclipse.aether.RepositorySystemSession session, org.eclipse.aether.repository.LocalRepository repository)EnhancedLocalRepositoryManagerFactorysetPriority(float priority)Sets the priority of this component.
-
-
-
Field Detail
-
NAME
public static final java.lang.String NAME
- See Also:
- Constant Field Values
-
CONFIG_PROP_TRACKING_FILENAME
public static final java.lang.String CONFIG_PROP_TRACKING_FILENAME
Filename of the file in which to track the remote repositories.- See Also:
- Constant Field Values
-
DEFAULT_TRACKING_FILENAME
public static final java.lang.String DEFAULT_TRACKING_FILENAME
- See Also:
- Constant Field Values
-
CONFIG_PROP_VERIFY_REAL_PATH
public static final java.lang.String CONFIG_PROP_VERIFY_REAL_PATH
Whether to verify that the real (on-disk) path of a locally cached artifact matches the requested path spelling before the artifact is used. On case-insensitive or case/normalization-preserving filesystems (the macOS and Windows defaults) a file cached for one set of coordinates also answers lookups for coordinates that differ only in case or Unicode normalization, while the repository tracking data is compared exactly: such an aliased file is treated as present-but-untracked and accepted with no download and no checksum verification, letting case-colliding coordinates poison distinct GAVs. When enabled (the default), an artifact whose on-disk path spelling differs from the requested one is treated as not present, forcing a proper download. Disable only if the local repository intentionally contains symbolic links below its base directory (a symlinked base directory itself is supported either way).- Since:
- 2.0.23
- See Also:
- Constant Field Values
-
DEFAULT_VERIFY_REAL_PATH
public static final boolean DEFAULT_VERIFY_REAL_PATH
- See Also:
- Constant Field Values
-
CONFIG_PROP_LEGACY_LOCAL_REPOSITORY
public static final java.lang.String CONFIG_PROP_LEGACY_LOCAL_REPOSITORY
Marks whether the local repository is meant to be shared (or was shared) with legacy Maven 3.9 or older versions. Maven 3.9 and older versions suffer from "impostor" problem, where artifact and metadata origin was tracked only by the remote repository ID, where two remote repositories may share same ID but different URLs, in fact they may be completely unrelated to each other (ID clash by mistake), or, it may be due some sort of "impostor" attempt, where a malicious repository may pretend like some other repository. Right now, we intentionally default totrueto ease users transitioning, and Resolver 2 will retain this "old" behavior (will observe legacy tracking entries and will store remote metadata as before). But, at some point in the future, the default value will be changed tofalse(and same change is warmly recommended for modern Maven users, who do not intend to share local repository with older Maven versions). When this configuration set tofalse, the "repository key" is not ID only anymore, but is changed to$id-sha1($url)form, and this key is used in "origin tracking" entries and in caching remote Maven Repository Metadata XML files as well, guaranteeing they are not mixed in case of same IDs.- Since:
- 2.0.23
- See Also:
ConfigurationProperties.REPOSITORY_SYSTEM_REPOSITORY_KEY_FUNCTION,ConfigurationProperties.REPOSITORY_TRACKING_REPOSITORY_KEY_FUNCTION, Constant Field Values
-
DEFAULT_LEGACY_LOCAL_REPOSITORY
public static final boolean DEFAULT_LEGACY_LOCAL_REPOSITORY
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
EnhancedLocalRepositoryManagerFactory
@Inject public EnhancedLocalRepositoryManagerFactory(LocalPathComposer localPathComposer, TrackingFileManager trackingFileManager, LocalPathPrefixComposerFactory localPathPrefixComposerFactory, org.eclipse.aether.spi.remoterepo.RepositoryKeyFunctionFactory repositoryKeyFunctionFactory)
-
-
Method Detail
-
newInstance
public org.eclipse.aether.repository.LocalRepositoryManager newInstance(org.eclipse.aether.RepositorySystemSession session, org.eclipse.aether.repository.LocalRepository repository) throws org.eclipse.aether.repository.NoLocalRepositoryManagerException
- Specified by:
newInstancein interfaceorg.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory- Throws:
org.eclipse.aether.repository.NoLocalRepositoryManagerException
-
getPriority
public float getPriority()
- Specified by:
getPriorityin interfaceorg.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory
-
setPriority
public EnhancedLocalRepositoryManagerFactory setPriority(float priority)
Sets the priority of this component.- Parameters:
priority- The priority.- Returns:
- This component for chaining, never
null.
-
-