Class 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.LocalRepositoryManagerFactory
    Creates 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 Detail

      • 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
      • 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 to true to 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 to false (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 to false, 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
    • 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:
        newInstance in interface org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory
        Throws:
        org.eclipse.aether.repository.NoLocalRepositoryManagerException
      • getPriority

        public float getPriority()
        Specified by:
        getPriority in interface org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory