使用Maven時,我偶爾會碰到一些我尚未建構或未包含在我的存儲庫中的第三方存儲庫中的工件。
我将從Maven用戶端收到一條錯誤消息,提示找不到工件:
未能在 http://myrepo:80/artifactory/repo
中找到org.jfrog.maven.annomojo:maven-plugin-anno:jar:1.4.0緩存在本地存儲庫中,直到更新間隔才會重新嘗試解析已用完MyRepo或強制進行了更新-> [幫助1]
現在, 我了解了這意味着什麼, 并且可以簡單地使用
-U
重新運作我的指令,并且
-U
一切正常 。
但是,我發現此錯誤消息非常不直覺,并且正試圖讓我的同僚感到頭疼。
我試圖弄清楚是否可以修改此
update interval
設定。
- 此錯誤消息中提到的
是用戶端設定還是伺服器端設定?update interval
- 如果是用戶端,如何配置?
- 如果是伺服器端,是否有人知道Nexus / Artifactory如何/是否公開這些設定?
#1樓
有點關系..我越來越
“ [錯誤]無法在項目testproject上執行目标:無法解析項目myjarname:jar:1.0-0的依賴項:無法在 http://repo1.maven.org/maven2
找到myjarname-core:bundle:1.0-0已被緩存在本地存儲庫中,直到中心的更新間隔過去或強制進行更新-> [幫助1]”,解決方案才會重新嘗試
此錯誤是由于意外使用
Maven 3
而不是
Maven 2
。 隻是想知道這可能會節省一些時間,因為我最初的Google搜尋将我帶到了此頁面。
#2樓
您可以在本地存儲庫中删除相應的失敗工件目錄。 而且,您也可以簡單地在目标中使用
-U
。 它将完成工作。 這适用于Maven3。是以無需降級到Maven 2。
#3樓
如果使用的是Eclipse,請轉至Windows->首選項-> Maven,然後取消選中“不自動從遠端存儲庫更新依賴項”複選框。
這也适用于Maven 3。
#4樓
我是怎麼得到這個問題的
當我從Eclipse Juno更改為Luna并從SVN回購中檢出我的Maven項目時,在建構應用程式時遇到了相同的問題。
我嘗試了什麼? 我嘗試了幹淨的本地存儲庫,然後使用-U選項再次更新了所有版本。 但是我的問題仍然存在。
然後我轉到視窗->首選項-> Maven->使用者設定->并單擊本地存儲庫下的重新索引按鈕,然後等待重新索引發生。
就這樣,問題就解決了。
#5樓
您需要從存儲庫中删除所有“ _maven.repositories”檔案。
#6樓
該錯誤有時可能會引起誤解。 您可能要檢查的2件事:
- 回購中是否存在實際的依賴關系JAR? 您的錯誤消息包含要搜尋的URL,是以請轉到此處,然後浏覽至與您的依賴項比對的檔案夾。 有罐子嗎? 如果不是,則需要更改依賴性。 (例如,當您應該指向子項目時,您可能指向頂級父級依賴項)
- 如果罐子存在于遠端倉庫中,則隻需删除本地副本即可。 它将位于.m2 / repository下的主目錄(除非您進行了其他配置)(在Linux上,ls -a顯示為隐藏)。
#7樓
如果您将Nexus用作代理存儲庫,則其具有“未找到的緩存TTL”設定,預設值為1440分鐘(或24小時)。 降低此值可能會有所幫助(存儲庫>配置>到期設定)。
請參閱文檔以擷取更多資訊。
#8樓
Maven具有updatePolicy設定,用于指定檢查存儲庫中更新或使存儲庫與遠端同步的頻率。
- updatePolicy的預設值為每日。
- 其他值可以始終為/從不/ XX(以分鐘為機關指定間隔)。
可以将以下代碼示例添加到Maven使用者設定檔案中,以配置updatePolicy。
<pluginRepositories>
<pluginRepository>
<id>Releases</id>
<url>http://<host>:<port>/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
#9樓
根據設定參考 :
updatePolicy:此元素指定應該嘗試執行更新的頻率。 Maven會将本地POM的時間戳(存儲在存儲庫的maven-metadata檔案中)與遠端進行比較。 選項包括:始終,每天(預設),間隔:X(其中X是分鐘數的整數)或從不。
例:
<profiles>
<profile>
...
<repositories>
<repository>
<id>myRepo</id>
<name>My Repository</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
</repository>
</repositories>
...
</profile>
</profiles>
...
</settings>
#10樓
基本上發生的是,根據maven的預設updatePolicy。Maven每天都會從回購中擷取jar。是以,如果在第一次嘗試期間您的網際網路無法正常工作,那麼它将花費24小時才嘗試再次擷取此jar。
解析度 :
無論使用
mvn -U clean install
-U将強制更新存儲庫
或使用
<profiles>
<profile>
...
<repositories>
<repository>
<id>myRepo</id>
<name>My Repository</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
</repository>
</repositories>
...
</profile>
</profiles>
在您的settings.xml中
#11樓
雖然您可以使用全新安裝(覆寫所有緩存的依賴項)來解決此問題,如@ Sanjeev-Gulgani建議使用
mvn -U clean install
全新
mvn -U clean install
您也可以簡單地删除導緻問題的緩存依賴項
mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId"
有關更多資訊,請參見mvn文檔 。
#12樓
最後回答标題問題:它是(項目,配置檔案或設定)中的(用戶端設定)
[plugin]?[r|R]epository/[releases|snapshots]/updatePolicy
... 标簽。
(目前,maven:3.6.0,但我認為“向後相容”)可能的值是:
該标簽的目前(Maven 3.6.0)評估實作如下:
..with:
...其中
lastModified
是一個/每個基礎工件的(本地檔案)“修改的時間戳”。
特别是對于
interval:x
設定:
- 冒号
是不是嚴格的-任何“非空”字可以做到這一點(:
, ,...)。=
-
負值應屈服于“從不”。x < 0
-
我假設是“分鐘”(0-59秒或以上)間隔。interval:0
- 數字格式異常會導緻
分鐘(〜“每日”)。24 * 60
..請參閱: DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver#resolveMetadata()和RepositoryPolicy
#13樓
從本地Maven存儲庫中删除相關的依賴項後,此方法有效
/user/.m2/repository/path
#14樓
就我而言,解決方案是愚蠢的:我隻是有不正确的依賴版本。
#15樓
對于Intellij使用者,以下對我有用 :
右鍵點選您的包裹
Maven > Reimport
和
Maven > Generate Sources and Update Folders
#16樓
我有這個問題,所提出的全面描述這幫助我解決這個問題。
第二個宣布的問題是我的問題。 我使用了一個第三方存儲庫,我剛剛将其添加到了項目中pom檔案的
repository
部分。 我将相同的存儲庫資訊添加到
pluginrepository
以解決此問題。
#17樓
我有一個相關的問題,但Raghuram的回答有所幫助。 (我還沒有足夠的聲譽來投票贊成他的答案)。 我使用的是與NetBeans捆綁在一起的Maven,并且得到了相同的“ ...已緩存在本地存儲庫中,直到關系的更新間隔過去或強制執行更新-> [[幫助1]”時,才會重新嘗試解決問題。
為了解決這個問題,我向自己的設定檔案(C:\\ Program Files \\ NetBeans 7.0 \\ java \\ maven \\ conf \\ settings.xml)添加了
<updatePolicy>always</updatePolicy>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
<snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
<snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
#18樓
我以前通過删除本地存儲庫中相應的無法下載下傳工件目錄來解決此問題。 下次我運作maven指令時,再次觸發工件下載下傳。 是以,我想說這是一個用戶端設定。
連結端(伺服器回購端),這個問題已解決,可設定排程工作。 用戶端,正如您已經指出的那樣,這是使用
-U
完成的。