【问题标题】:Java annotation not usable from Kotlin project jarJava 注释不能从 Kotlin 项目 jar 中使用
【发布时间】:2018-07-03 01:21:33
【问题描述】:

我正在开发从 Java 转移到 Kotlin 的库。由于项目仍然混合使用这两种语言,我使用 kotlin-maven-plugin 和 maven-compiler-plugin,如 https://kotlinlang.org/docs/reference/using-maven.html 中所述。 Kotlin 版本是 1.2.10。

我需要在库中创建一个注释,它将用于其他项目。注释是标准的 Java 注释,我可以构建我的库。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnableSomeBehavior {

}

当我在另一个项目(Java 项目)中导入库时,我可以看到注释。我的 IDE(IntelliJ)中的自动完成实际上向我提出了注释.. 但由于某种原因,无法导入它:当我验证自动完成选择时,我收到编译错误“无法解析符号 'EnableSomeBehavior '"。

这很令人费解..我已经重建了几次(以防罐子损坏),但它没有改变任何东西。

我怀疑这与 Kotlin/Java 库的编译和/或打包方式有关。Java 注释在 jar 中,我可以看到它,并且在某种程度上,IDE 也可以看到它,因为它正在提议它。但不知何故,它无法使用它。这不是 IDE 问题,因为即使从命令行使用 Maven 编译也会失败并出现相同的错误。

知道问题可能是什么吗?

谢谢

【问题讨论】:

    标签: java maven kotlin


    【解决方案1】:

    最初,我发现如果注释是 Kotlin 而不是 Java 注释会更好:

    @Target(AnnotationTarget.CLASS, AnnotationTarget.FILE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    annotation class EnableSomeBehavior
    

    重建我的库后,IntelliJ 不会在使用注释的项目中显示任何错误。但是,编译仍然会失败!

    我最终发现这根本不是 Kotlin 问题,而是 Spring Boot 打包问题:Using Kotlin classes from jar built with kotlin-maven-plugin

    【讨论】:

    • 那么,如果我们将课程移至 kotlin 是否有效?我面临同样的问题,我有 java 和 kotlin 类,它不会在 kotlin 中工作
    • 我的问题只是在我将我的 kotlin/java lib 打包到 jar 中,并将 jar 声明为另一个项目中的依赖项的情况下。解决方案是它的打包方式,如答案中提供的链接中所述
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多