maven - 在Android库中本地添加jar vs maven依赖
问题描述
我在我的 android 库项目中遇到了一种奇怪的行为。我的项目结构和依赖项如下:
应用程序 (.apk) -> 主库 (.aar) -> 通用库 (.aar 但可能是 .jar)
现在,公共库在多个项目之间共享,并具有使用改造依赖项的网络层,准备一个带有 Koin 依赖项和一些其他小依赖项的 di 方案。目前它作为 .aar 文件分发,但这会导致传递依赖的旧问题(它存在于主库的 pom.xml 中)。由于 aar 中没有资源,所以我只需要 classes.jar 文件。因此,我将公共库的发布任务更改为发布类 jar 而不是 .aar:
publishing {
publications {
....
groupId "com.fish.common"
artifactId "common-lib"
version "1.0.0-jar"
//was:
//artifact("$buildDir/outputs/aar/${libraryName}.aar")
//now is:
artifact("$buildDir/intermediates/aar_main_jar/release/classes.jar")
//I also publish debug separately but it's omitted for simplicity
}
....
}
实际上,这会将具有正确工件名称的类 .jar 文件与 pom.xml 一起发布到我的存储库
如果我通常像这样包含它,则在我的主库中没有:
implementation("com.fish.common:common-lib:1.0.0-jar"){
transitive = false;
}
在我构建并发布主库之后,公共库的依赖项仍然存在于 pom.xml 文件中。
<dependency>
<groupId>com.fish.common</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.0-jar</version>
</dependency>
但是,如果我删除上面的 maven 依赖项并将我的 classes.jar 从 common-library(文件明显重命名)本地添加到我的 main-library 项目中,并像这样包含它:
implementation fileTree(dir: "libs", include: ["*.jar"])
然后,我的主库 .aar 是使用来自 common-lib 的 .jar 文件构建的,当我构建仅具有主库 .aar 依赖项的 .apk 时,它在运行时工作。
现在你可以看到在本地添加这个文件有点解决我的问题,但是当你想要跟踪版本并且在 CI 构建系统中更复杂时,维护本地依赖项是相当平凡和麻烦的。
所以我的问题是 - 我可以达到与本地依赖相同的效果,但在 maven 存储库中拥有 common-lib 吗?
PS:我知道 fat-aar 插件,但它伴随着它自己的问题和新的构建 gradle 工具的问题让我过去退出它。
解决方案
推荐阅读
- python - 基于时间间隔在熊猫中使用随机基准时间创建组
- canvas - 我们可以使用fabric js改变画布的形状吗
- three.js - 如何使用 fbxtogltf 从 fbx 导出具有透明材料(alpha)的 glb?
- java - Hibernate 2个主键(1是外键)
- java - 运行 liquibase-maven-plugin install 时出错
- bash - 是否可以“同时读取”当前正在写入的文件?(并且会读取整个文件吗?)
- html - 如何将 CSS 网格内的弹性项目与其网格线对齐?
- css - VS code live Sass 编译器不生成 css 文件
- c# - DependencyProperty 未在 PropertyChanged 上更新
- amazon-ec2 - 将模型指标输出到 Cloudwatch