versions-maven-plugin无法在nexus上检索最新版本?

时间:2012-06-04 15:55:23

标签: versioning maven-plugin pom.xml versions-maven-plugin

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

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

我看到它正在使用 2.0.6 og所有maven API,并且驱动整个更新机制的方法是来自 ArtifactMetadataSource <的 retrieveAvailableVersions() / strong>并由 MavenMetadataSource 实施。

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

感谢您的时间。

1 个答案:

答案 0 :(得分: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();
        }
    }
}