我的模块结构:
--project
--build-logic
--convention
--feature
--article
--database
build-logic/convention/build.gradle.kts
plugins {
`kotlin-dsl`
}
dependencies{
compileOnly(libs.kotlin.gradle.plugin)
}
gradlePlugin {
plugins {
register("springboot"){
id = "sage.springboot"
implementationClass = "SpringbootConventionPlugin"
}
}
}
build-logic/convention/src/main/kotlin/com/sage/server/SpringbootConventionPlugin.kt
package com.sage.server
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType
class SpringbootConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
val libs = project.extensions.getByType<VersionCatalogsExtension>().named("libs")
pluginManager.apply(libs.findPlugin("kotlin-jvm").get().get().pluginId)
pluginManager.apply(libs.findPlugin("kotlin-spring").get().get().pluginId)
pluginManager.apply(libs.findPlugin("spring-framework-boot").get().get().pluginId)
pluginManager.apply(libs.findPlugin("spring-dependency-management").get().get().pluginId)
}
}
}
但我在使用自定义插件时收到一个错误:feature/article/database/build.gradle.kts
plugins {
id("sage.springboot")
}
错误:
Caused by: org.gradle.api.plugins.InvalidPluginException: Could not find implementation class 'SpringbootConventionPlugin' for plugin 'sage.springboot' specified in jar:file:/D:/Software/.gradle/caches/jars-9/ceb3f2c77f3429950687bbe83d9848a4/convention.jar!/META-INF/gradle-plugins/sage.springboot.properties.
我哪里做错了?
我在网上搜索了很久,没有一个例子使用下面的技术栈springboot + gradle + convention + libs.versions.toml + kts
,能不能提供一些资源或者代码示例?对于刚接触gradle的人来说,没有相关资源确实很难继续。
第一次编辑
将build-logic/convention/src/main/kotlin/com/sage/server/SpringbootConventionPlugin.kt
更改为build-logic/convention/src/main/kotlin/SpringbootConventionPlugin.kt
。
固定Could not find implementation class 'SpringbootConventionPlugin'
模块core:api
plugins {
id("sage.springboot")
}
dependencies {
api(libs.spring.boot.starter.web)
}
模块feature:article:api
plugins {
id("sage.springboot")
}
dependencies{
api(project(":core:api"))
implementation(project(":feature:article:service"))
}
我使用了api()
而不是implementation()
,但依赖项没有传递。feature:article:api
依赖于core:api
,core:api
依赖于libs.spring.boot.starter.web
,但feature:article:api
不依赖于libs.spring.boot.starter.web
。
您可以在这里查看完整的code(也许您需要禁用maven镜像存储库)
1条答案
按热度按时间kqlmhetl1#
在@aSemy的帮助下,我的springboot项目已经能够成功运行。
我通过重命名子项目解决了
dependencies were not passed
问题。这不是最佳实践。2您可以优化此子项目的名称。
您可以在这里查看完整的code(可能需要禁用maven镜像库)。