我有一个带有模态类的多平台项目,用户。
User.kt
class User {
val id = -1
val username = ""
val age = -1
val nickname = ""
}我还期望和实际的注释。
Annotation.kt公共模块
expect annotation class NodeEntity
expect annotation class Id
expect annotation class GeneratedValue更重要的是,我有它们的实际实现。
Annotation.kt JVM模块
actual typealias ValueFor = org.neo4j.ogm.annotation.ValueFor
actual typealias NodeEntity = org.neo4j.ogm.annotation.NodeEntity
actual typealias Id = org.neo4j.ogm.annotation.Id
actual typealias GeneratedValue = org.neo4j.ogm.annotation.GeneratedValue
actual typealias Relationship = org.neo4j.ogm.annotation.Relationship然后我回去注释我的User.kt
@NodeEntity
class User {
@Id
@GeneratedValue
val id = -1
val username = ""
val age = -1
val nickname = ""
}但是当我编译它时,我会得到这个错误。
Task :compileKotlinJvm FAILED
e: ...User.kt: (13, 2): This class does not have a constructor
e: ...User.kt: (21, 6): This class does not have a constructor
e: ...User.kt: (22, 6): This class does not have a constructor我做错什么了?
N:B.所做的尝试
FYI:我的build.gradle已经有了noArg,所以User.kt类是用一个无参数的公共构造函数编译的
发布于 2019-01-10 14:05:55
您的expect注释可能需要显式括号。
expect annotation class SharedImmutable()actual typealias SharedImmutable = kotlin.native.SharedImmutable发布于 2020-09-01 17:15:41
我也经历过类似的问题,但表面上就像OP一样,我已经包含了明确的括号。我的具体问题与Java源代码集中的Java库有关,无法被依赖于它的另一个Gradle子项目使用。
TL;博士
断言您正在正确地公开平台特定的依赖项。例如,在implementation文件中正确地使用build.gradle和api。
详细介绍了我的场景
我有一个分级多项目的构建:
Project
AppSubProject
LibrarySubProjectAppSubProject依赖LibrarySubProject的地方。两个分项目都是Kotlin多平台模块.
在LibrarySubProject中,有一个公开的注释类:
公共源集:
expect annotation class Inject()JVM源集:
actual typealias Inject = javax.inject.InjectKotlin公共Inject注释对AppSubProject是可用的,因为它依赖于LibrarySubProject。
AppSubProject/build.gradle:
...
commonMain {
dependencies {
implementation project(":LibrarySubProject")
... 问题的起因
在LibrarySubProject/build.gradle文件中,我没有公开JVM依赖项:
...
jvmMain {
dependencies {
implementation "javax.inject:javax.inject:1"
...如您所见,我使用的是implementation而不是api。因此,当我在AppSubProject中的类的构造函数上使用注释时
class Example @Inject constructor()当我构建AppSubProject时,它无法解决JVM的依赖关系,并且神秘地给了我以下错误:
e: Example.kt: This class does not have a constructor解决方案
解决方案只是公开JVM依赖关系,以便在另一个模块中解决它。因此,将implementation改为api解决了这个问题。
...
jvmMain {
dependencies {
api "javax.inject:javax.inject:1"
...求和
如果遇到此问题,请断言如下:
https://stackoverflow.com/questions/54124454
复制相似问题