Javac无法使用内部类编译内部类,但在将类移动到其自己的代码文件时起作用 - 为什么?

时间:2013-11-22 02:02:37

标签: java javac

我遇到了一个特殊的构建情况,其中java项目在eclipse中编译但在构建机器上失败(使用JDK 1.6的Ant 1.8.2)

编译在名为'DestinationList'的类上失败,该类是具有内部类的内部类。结构类似于下面。

public class MappingDetail {

    public class DestinationList extends AbstractGrowingScrollTable {

        public class DestinationListRow {

        }
    }
}

使用上面列出的类,编译失败,抱怨它无法找到'AbstractGrowingScrollTable'。如果我删除内部内部类'DestinationListRow',编译成功。如果我将'DestinationList'移动到它自己的代码文件,编译也会成功。

这里发生了什么?因为我有一个解决方案,所以我有兴趣。我不明白为什么会失败。

'AbstractGrowableScrollTable'在一个单独的jar中,但是这个jar肯定在类路径上,实际上打开了详细的日志记录,我可以看到该类实际上是由javac发现的。摘录如下。注意它最后的日志列表,它确实加载了AbstractGrowableScrollTable。

[javac] C:\Work\Decisiv\BUILD_AREA\code\source\APEI01\com\initech\sd\ap\ei01\ui\MappingDetail.java:551: cannot find symbol
[javac] symbol  : class AbstractGrowingScrollTable
[javac] location: class com.initech.sd.ap.ei01.ui.MappingDetail
[javac]     public class DestinationList extends AbstractGrowingScrollTable {  
[javac]                                          ^
[javac] [loading com\initech\sd\ks\ta01\resource\IResourceable.class(com\initech\sd\ks\ta01\resource:IResourceable.class)]  
[javac] [loading com\initech\sd\za\rt01\resources\Resources.class(com\initech\sd\za\rt01\resources:Resources.class)]  
[javac] [loading com\initech\sd\za\sh01\shared\Pair.class(com\initech\sd\za\sh01\shared:Pair.class)]
[javac] [loading com\initech\sd\za\ui\component\CheckBox.class(com\initech\sd\za\ui\component:CheckBox.class)]
[javac] [loading com\initech\sd\za\ui\component\Grid.class(com\initech\sd\za\ui\component:Grid.class)]
[javac] [loading com\initech\sd\za\ui\component\Image.class(com\initech\sd\za\ui\component:Image.class)]
[javac] [loading com\initech\sd\za\ui\component\Label.class(com\initech\sd\za\ui\component:Label.class)]
[javac] [loading com\initech\sd\za\ui\component\Row.class(com\initech\sd\za\ui\component:Row.class)]
[javac] [loading com\initech\sd\za\ui\component\layoutdata\GridLayoutData.class(com\initech\sd\za\ui\component\layoutdata:GridLayoutData.class)]
[javac] [loading com\initech\sd\za\ui\component\layoutdata\RowLayoutData.class(com\initech\sd\za\ui\component\layoutdata:RowLayoutData.class)]
[javac] [loading com\initech\sd\za\ui\component\properties\Alignment.class(com\initech\sd\za\ui\component\properties:Alignment.class)]
[javac] [loading com\initech\sd\za\ui\component\properties\Font.class(com\initech\sd\za\ui\component\properties:Font.class)]
[javac] [loading com\initech\sd\za\ui\component\table\ScrollTableColumn.class(com\initech\sd\za\ui\component\table:ScrollTableColumn.class)]
[javac] [loading com\initech\sd\za\ui\component\table\ScrollTableRow.class(com\initech\sd\za\ui\component\table:ScrollTableRow.class)]
[javac] [loading com\initech\sd\za\ui\resource\DefaultStyle.class(com\initech\sd\za\ui\resource:DefaultStyle.class)]
[javac] [loading com\initech\sd\za\ui\resource\ImageResources.class(com\initech\sd\za\ui\resource:ImageResources.class)]
[javac] [loading com\initech\sd\ui\cf\AbstractGrowingScrollTable.class(com\initech\sd\ui\cf:AbstractGrowingScrollTable.class)]

1 个答案:

答案 0 :(得分:1)

原来这是一个编译器错误。

http://bugs.sun.com/view_bug.do?bug_id=6707323

相关问题