Java 注释不能从 Kotlin 项目 jar 中使用



我正在研究从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 编译也会失败并出现相同的错误。

知道问题可能是什么吗?

谢谢

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

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

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

我最终发现这根本不是 Kotlin 问题,而是 Spring Boot 打包问题:使用 jar 中的 Kotlin 类使用 kotlin-maven-plugin 构建

最新更新