【发布时间】:2024-05-03 19:05:02
【问题描述】:
我有一个 JDK 9 项目。运行mvn install 时,一切正常。将 IntelliJ 2017.2.6 与 JDK 9.0.4 一起使用时,我出现了
由于拆分包而导致数十个编译错误。例如,在我的 POM 中,我设置了对 org.apache.solr:solr-core:7.2.1 的依赖。 IntelliJ 显示的错误之一是:
Error:java: module solr.core reads package org.apache.lucene.search from both lucene.misc and lucene.sandbox
IntelliJ 发出编译错误的原因是:
-
solr-core对工件lucene-misc和lucene-sandbox具有 Maven 依赖关系 -
lucene-misc.jar和lucene-sandbox.jar都在包org.apache.lucene.search中定义类 - IntelliJ 认为
lucene-misc.jar和lucene-sandbox.jar是JDK 9 模块(事实上,它们不是模块,它们没有module-info.java文件)。由于两个 JDK 9 模块不能参与同一个包,IntelliJ 会发出编译错误。
相比之下,Maven 编译器插件没有错误,因为它认为lucene-misc.jar 和lucene-sandbox.jar 属于
类路径,而不是模块路径。
我显然不想重新打包 Lucene 的东西。
所以我的问题归结为以下几点:如何使 IntelliJ 错误 Error:java: module Mod1 reads package P from both Mod2 and Mod3 静音?
【问题讨论】:
-
删除你的module-info.java
-
您的直接依赖项必须进入模块路径,但传递依赖项可以进入任一路径。 Maven 将它们放在类路径上(拆分包无关紧要),而 IntelliJ 将它们放在模块路径上(导致您观察到的问题)。我不知道如何告诉 IntelliJ 在哪里放置传递依赖项。诉诸非模块化项目可能是您唯一的选择。
-
感谢@ZhekaKozlov 和 Nicolai。希望 JetBrains 的人能够在 IntelliJ 的下一个版本中使这种行为可配置。
-
我现在看到一个案例,IntelliJ 似乎错误地将某些东西标记为拆分包,而实际上没有。案例很简单,所以我认为这可能是一个错误。我正在等待回复,但详细信息在这里:intellij-support.jetbrains.com/hc/en-us/community/posts/…
标签: intellij-idea module compiler-errors java-9