具有共享模块的多平台项目

Posted

技术标签:

【中文标题】具有共享模块的多平台项目【英文标题】:Multiplatform project with shared module 【发布时间】:2019-02-18 14:32:00 【问题描述】:

我正在尝试创建一个具有共享依赖项的多平台项目,但我无法找出我做错了什么。

背景是我想创建一个生成某种配置的库,并将该配置用于应该在 jvm 和 node.js 上运行的运行时库。因此可以共享配置数据类,我想将其放入共享模块中。该代码根本不是特定于平台的。配置生成(我称之为 CLI)应该只是 jvm。所以我有这个模块(带有插件名称):

cli (org.jetbrains.kotlin.jvm) 共享 (kotlin-platform-common) 运行时共享 (kotlin-platform-common) runtime-js (kotlin-platform-js) runtime-jvm (kotlin-platform-jvm)

我通过compile project(":shared") 将共享模块设置为依赖项,但似乎没有一个共享类位于以运行时开头的模块的类路径中。

这还不可能还是我做错了什么?

【问题讨论】:

【参考方案1】:

要将common 模块(即使用kotlin-platform-common 构建的模块)与其特定于平台的实现连接起来,您应该为它们提供expectedBy project(':shared') 依赖而不是compile

您可以在Kotlin reference 或一些可用的示例项目中找到示例构建脚本,例如here。

【讨论】:

很酷,但这不是很直观。我仍然不明白为什么平台特定的实现应该期望另一个为实现提供类的模块。 这里的命名遵循 Kotlin 多平台项目的 expect/actual 术语,其中一个公共模块包含声明,这些声明预期在平台模块。因此,这些是预期的通用模块。

以上是关于具有共享模块的多平台项目的主要内容,如果未能解决你的问题,请参考以下文章

提供两个不同战争的多模块项目

使用Spring Boot Gradle插件的多模块项目

具有共享代码的多个 JSF 项目的结构

如何将字节从 Swift (iOS) 传递到 Kotlin 通用模块?

在多模块 maven 项目中的模块之间共享 src/test 类

将一个快速的大项目拆分为具有核心框架和模块框架的框架