相关:
How can I compile “import pack.*” with ant/javac, when there are no such classes?
假设我们有给定的包结构
parent
|
---a
---b
包父类只包含两个子包a和b(没有类在包父项下).
代码导入父.*,位于除父级之外的包中,使用Maven编译(即javac)会引发编译时错误.错误是:
package parent does not exist
我查看了关于这种情况的Java语言规范(按需导入的声明,其中没有实际导入任何类型). Paragraph 7.5.2 of the JLS关于按需导入声明似乎没有指定此行为.
这是javac的错误吗?我不是在问如何规避编译错误.我想知道为什么javac会抛出错误,因为我在JLS中找不到它应该引用的任何引用;让我相信这可能是一个错误.
我测试了JDK 1.4,1.6,1.7和1.8,错误是一样的.
作为旁注,Eclipse中使用相同的代码没有编译错误(使用Eclipse Indigo,Juno,Luna和Mars进行测试).
注意:当“纯化”仅依赖于Eclipse编译器的(旧)现有项目时,我遇到了这种行为.我花了一段时间才发现这是我得到的编译错误的根本原因.
最佳答案 我想你要找的是
section7.4.3
A package is observable if and only if either:
A compilation unit containing a declaration of the package is
observable (§7.3).A subpackage of the package is observable.
The packages java, java.lang, and java.io are always observable.
并在7.5.2年
It is a compile-time error if the named package or type is not accessible (§6.6).
因此,如果包中没有任何内容,则它不存在,并且该错误实际上位于Eclipse编译器的一侧;它在very old bug report中被描述为处于“LATER”状态,直到最终该状态被弃用并且它被移动到WONT_FIX.如果您认为值得修复,请随意重新打开它(现在JLS已在该领域得到澄清)