当前位置: 首页 > 知识库问答 >
问题:

梯度依赖项不与依赖模块共享

家弘业
2023-03-14

我的项目中有两个模块:

  • Java/Kotlin模块公共
  • Android/Kotlin模块应用程序

common依赖于Koin,Koin是一个用于依赖性注入的Kotlin库:

dependencies {
  implementation 'org.koin:koin-core:1.0.2'
}

用法示例:

class MyPresenter: KoinComponent {
  ...
}
dependencies {
  implementation project(':common')
}
class MyFragment {
  private val presenter = MyPresenter()
}

当我运行./gradlew:app:dependencies

debugCompileClasspath
+--- project :common
debugRuntimeClasspath
+--- project :common
|    +--- org.koin:koin-core:1.0.2

该依赖项位于runtime配置中,但在compile配置中缺少。

显然,我不想在应用程序中声明Koin依赖项,所以我尝试了几种方法:

dependencies {
  api 'org.koin:koin-core:1.0.2'
}
dependencies {
  implementation project(path: ':common', configuration: `compile`)
}

不起作用--我不确定这一个,但我希望它能在compile配置中获得common的依赖项。

更改compile的Koin依赖项:

dependencies {
  compile 'org.koin:koin-core:1.0.2'
}

工作!依赖项显示在debugcompileclasspath中,我可以运行应用程序

现在我很困惑:

  • 因为应用程序不直接使用Koin,所以我认为它不需要依赖项。为什么呢?是否因为MyPresenter的静态类型是KoinComponent
  • 我认为API与不推荐的compile相同。似乎不是。
  • 除了使用不推荐的编译之外,还有其他方法吗?

共有1个答案

邬良才
2023-03-14
  • 因为您使Koin类型出现在common的API中,所以common的消费者需要了解Koin类型。它们实际上成为api.
  • API配置是您应该使用并且应该工作的配置
  • 最有可能的解释是,Android/Kotlin项目一方和Java/Kotlin项目另一方对什么是API以及如何构建或访问可消费配置APIelements或…
  • 有不同的定义

为了调试它,我建议创建一个简单的项目来重现这个问题,并可以共享,因为在android或kotlin插件中可能有一个bug。

 类似资料:
  • 让我们创建一个名为的新模块,并在那里定义CounterService。 app/shared/shared.module.ts 现在我们将引入 SharedModule 到AppModule 和中。 app/lazy/lazy.module.ts 使用此配置,两个模块的组件都可以访问CounterService。 我们将以完全相同的方式在EagerComponent和LazyComponent中使

  • Velocity 不依赖 jQuery Velocity.js 可以在不引入 jQuery 的情况下单独使用。如果 你需要大部分动画效果能兼容 IE8,就必须引入 jQuery 1×。 它也可以和 Zepto 一起使用,写法和 jQuery 一样: // 无 jQuery 或 Zepto 时,Velocity()方法挂载在 window 对象上 (window.velocity) // ( 第一

  • 我已经集成了CircleCI来在我的应用程序上运行Espresso测试。我从另一个在线github存储库中获取了以下circle.yml文件,并将android构建工具和android版本更改为25。但是,当我在CircleCI服务器上运行构建时,我收到以下错误。我已经在yml文件中授予了执行权限。 我的应用回购结构是 circle.yml(圈.yml): gradle/wrapper/gradl

  • 本文向大家介绍android-gradle 模块依赖,包括了android-gradle 模块依赖的使用技巧和注意事项,需要的朋友参考一下 示例 在多项目中gradle build,您可以与构建中的另一个模块具有依赖关系。 例: 该compile project(':mylibrary')行将名为“ mylibrary”的本地Android库模块声明为依赖项,并要求构建系统在构建应用程序时编译并包

  • 我正在和我的朋友一起做一个智能J项目,我们使用MongoDB 我没有设置这些东西,我从一个存储库中克隆了它。但是我的其他朋友已经让它工作了——都在视窗、OSX和Linux上。只有一个人设置了它。 问题是它不知道什么是莫菲/MongoDB(例如,导入不起作用)。 我做了什么: 重新同步渐变 运行Gradle。生成文件 重新审视项目 使缓存无效并重新启动 它仍然不知道MongoDB是什么。所以我尝试让

  • 我在Maven中有一个相当简单的带有子模块的项目结构: 在中,我定义了所有子模块的属性,如库版本或插件配置: 直接在节点中设置库版本。 在中设置节点。 尝试不同的库版本。 使用以及库是否存在。 在中运行。 在中运行。 在中运行 在中运行。 在中运行。

  • 在使用scalatest时,我遇到了一个奇怪的问题。我有一个带有多个模块的maven项目。如果我直接在模块中执行mvn测试。它可以正常工作,但如果在根文件夹中执行,它会抱怨编译时缺少包(依赖项)。 我的配置如下所示: 插件配置: 如果我从maven scala插件中删除目标,它将编译,但scalatest将找不到测试源并退出,并且没有执行任何测试 : 你知道我做错了什么吗?! 干杯