Java Intellij IDEA社区为什么编译只使用运行时依赖项的代码?
注意:可以在包的基础上禁用导入建议。这不是我要找的功能 我试图通过将可传递依赖项标记为仅运行时依赖项,来分离Intellij IDEA CE中的intellisense/autocomplete建议。作为一个具体的例子,假设我想从下面的窗口中删除臭名昭著的hamcrest建议: 当我使用Gradle时,我想我可以通过将Java Intellij IDEA社区为什么编译只使用运行时依赖项的代码?,java,intellij-idea,kotlin,dependency-management,Java,Intellij Idea,Kotlin,Dependency Management,注意:可以在包的基础上禁用导入建议。这不是我要找的功能 我试图通过将可传递依赖项标记为仅运行时依赖项,来分离Intellij IDEA CE中的intellisense/autocomplete建议。作为一个具体的例子,假设我想从下面的窗口中删除臭名昭著的hamcrest建议: 当我使用Gradle时,我想我可以通过将org.hamcrest:hamcrest core:1.3atestRuntimeOnly依赖项而不是testImplementation依赖项来解决这个问题。正如所料,将Gr
org.hamcrest:hamcrest core:1.3
atestRuntimeOnly
依赖项而不是testImplementation
依赖项来解决这个问题。正如所料,将Gradle项目重新导入IDE后,它在IntelliJ模块中被正确标记为“运行时”依赖项:
然而,这并没有阻止intellisense从被排除的库中提出建议。更糟糕的是,使用“运行时”作用域库的代码实际上是使用IDE工具链编译的,但是gradle构建失败,因为库被正确地从编译类路径中排除
在这一点上,我验证了我可以使用任何“运行时”范围的依赖项中的任何代码,并且IDE不会有任何问题
我是不是遗漏了什么?如果“运行时”范围不阻止我直接依赖代码,那么它的意义何在
注意:我将Kotlin用于JVM,即我的源代码是Kotlin,但依赖项是Java。这只能在包的基础上使用导入/完成排除来完成。IDE intellisense将从运行时依赖项中建议方法,因为它对您的应用程序是可用的,可以在代码中使用。@CrazyCoder在代码中使用运行时依赖项是不正确的-gradle在编译时从类路径中忽略这些库,因此生成将失败。Martin,不知道为什么添加了安卓标签。虽然kotlin和IntelliJ的一个变体通常用于Android开发,但这个问题更普遍地适用于任何使用IntelliJ的kotlin项目,也可能适用于任何java项目。现在把它改回去,除非你有其他原因让我失踪。