【发布时间】:2013-08-01 21:18:25
【问题描述】:
相关:How can I compile "import pack.*" with ant/javac, when there are no such classes?
假设我们有给定的包结构
parent
|
---a
---b
其中包parent 仅包含两个子包a 和b(包parent 下没有类)。
代码import parent.*,位于parent 以外的包中,使用Maven 编译(即javac)会引发编译时错误。错误是:
父包不存在
我查看了有关这种情况的 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 测试)。
注意:我在“mavenizing”仅依赖 Eclipse 编译器的(旧)现有项目时遇到了这种行为。我花了一段时间才确定这是我得到的编译错误的根本原因。
【问题讨论】:
-
只是学术兴趣还是有实用价值?对我来说,Eclipse 通过允许无意义的陈述表现得很愚蠢。
-
这纯粹是出于兴趣。我实际上从不使用按需导入声明,而是更喜欢单一类型导入。
-
您的问题是什么?你想知道如何让 Maven 编译这些类吗?你想知道JLS应该说什么吗?你想知道为什么 Eclipse 在不应该的情况下允许它吗?
-
Eclipse 不使用 javac。
标签: java eclipse maven javac jls