- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
solr-core
对工件有 Maven 依赖关系 lucene-misc
和 lucene-sandbox
lucene-misc.jar
和 lucene-sandbox.jar
在包 org.apache.lucene.search
中定义类lucene-misc.jar
和 lucene-sandbox.jar
是 JDK 9 模块(事实上,它们不是模块,它们没有 module-info.java
文件)。由于两个 JDK 9 模块不能参与同一个包,IntelliJ 会发出编译错误。 lucene-misc.jar
和
lucene-sandbox.jar
作为属于
Error:java: module Mod1 reads package P from both Mod2 and Mod3
?
最佳答案
[短]
如果您想从模块代码运行您的应用程序,这是不可能的。您必须将依赖于碰撞 JAR 的代码迁移到非模块代码,并将碰撞 jar 添加到类路径中。 (如评论中所建议)
【长】
Intellij 在幕后尝试运行 JVM,因此 Intellij 只有在 JVM 可以运行的情况下才能运行您的应用程序。
当您从模块 jar 运行应用程序时,这意味着您从命名模块运行应用程序。该模块必须要求其所有依赖项,这些依赖项应该是名称模块。请注意,即使是从您的非模块 JAR 创建的自动模块也确实被命名。
Java 9 不允许拆分包,因为配置可靠,只有未命名的模块除外。
使其工作的唯一方法是将碰撞 jar 移动到未命名的模块,但是 named module cannot depend on unnamed module
A named module cannot, in fact, even declare a dependence upon the unnamed module. This restriction is intentional, since allowing named modules to depend upon the arbitrary content of the class path would make reliable configuration impossible.
Maven places them on the class path (where split packages don't matter), whereas IntelliJ places them on the module path (leading to the problems you observe).
关于intellij-idea - 在 IntelliJ 上消除 Java 9 拆分包错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871059/
系统详细信息: Arch Linux:4.11.7-1-ARCH x64 Oracle Java JDK:1.8.0_131 IntelliJ Scala 插件:2017.1.19(最新) SBT:0
我是一名优秀的程序员,十分优秀!