我正在尝试使用(部分成功) 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文件,以便获得最新版本?或者,如果有任何其他可靠的方法可以实现这一点..
感谢您的时间。
答案 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();
}
}
}