2011-10-10 66 views
14

所以我有一個項目依賴於另一個項目的快照版本。依賴關係是:有沒有辦法讓Maven自動下載快照?

<dependency> 
    <groupId>org.oop</groupId> 
    <artifactId>oop</artifactId> 
    <version>0.9.9-SNAPSHOT</version> 
</dependency> 

對於接力項目中,我沒有做一個「乾淨MVN部署」,從而使快照版本應該是某處在Maven中央存儲庫。但是,當我做了MVN乾淨的安裝,上面的快照依賴關係不能得到解決,我得到這個:

缺少:

1)org.oop:OOP中:jar:0.9.9-SNAPSHOT

嘗試從項目網站手動下載文件。

然後,使用以下命令安裝它: mvn install:install-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile =/path/to/file

另外,如果您自行庫可以部署在那裏的文件: MVN部署:部署文件-DgroupId = org.oop -DartifactId =接力-Dversion = 0.9.9-SNAPSHOT -Dpackaging =罐子-Dfile =/path/to/file -Durl = [url] -DrepositoryId = [id]

有沒有辦法讓maven自動下載快照?我必須在這裏失去一些東西。

EDIT1:在我的settings.xml我:

<server> 
     <id>sonatype-nexus-snapshots</id> 
     <username>XXXXXX</username> 
     <password>XXXXXX</password> 
    </server> 

    <server> 
     <id>sonatype-nexus-staging</id> 
     <username>XXXXXX</username> 
     <password>XXXXXX</password> 
    </server> 

EDIT2: enter image description here

回答

13

只需將其添加到〜/ .m2 /設置即可。xml:

<profiles> 
    <profile> 
    <id>allow-snapshots</id> 
     <activation><activeByDefault>true</activeByDefault></activation> 
    <repositories> 
     <repository> 
     <id>snapshots-repo</id> 
     <url>https://oss.sonatype.org/content/repositories/snapshots</url> 
     <releases><enabled>false</enabled></releases> 
     <snapshots><enabled>true</enabled></snapshots> 
     </repository> 
    </repositories> 
    </profile> 
</profiles> 
+2

這可以以某種方式添加到聲明依賴項而不是在settings.xml中的POM中? – Sergio

14

要更新快照,與-U選項嘗試

-U,--update-snapshots     Forces a check for updated 
             releases and snapshots on remote 
             repositories 

然而,你說:

我做了'mvn clean deploy',所以快照版本應該放在maven中央倉庫的某個地方。

這是不可能的,您的快照將在其他地方。如果我做了mvn clean deploy沒有配置我的個人資料庫,我得到:

部署失敗:在distributionManagement元素中或在-DaltDeploymentRepository = ID ::佈局:: URL參數的POM未指定庫元素

要啓用部署中,要添加一些配置到pom.xml的,例如像:

<distributionManagement> 

    <!-- Publish versioned releases here --> 
    <repository> 
     <id>myrepo</id> 
     <name>My releases</name> 
     <url>http://nexus.mycompany.com/nexus/content/repositories/releases</url> 
    </repository> 

    <!-- Publish snapshots here --> 
    <snapshotRepository> 
     <id>myrepo</id> 
     <name>my snapshots</name> 
     <url>http://nexus.mycompany.com/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 

</distributionManagement> 

<repositories> 
    <repository> 
     <id>myrepo</id> 
     <name>My Public Repository</name> 
     <url>http://nexus.mycompany.com/nexus/content/groups/public</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>true</enabled> 
     </snapshots> 
    </repository> 
</repositories> 
+0

感謝您的幫助,請參閱我在我的settings.xml中的最後一次編輯問題。另外,我正在嘗試引用的庫是。 GroupID:me.soliveirajr神器:menta-container。版本:0.9.9-SNAPSHOT。你可以在Maven倉庫中的任何地方找到它嗎?我可以在這裏看到它... – chrisapotek

+0

請參閱EDIT2以瞭解快照的位置。 – chrisapotek

