簡體   English   中英

Maven依賴沒有得到相應的POM文件下載

[英]Maven dependency not getting corresponding POM file downloaded

我有一個maven項目,它具有從遠程Nexus存儲庫獲取的依賴項。 我相信依賴關系不是用maven構建的,只是上傳了一個准系統POM文件。 服務器上的布局看起來很好,所以它可能與maven一起部署。

當maven將依賴項下載到我的本地存儲庫時,它會下載jar文件,但不會獲得POM。 在構建時,會發出警告,指出無法找到POM,並且沒有可用的依賴項信息。 我實際上並沒有直接使用它的任何代碼(它實際上是一個傳遞依賴),因此構建成功完成。

當我嘗試為我的項目執行站點生成時,會出現真正的問題。 嘗試生成依賴關系圖報告的部分失敗,因為它無法找到要使用此依賴關系的POM。

我無法弄清楚為什么我沒有下載POM,當它的jar文件下載得很好。

該特定依賴項的POM文件看起來像這樣(你可以看到為什么我不認為它是用maven構建的:))

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.component</groupId>
    <artifactId>my-artifact</artifactId>
    <version>1.0.1</version>
</project>

您會注意到根<project>元素不包含任何命名空間或架構信息。 這有關系嗎? 難道Nexus不承認它是POM嗎? 除了一些小的句法字符丟失或錯誤的可能性,這是我目前的思路......請不要讓它影響你可能有的任何想法! :)

此外,在進行故障排除時,我已將遠程POM文件的內容粘貼到我本地.m2 repo中的正確文件位置。 當我這樣做時,一切都很好。 但這不是一個可接受的修復,因為我們需要在我們的CI構建服務器上完成構建。

任何幫助/建議非常感謝!

編輯:

我設法暫時解決了我的實際問題,但這里的陌生感仍然存在。 我通過從我的pom中的依賴項顯式排除依賴於此的東西解決了這個問題(故障dep至少是兩步之遙,我沒有使用任何使用拉動它的東西):

<dependency>
    <groupId>com.company.utility</groupId>
    <artifactId>shared-utility</artifactId>
    <version>1.2.3</version>

    <exclusions>
        <exclusion>
            <groupId>com.company.common.component</groupId>
            <artifactId>thing-that-puls-in-bad-artifact</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我用以下POM創建了一個虛擬項目來證明它:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.project</groupId>
    <artifactId>my-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>com.company.component</groupId>
            <artifactId>bad-artifact</artifactId>
            <version>1.0.1</version>
        </dependency>
    </dependencies>
</project>

現在在~/.m2/repository/com/company/compnent/bad-artifact/1.0.1/ ,我得到了:

_remote.repositories
bad-artifact-1.0.1.jar
bad-artifact-1.0.1.jar.sha1
bad-artifact-1.0.1.pom.lastUpdated

沒有實際的POM文件。

如果您查看_remote.repositories ,那么此文件可能包含“上次下載POM失敗,請勿再次嘗試”的信息。

這是Maven的政策“不再嘗試下載版本”的事情之一。 嘗試刪除文件夾~/.m2/repository/com/company/compnent/bad-artifact/1.0.1/並再次運行Maven以查看錯誤。

Maven很可能拒絕使用這樣一個破碎的POM,因為根元素沒有正確的XML命名空間。 但是如果沒有看到實際的錯誤信息,很難說清楚。

解決此問題的方法是下載JAR並從命令行使用mvn install:install-file在本地安裝依賴項。 更好的是,您可以使用mvn deploy:deploy-file將其部署到您自己的Nexus服務器上,這樣所有其他開發人員現在都可以獲得POM的“好”版本。

您還應該與運行遠程Nexus服務器的人員聯系,以便他們可以解決問題。

與您的實際問題無關,但是使用maven(至少是最新版本),生成的jar在該jar的META-INF/maven文件夾中包含它們的pom.xml

您應該嘗試使用-e -X運行maven,並移動本地存儲庫以強制Maven 再次下載all。

mv "~/.m2/repository" "~/.m2/repository.old"
mvn -X -e dependency:tree

[編輯]它最初是一個評論,但它會太長:

據我了解你的問題,我認為這是Nexus的錯誤,而不是你的機器上。 任何有效的解決方案都需要你弄亂你的公司Nexus。 如果您無權對公司Nexus執行任何操作,則可以使用本地Nexus進行測試。

您還可以在~/.m2/settings.xml強制使用該Nexus,如下所示:

<mirrors>
    <mirror>
      <id>nexus-local-central</id>
      <mirrorOf>central</mirrorOf>
      <url>http://localhost:8081/nexus/content/repositories/central</url>
    </mirror>
    <mirror>
      <id>nexus-local-any</id>
      <mirrorOf>external:*</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public</url>
    </mirror>
</mirrors>

你不應該失去太多時間來解決它失敗的原因,而應該專注於讓它發揮作用。

為此,我認為你應該為該工件編寫一個有效的pom.xml,並使用pomFile選項在服務器上重新部署它:

mvn deploy:deploy-file -DpomFile=valid-pom.xml -Dfile=foobar.jar -Durl=http://nexus:8081 -DrepositoryId=company-nexus-deploy

或者,如果您太懶(或者如果此命令失敗),請從Nexus GUI執行此操作!

PS:Nexus的默認管理員登錄名/密碼是admin/admin123 ,我認為還有deploy/deploy123用於部署。 我見過的大多數Nexus都沒有配置為使用其他登錄名/密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM