我有3个模块的项目结构:x一个一个一个一个一个一个一个一个一个一个一个和x一个一个一个一个二个一个。
它们之间的依赖关系如下::library
--* 取决于 --〉:internal
,通过实施:library
-- 取决于 --〉:shared
通过api:internal
-- 取决于 *--〉:shared
,通过实施
因此,:library
使用:internal
,没有公开它,而:shared
公开它。此外,:internal
也使用:shared
。
- 问题:**如何使用
maven-publish
Gradle插件发布:library
模块并包含其他模块源?
- 问题:**如何使用
目前,我的发布如下所示(:library
的 * build. gradle. kts *):
publishing {
publications {
register<MavenPublication>("release") {
groupId = Project.GROUP_ID
artifactId = Project.ARTIFACT_ID
version = Project.VERSION
from(components["release"])
}
}
}
但在发布(我使用JitPack)并将其作为依赖项添加到另一个项目的 * build. gradle * 文件中后,我在尝试构建它时遇到以下错误:
> Could not resolve all files for configuration ':app:debugCompileClasspath'.
> Could not find [:shared module].
Required by:
project :app > [`:library` module]
如何将我的依赖模块提供给已发布的依赖模块?
1条答案
按热度按时间0pizxfdo1#
有三种方法可以解决这个问题:
1.将库的每个子模块直接发布到Maven
1.创建包含子模块的afat .aar
1.创建单个模块SDK
1.在创建包含以下模块的项目时,将库的每个子模块直接发布到Maven
将每个子模块直接发布到Maven并不是一个合理的选择,但当然,这也是实现我们所需的一种方法。
2.创建包含子模块的afat .aar向依赖项添加类路径
应用插件
像代码隐藏一样实现你的模式
3.创建单个模块SDKKotlin有四个不同的可见性修饰符:
私有受保护内部公有
值得注意的是,这里缺少一个项目内部的修饰符,但在不同的模块中可见。
因此,当数据库模块想要使其方法可由库访问时,它需要将这些方法标记为公共的!
然而,这不仅会使它们可以被库访问,还会使那些方法可以被任何使用库的应用程序访问!因此SDK的内部结构暴露给了外界。
虽然这个限制是Kotlin(和Java)的基础,但是有一些方法可以减轻这个限制: