0

我正在尝试使用(部分成功)versions-maven-plugin从我的本地nexus 存储库中检索最新版本/快照版本以更新 maven 项目。运行此插件以更新版本时,我注意到以下行为:

即使我知道nexus 中有更新版本,但不在我的本地存储库中,它也找不到最新版本,而是从本地存储库中找到最新版本。如果我从本地 repo 中删除我想要更新的工件的所有 maven-metadata*.xml 文件,它会下载最新的 maven-metadata*.xml 文件并正确找到最新版本。

我看到它使用2.0.6 og 所有 maven API,驱动整个更新机制的方法是从接口ArtifactMetadataSource中检索AvailableVersions()并由MavenMetadataSource实现。

我的问题 如何更改此插件的代码以始终下载最新的 maven-metadata*.xml 文件,以便获得最新版本?或者如果有任何其他可靠的方法可以做到这一点..

谢谢你的时间。

4

1 回答 1

0

实际上,我自己找到了解决方案并创建了一个目标,在运行更新我的 pom.xml 文件的目标之前运行该目标:这是更新所有存储库的元数据的方法。如果您需要整个目标,请告诉我:

 public void updateMetadata(Artifact artifact){        
    getLog().info("Updating metadata for: " + artifact.getGroupId()+":"+artifact.getArtifactId());
    RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact);    
    for ( Iterator<ArtifactRepository> repo = remoteArtifactRepositories.iterator(); repo.hasNext(); ){
        ArtifactRepository repository = repo.next();            
        ArtifactRepositoryPolicy policy = 
                metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
        File file = new File( localRepository.getBasedir(), 
                localRepository.pathOfLocalRepositoryMetadata( metadata, repository ) );
        getLog().info("Updating " + repository.getBasedir());            
        try {
            wagonManager.getArtifactMetadata( metadata, repository, file, policy.getChecksumPolicy());
            getLog().info("Updated...");
        } catch (TransferFailedException e) {
            getLog().info("Couldn't find " +  metadata + " from repository: " + repository.getId() +
                    "\n Reason\n: " + e.getMessage() );
            e.printStackTrace();
        } catch (ResourceDoesNotExistException e) {
            getLog().info("Cannot find " +  metadata + " in repository: " + repository.getId() );
            if ( file.exists() ){
                file.delete();
            }
            e.printStackTrace();
        }
    }
}    
于 2012-06-05T16:18:37.843 回答