仅分包按需进口申报

2023-12-22

有关的 :当没有这样的类时,如何使用 ant/javac 编译“import pack.*”? https://stackoverflow.com/questions/878685/how-can-i-compile-import-pack-with-ant-javac-when-there-are-no-such-classes

假设我们有给定的包结构

parent
|
---a
---b

包裹在哪里parent仅包含两个子包a and b(包下没有类parent).

代码import parent.*,位于除parent,用 Maven 编译(即javac) 抛出编译时错误。错误是:

父包不存在

我研究了关于这种情况的 Java 语言规范(按需导入声明,实际上没有导入任何类型)。JLS 第 7.5.2 段 https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5.2关于按需导入声明似乎没有指定这种行为。

这是一个错误吗javac?我不是问如何避免编译错误。我想知道为什么javac抛出错误,因为我在 JLS 中找不到任何应有的引用;让我相信这可能是一个错误。

我用JDK 1.4、1.6、1.7和1.8测试,错误是一样的。

附带说明一下,相同的代码在 Eclipse 中没有编译错误(使用 Eclipse Indigo、Juno、Luna 和 Mars 进行测试)。

注意:我在“mavenizing”仅依赖于 Eclipse 编译器的(旧)现有项目时遇到了这种行为。我花了一段时间才确定这是我遇到的编译错误的根本原因。


我想你正在寻找的是第7.4.3节 https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.4.3

当且仅当满足以下任一条件时,包才是可观察的:

  • 包含包声明的编译单元是 可观察到的(第 7.3 节)。

  • 包的子包是可观察的。

java、java.lang 和 java.io 包始终是可观察的。

And in 7.5.2 https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5.2

如果指定的包或类型不可访问,则这是一个编译时错误(第 6.6 节)。

因此,如果包中没有任何内容,那么它就不存在,并且错误实际上是在 Eclipse 编译器方面;它被描述在非常旧的错误报告 https://bugs.eclipse.org/bugs/show_bug.cgi?id=18533它一直处于“LATER”状态,直到最终该状态被弃用,并被移至 WONT_FIX。如果您认为值得修复,请随意重新打开它(现在 JLS 在这方面已得到澄清)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅分包按需进口申报 的相关文章

随机推荐