+0

好吧,當你做mvn部署它發佈的罰款?沒有錯誤看到?如果嘗試使用mvn -e部署,並且如果需要的話甚至可以部署mvn -X – stivlo

0

您可以

  • 使用構建所有快照的父項目,或使用例如
  • 將快照部署到Maven構建服務器(nexus/archiva/..)。,mvn:deploy
1

這個依賴項是否存在於你的倉庫中? (在pom.xml或settings.xml中)?

看起來不像。順便說一句,看看你的配置,只是你沒有使用-o(離線)。您也可以使用-U刷新快照。

19

Maven會嘗試自動下載快照,確實如此(正如您的錯誤指出的那樣)。默認情況下,Maven會尋找新的快照版本,每天一次,但你可以改變時間間隔在快照庫配置(Settings.XML中如):

<updatePolicy>interval:5</updatePolicy> 

這將使每5分鐘行家檢查(如果你經常建立)。或者,您可以使用-U--update-snapshots選項手動強制執行檢查。

但是,它無法找到依賴關係。你可以發佈你的回購設置和工件配置的快照依賴?

org.oop:oop:jar:0.9.9-SNAPSHOT工件是否在您的存儲庫中?

...所以快照版本應該在maven中央倉庫中的某處。

不,它不是。我試圖查看它,但無法找到它。 Afaik,有一些分級機制,所以也許你的設置是錯誤的。但正如其他人已經說過的那樣,你會去使用像Artifactory或Nexus這樣的自己的存儲庫管理器。

+0

以下是我正在嘗試下載的庫:GroupID:me.soliveirajr工件:menta容器版本:0.9.9-SNAPSHOT。我可以在存儲庫中找到它。 – chrisapotek

+0

請參閱EDIT2瞭解我可以在哪裏看到快照。 – chrisapotek

+0

@chrisapotek不是'org.oop:oop:jar:0.9.9-SNAPSHOT'但是'me.soliveirajr:menta-container:jar:0.9.9-SNAPSHOT'那麼 - 你的依賴在這種情況下是錯誤的。 – Thomas

0

讓我們來澄清一下術語,以確保沒有誤解。

「Maven Central」(http://search.maven.org/)是一個全球性的網站,您只搜索了發行。中央不接受快照,因此在那裏部署會給你一個錯誤。

你可能是指你的本地/公司範圍的maven代理/緩存。這些也可以配置爲拒絕快照版本。對於Nexus,您還可以定義更復雜的規則。在我的情況下,我遇到了一個問題,在mvn deploy期間沒有發生錯誤,但是我可以在服務器的日誌中看到錯誤。

嘗試關注數據:啓用調試(mvn -X)以查看Maven上傳數據的位置。然後檢查服務器以查看是否真的上傳了這些工件。檢查服務器的日誌是否有錯誤。

另請注意,快照依賴關係每天只刷新一次;所以這是行不通的:

PC#1:mvn install - >錯誤丟失的依賴 PC#2:mvn deploy PC#1:mvn install - >相關性仍然是因爲缺少 「更新每天一次」 政策

嘗試mvn install -U強制Maven刷新其緩存的元數據。

+0

檢查您的本地回購('HOME/.m2/repository /'):文件夾層次結構是否存在?有沒有文件'* metadata * .xml'?它包含什麼?你在Nexus服務器上看到下載請求嗎? –

+0

我沒有使用我的nexus服務器。我正在使用sonatype快照存儲庫。檢查我的EDIT2。 – chrisapotek

+0

查找從Sonatype運行的Naxus實例獲取日誌的方法。還請閱讀我所有的問題;他們並不總是相互依賴。其中之一可能會引導你走上正軌。 –

0

即使在命令行上設置-U時,我遇到了不更新快照的問題。對我來說,問題是我的客戶端是Maven 3,服務器是Maven 2,而Maven 3中不再支持獨特的快照。我們必須創建一個具有時間戳快照的新存儲庫來支持3.xx客戶端。

相關問題