0

私はversions-maven-pluginを使用して、ローカルおよびネクサスリポジトリから最新のリリース/スナップショットバージョンを取得し、 mavenプロジェクトを更新しようとしています。このプラグインを実行してバージョンを更新すると、次の動作に気づきました。

nexusに新しいバージョンがあることはわかっていますが、ローカルリポジトリにはありませんが、最新バージョンは見つかりませんが、ローカルリポジトリからの最新バージョンが見つかります。更新したいアーティファクトのローカルリポジトリからすべてのmaven-metadata*.xmlファイルを削除すると、最新のmaven-metadata * .xmlファイルがダウンロードされ、最新バージョンが正しく検出されます。

すべてのMavenAPIで2.0.6を使用しており、更新メカニズム全体を駆動するメソッドは、インターフェイスArtifactMetadataSourceからretrieveAvailableVersions()であり、 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 に答える