private void selectVersion()

in impl/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java [175:271]


    private void selectVersion(DefaultPluginVersionResult result, PluginVersionRequest request, Versions versions)
            throws PluginVersionResolutionException {
        String version = null;
        ArtifactRepository repo = null;
        boolean resolvedPluginVersions = !versions.versions.isEmpty();
        boolean searchPerformed = false;

        if (versions.releaseVersion != null && !versions.releaseVersion.isEmpty()) {
            version = versions.releaseVersion;
            repo = versions.releaseRepository;
        } else if (versions.latestVersion != null && !versions.latestVersion.isEmpty()) {
            version = versions.latestVersion;
            repo = versions.latestRepository;
        }
        if (version != null && !isCompatible(request, version)) {
            logger.info(
                    "Latest version of plugin {}:{} failed compatibility check",
                    request.getGroupId(),
                    request.getArtifactId());
            versions.versions.remove(version);
            version = null;
            searchPerformed = true;
        }

        if (version == null) {
            TreeSet<Version> releases = new TreeSet<>(Collections.reverseOrder());
            TreeSet<Version> snapshots = new TreeSet<>(Collections.reverseOrder());

            for (String ver : versions.versions.keySet()) {
                try {
                    Version v = versionScheme.parseVersion(ver);

                    if (ver.endsWith("-SNAPSHOT")) {
                        snapshots.add(v);
                    } else {
                        releases.add(v);
                    }
                } catch (InvalidVersionSpecificationException e) {
                    // ignore
                }
            }

            if (!releases.isEmpty()) {
                logger.info(
                        "Looking for compatible RELEASE version of plugin {}:{}",
                        request.getGroupId(),
                        request.getArtifactId());
                for (Version v : releases) {
                    String ver = v.toString();
                    if (isCompatible(request, ver)) {
                        version = ver;
                        repo = versions.versions.get(version);
                        break;
                    }
                }
            }

            if (version == null && !snapshots.isEmpty()) {
                logger.info(
                        "Looking for compatible SNAPSHOT version of plugin {}:{}",
                        request.getGroupId(),
                        request.getArtifactId());
                for (Version v : snapshots) {
                    String ver = v.toString();
                    if (isCompatible(request, ver)) {
                        version = ver;
                        repo = versions.versions.get(version);
                        break;
                    }
                }
            }
        }

        if (version != null) {
            // if LATEST worked out of the box, remain silent as today, otherwise inform user about search result
            if (searchPerformed) {
                logger.info("Selected plugin {}:{}:{}", request.getGroupId(), request.getArtifactId(), version);
            }
            result.setVersion(version);
            result.setRepository(repo);
        } else {
            logger.warn(
                    resolvedPluginVersions
                            ? "Could not find compatible version of plugin {}:{} in any plugin repository"
                            : "Plugin {}:{} not found in any plugin repository",
                    request.getGroupId(),
                    request.getArtifactId());
            throw new PluginVersionResolutionException(
                    request.getGroupId(),
                    request.getArtifactId(),
                    request.getRepositorySession().getLocalRepository(),
                    request.getRepositories(),
                    resolvedPluginVersions
                            ? "Could not find compatible plugin version in any plugin repository"
                            : "Plugin not found in any plugin repository");
        }
    }