首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven库不会从POM内部的私有存储库中获得依赖

Maven库不会从POM内部的私有存储库中获得依赖
EN

Stack Overflow用户
提问于 2019-04-05 14:08:25
回答 1查看 3.3K关注 0票数 2

我在这个问题上已经胡思乱想好几天了。

我的情况是:

  • 我编写了一个sdk,它使用托管在私有maven存储库上的两个依赖项,只能通过登录访问。
代码语言:javascript
复制
- **repo-1** hosted on S3 maven 
- **repo-2** hosted on Nexus

  • 这个sdk总是在我的Android应用程序中使用(但作为子模块处理)。
  • 在项目的Gradle中,有2个maven存储库,可以从中查找上面提到的2个私有依赖项。
代码语言:javascript
复制
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个依赖项),如下所示:

代码语言:javascript
复制
<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>

此外,我还添加了两个存储库,必须从其中下载两个私有依赖项:

代码语言:javascript
复制
<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个存储库的凭据。

代码语言:javascript
复制
<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个依赖项。

但是,如果我将两个maven存储库添加到应用程序项目的gradle中(如第一个示例),它就能工作,因此我非常确定这是pomsetting.xml配置的一个问题。

非常感谢大家的回答。

EN

回答 1

Stack Overflow用户

发布于 2019-04-08 11:57:20

您所面临的是Maven和Gradle句柄存储库之间的差异。

简而言之,Gradle更严格,不会透明地从未在构建脚本中声明的存储库中下载依赖项。

有关为什么会出现这种情况的更多详细信息,请查看分级问题跟踪器的探讨

因此,正如您所发现的,解决方案是在消耗的构建脚本中声明这些存储库。如果您认为这太冗长了,请考虑为SDK编写一个最小的插件,以添加依赖项和存储库。

然后,它将成为:

代码语言:javascript
复制
plugins {
    id 'my-sdk-plugin'
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55537250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档