我目前正在使用
Ktor
学习后端开发,并探索类似于我在 Android 开发中所做的多模块项目设置。注意:当我提到“模块”时,我指的是实际的项目模块(如 Android 中),而不是 Ktor 特定的模块术语。
我想要实现的目标: 我想通过将我的 Ktor 项目分成多个模块来应用清洁架构原则,例如
data
、domain
、presentation
等。为了使构建设置更清晰,我创建了一个 build-logic
模块来存储 Kotlin 约定我可以在我的项目模块中重复使用的插件。
当前设置: 我添加了一个
build-logic
模块来存储我的自定义插件。
在我的
settings.gradle.kts
中,我包含了 build-logic
模块,其中包含以下内容:
pluginManagement {
includeBuild("build-logic")
}
在
build-logic
模块中,我创建了一个类 KtorLibraryConventionPlugin 代表 Ktor 库的插件约定。
我的
build-logic/build.gradle.kts
看起来像这样:
gradlePlugin {
plugins {
register("ktorLibrary") {
id = "sermilion.ktor.library"
implementationClass = "KtorLibraryConventionPlugin"
}
}
}
在
libs.versions.toml
中,我定义了插件:
sermilion-ktor-library = { id = "sermilion.ktor.library", version = "unspecified" }
我正在主模块的
build.gradle.kts
中应用该插件,如下所示:
alias(libs.plugins.sermilion.ktor.library)
问题: 当我尝试构建项目时,遇到以下错误:
Build file 'C:\Users\username\IdeaProjects\ProjectName\build.gradle.kts' line: 4
An exception occurred applying plugin request [id: 'sermilion.ktor.library', version: 'unspecified']
> Failed to apply plugin 'sermilion.ktor.library'.
> No value present
我已经被这个问题困扰了几个小时,无法弄清楚出了什么问题。
问题: 多模块设置(具有实际的独立模块,如数据、域等)是 Ktor 项目中的有效方法吗?在深入研究之前,我想确保这是有意义的。 我的自定义插件设置中缺少什么导致“无值存在”错误?我怀疑这可能与我注册插件或在 libs.versions.toml 中引用它的方式有关。 任何帮助或建议将不胜感激。预先感谢!
implementationClass = "KtorLibraryConventionPlugin"
缺少包名称空间部分:
implementationClass = "sermilion.ktor.library.KtorLibraryConventionPlugin"