2012-06-04 62 views
0

我試圖使用(部分成功)版本-maven-plugin從我的本地 nexus存儲庫檢索最新版本/快照版本以更新maven項目。當運行這個插件來更新版本,我已經注意到了以下行爲:版本 - maven-plugin不檢索nexus上的最新版本?

儘管我知道在nexus中有一個更新的版本,但沒有在我的本地存儲庫中,但它沒有找到最新版本,但是最新的當地回購。如果我從我的本地倉庫中刪除所有Maven-metadata * .xml文件,以查找要更新的工件,它會下載最新的Maven-metadata * .xml文件並正確查找最新版本。

我看到它使用2.0.6 OG所有行家API和驅動整個更新機制的方法是retrieveAvailableVersions()從接口ArtifactMetadataSource和實施的MavenMetadataSource

我的問題 我怎樣才能改變這個插件的代碼,隨時下載最新的Maven的元數據* .xml文件,以便獲得最新的版本?或者如果有其他可靠的方法,可以使這種情況發生..

感謝您的時間。

回答

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(); 
     } 
    } 
}