我正在为Eclipse中的某些Java类编写单元测试。我总是让Eclipse自动处理我的导入,并根据默认方案对它们进行排序。
现在,我有以下情况。单元测试在Eclipse中构建并运行得很好。但是,当我在命令行上构建测试时(使用一些Ant目标),javac抱怨它无法找到我导入的其中一个类。由于我正在使用缓存测试某些内容,因此测试文件的相关位(Test.java可以说是):
import com.abc.my.stuff.MyCacheLoader.Operation;
import com.google.common.cache.CacheLoader;
public class Test {
... test code, such as ...
List<MyKey> recordedKeys = dummyLoader.getKeysFor(Operation.LoadAll);
}
// Dummy cache loader which just records the keys
class MyCacheLoader extends CacheLoader<MyKey, MyValue> {
enum Operation { Load, LoadAll }
@Override
public MyValue load(MyKey key) throws Exception { .... whatever .... }
@Override
public MyValue loadAll(Iterable<MyKey> key) throws Exception { .... whatever .... }
public List<MyKey> getKeysFor(Operation op) { ... impl ... }
}
请注意,我的本地类的内部枚举的导入出现在导入Guava CacheLoader类之前,因为它们按字母顺序排序。当我尝试在命令行上使用Ant编译它时,javac无法找到&#39; CacheLoader&#39;。当我切换导入的顺序时,构建成功(而Eclipse并不关心)。
我对这里发生的事情感到困惑。
答案 0 :(得分:1)
显然,Eclipse中的编译器没有以下Sun错误:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6391197
我通过以下方式找到:
http://unimplemented.blogspot.com/2007/08/my-java-puzzle-does-order-of-import.html
这解释了为什么翻转导入顺序对Eclipse没有任何影响,但它对Sun编译器没有影响。部分问题已在Java 8中修复,但我的特定表现形式针对Java 9中的修复:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7101822