簡體   English   中英

Maven 庫不會從 POM 內部的私有存儲庫中獲得依賴

[英]Maven library don’t get dependency from private repository inside POM

幾天來我一直在解決這個問題。

我的情況是這樣的:

  • 我有一個由我編寫的 sdk,它使用托管在私有 Maven 存儲庫上的兩個依賴項,只能通過登錄訪問

    • 托管在 S3 maven 上的repo-1
    • repo-2托管在 Nexus 上
  • 該 sdk 始終在項目中的我的 Android 應用程序中使用(但被視為子模塊)。

  • 在項目的 Gradle 中有 2 個 maven 存儲庫,可以從中查找上述 2 個私有依賴項。

maven {
    name “repo-1”
    url "s3://repo-1/maven"
    credentials(AwsCredentials) {
        accessKey awsUsername
        secretKey awsPassword
    }
}

maven {
    name “repo-2”
    url "http://repo-2/repository/maven-releases"
    credentials {
        username ‘repo-2-name’
        password ‘repo-2-password’
    }
}
  • 上面提到的 2 依賴項僅由 sdk 使用,應用程序完全不知道它

現在我想將這兩件事完全分開,並將 SDK 托管在我的私有 Maven 存儲庫中,以便從應用程序中隱藏與 SDK 相關的所有代碼和依賴項。

首先,我想在本地完成所有操作,這樣我可以更快地進行不同的測試。 因此,我在本地 Maven 中“上傳”了我的 SDK。

在我生成的 POM 中,我擁有對 SDK 的所有必要依賴項(包括私有存儲庫的 2 個依賴項),如下所示:

<packaging>aar</packaging>
    <dependencies>
            <dependency>
                 <artifactId>repo-1</artifactId>
                    <groupId>com.repo-1.android</groupId>
                    <version>0.0.1</version>
            </dependency>
        <dependency>
                <artifactId>repo-2</artifactId>
                <groupId>com.repo-2.android</groupId>
                <version>1.0.0</version>
        </dependency>

此外,我還添加了 2 個存儲庫,必須從中下載 2 個私有依賴項:

<repositories>
        <repository>
            <id>repo-1</id>
            <name>repository-1</name>
            <url>http://repo-1/repository/maven-releases</url>
        </repository>
        <repository>
            <id>repo-2</id>
            <name>repository-2</name>
            <url>s3://repo-1/maven</url>
        </repository>
</repositories>

然后,我在本地 maven (../.m2) 的根目錄中設置 settings.xml文件,並使用憑據來訪問 2 個存儲庫。

<settings 
    xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
        https://maven.apache.org/xsd/settings-1.0.0.xsd">
     <servers>
            <server>
                <id>repo-1</id>
                <username>awsPassword</username>
                <password>awsPassword</password>
            </server>
            <server>
                <id>repo-2</id>
                <username>repo-2-name</username>
                <password>repo-2-password</password>
            </server>
    </servers>
</settings>

然后我將我的 sdk 添加為應用程序中的依賴項,但不想從私有存儲庫下載 2 個依賴項。

但是,如果我在應用程序項目的 gradle 中添加兩個 maven 存儲庫(如第一個示例),則它可以工作,所以我很確定這是pomsetting.xml配置的問題。

非常感謝大家的任何答案

您面臨的是 Maven 和 Gradle 處理存儲庫的方式之間的差異。

簡而言之,Gradle 更嚴格,不會從未在構建腳本中聲明的存儲庫透明地下載依賴項。

有關為什么會出現這種情況的更多詳細信息,請查看Gradle 問題跟蹤器的討論

因此,正如您所發現的,解決方案是在使用構建腳本中聲明這些存儲庫。 如果您認為這太冗長,請考慮為您的 SDK 編寫一個最小的插件來添加依賴項和存儲庫。

然后它會變成:

plugins {
    id 'my-sdk-plugin'
}

暫無
暫無

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

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