java - 使用 aether-api 列出 sonatype Nexus 的可用版本

标签 java deployment aether

我的目标是开发一个用于工件部署的内部工具。这些工件位于本地存储库管理系统(sonatype nexus)中。经过研究,我尝试使用 Aether-Api 来实现该任务。但我未能重新编程其中一个 examples在我自己的。我无法评估错误。

public class SourceMaven 
{
    private static RepositorySystem newRepositorySystem()
    {
        DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
        locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
        locator.addService(TransporterFactory.class, FileTransporterFactory.class);
        locator.addService(TransporterFactory.class, HttpTransporterFactory.class);

        return locator.getService(RepositorySystem.class);        
    }
    private static RepositorySystemSession newSession(RepositorySystem system)
    {
        DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
        LocalRepository localRepo = new LocalRepository("/usr/local/home/myusername/tmp/aether");
        session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));

        return session;        
    }
    private static List<RemoteRepository> newRepositories( RepositorySystem system, RepositorySystemSession session)
    {
        return new ArrayList<RemoteRepository>(Arrays.asList(newCentralRepository()));
    }
    private static RemoteRepository newCentralRepository()
    {
        return new RemoteRepository.Builder("sonanexus", "default", "http://ournexusservername:8081/nexus/#nexus").build();
    }


    public List<String> getReleaseList(String url) 
    {
        RepositorySystem system = newRepositorySystem();
        RepositorySystemSession session = newSession(system);

        Artifact artifact = new DefaultArtifact("org.eclipse.aether:aether-util:[0,)");

        VersionRangeRequest rangeRequest = new VersionRangeRequest();
        rangeRequest.setArtifact(artifact);
        rangeRequest.setRepositories(newRepositories(system, session));

        try 
        {
            VersionRangeResult rangeResult = system.resolveVersionRange(session, rangeRequest);
            List<Version> versions = rangeResult.getVersions();

            System.out.println("available versions " + versions);
        } 
            catch (VersionRangeResolutionException ex) 
        {
            System.out.println("failed ...");
        }

        return null;
    }
}

作为输出,我只得到一个空列表,没有错误。

available versions []

所请求的工件坐标已链接到我们的连接中,并且可以在网络界面中找到。

最佳答案

上面的代码正在运行。

重要的是要更具体地阐明网址,而不是

http://hostname:8081/nexus/#nexus

我需要将其更改为:

http://hostname:8081/nexus/content/groups/public

关于java - 使用 aether-api 列出 sonatype Nexus 的可用版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38076815/

相关文章:

java - 唯一编号生成算法

java - 使用 solrj 检索 json 格式的 SolrDocument

java - 运行 Maven 构建 jar 文件时无法找到记录器类

java - 根据 Selenium 中的字符串选择复选框

eclipse - Microsoft Azure 部署错误 40%

ubuntu - 用另一个目录的构建替换 docker 镜像

angular - 如何将 Angular 2 应用程序部署为独立应用程序(使用 dist 文件夹)

java - 使用Maven3.1,不注入(inject)RepositorySystemSession和RepositorySystem,保持null

java - 以编程方式解决插件外部的 Maven 依赖关系 - 获取 RepositorySystemSession 和 RepositorySystem

maven - Aether,从本地 repo 获取 Artifact