![](/img/trans.png)
[英]Android library maven dependency from gitlab local server's private repository
[英]Maven library don’t get dependency from private repository inside POM
几天来我一直在解决这个问题。
我的情况是这样的:
我有一个由我编写的 sdk,它使用托管在私有 Maven 存储库上的两个依赖项,只能通过登录访问
该 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’
}
}
现在我想将这两件事完全分开,并将 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 存储库(如第一个示例),则它可以工作,所以我很确定这是pom和setting.xml配置的问题。
非常感谢大家的任何答案
您面临的是 Maven 和 Gradle 处理存储库的方式之间的差异。
简而言之,Gradle 更严格,不会从未在构建脚本中声明的存储库透明地下载依赖项。
有关为什么会出现这种情况的更多详细信息,请查看Gradle 问题跟踪器中的讨论。
因此,正如您所发现的,解决方案是在使用构建脚本中声明这些存储库。 如果您认为这太冗长,请考虑为您的 SDK 编写一个最小的插件来添加依赖项和存储库。
然后它会变成:
plugins {
id 'my-sdk-plugin'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.