Ktor 多模块项目中的自定义插件问题(无值存在错误)

问题描述 投票:0回答:1

我目前正在使用

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 中引用它的方式有关。 任何帮助或建议将不胜感激。预先感谢!

android kotlin gradle ktor
1个回答
0
投票

implementationClass = "KtorLibraryConventionPlugin"
缺少包名称空间部分:

implementationClass = "sermilion.ktor.library.KtorLibraryConventionPlugin"
© www.soinside.com 2019 - 2024. All rights reserved.