我遇到过一种特殊的构建情况,java项目在eclipse中编译,但在构建机器上失败(Ant 1.8.2和JDK 1.6)
对名为"DestinationList"的类的编译失败,该类是一个具有内部类的内部类。结构如下。
public class MappingDetail {
public class DestinationList extends AbstractGrowingScrollTable {
public class DestinationListRow {
}
}
}
使用如上所述布局的类,编译失败,抱怨找不到"AbstractGrowingCrollTable"。如果删除内部内部类"DestinationListRow",则编译成功。如果我将"DestinationList"移动到它自己的代码文件中,编译也会成功。
这是怎么回事?由于我有工作要做,出于兴趣我问。我不明白为什么会失败。
"AbstractGrowtableScrollTable"在一个单独的jar中,但这个jar肯定在类路径上,事实上,在启用详细日志记录后,我可以看到javac很快就找到了这个类。摘录如下。请注意,在日志的最后一个列表中,它确实加载了AbstractGrowtableScrollTable。
[javac] C:WorkDecisivBUILD_AREAcodesourceAPEI01cominitechsdapei01uiMappingDetail.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 cominitechsdksta01resourceIResourceable.class(cominitechsdksta01resource:IResourceable.class)]
[javac] [loading cominitechsdzart01resourcesResources.class(cominitechsdzart01resources:Resources.class)]
[javac] [loading cominitechsdzash01sharedPair.class(cominitechsdzash01shared:Pair.class)]
[javac] [loading cominitechsdzauicomponentCheckBox.class(cominitechsdzauicomponent:CheckBox.class)]
[javac] [loading cominitechsdzauicomponentGrid.class(cominitechsdzauicomponent:Grid.class)]
[javac] [loading cominitechsdzauicomponentImage.class(cominitechsdzauicomponent:Image.class)]
[javac] [loading cominitechsdzauicomponentLabel.class(cominitechsdzauicomponent:Label.class)]
[javac] [loading cominitechsdzauicomponentRow.class(cominitechsdzauicomponent:Row.class)]
[javac] [loading cominitechsdzauicomponentlayoutdataGridLayoutData.class(cominitechsdzauicomponentlayoutdata:GridLayoutData.class)]
[javac] [loading cominitechsdzauicomponentlayoutdataRowLayoutData.class(cominitechsdzauicomponentlayoutdata:RowLayoutData.class)]
[javac] [loading cominitechsdzauicomponentpropertiesAlignment.class(cominitechsdzauicomponentproperties:Alignment.class)]
[javac] [loading cominitechsdzauicomponentpropertiesFont.class(cominitechsdzauicomponentproperties:Font.class)]
[javac] [loading cominitechsdzauicomponenttableScrollTableColumn.class(cominitechsdzauicomponenttable:ScrollTableColumn.class)]
[javac] [loading cominitechsdzauicomponenttableScrollTableRow.class(cominitechsdzauicomponenttable:ScrollTableRow.class)]
[javac] [loading cominitechsdzauiresourceDefaultStyle.class(cominitechsdzauiresource:DefaultStyle.class)]
[javac] [loading cominitechsdzauiresourceImageResources.class(cominitechsdzauiresource:ImageResources.class)]
[javac] [loading cominitechsduicfAbstractGrowingScrollTable.class(cominitechsduicf:AbstractGrowingScrollTable.class)]
原来这是一个编译器错误。
http://bugs.sun.com/view_bug.do?bug_id=6707323