我的代码在Eclipse中编译得很好,但是当我尝试从命令行编译时(通过我们基于ruby的构建器系统),我收到此错误消息:
static import only from classes and interfaces
建议不允许静态导入公共静态字段。我应该寻找什么来帮助诊断这个问题?我该如何解决?
更新 per @Ted的请求,引用文件中的常量声明:
public static final String NULL = "<NULL>";
和引用文件中的(bowdlerized)引用:
import static my.path.MyClass.NULL;
答案 0 :(得分:13)
我的猜测是Eclipse和buildr使用不同的Java编译器版本或不同的编译器标志。 Java 7编译器(bug ID: 715906)中存在一个错误,当您静态导入特定字段时会生成此错误。解决方法是使用通配符静态导入。所以而不是:
import static package.Class.staticField;
这样做:
import static package.Class.*;
答案 1 :(得分:8)
迟到的答案,但我刚刚得到了一个类似的问题并想出来了。我会张贴,以防其他人找到这个页面...
我遇到了类似的错误,在经过大合并和重构后,我不小心将测试类放入src / main / java而不是src / test / java。由于JUnit依赖项是scope = tests,因此它在纯maven中不起作用。也许你有同样的问题
答案 2 :(得分:2)
我也遇到了这个错误,结果是我的测试源文件中一个junit 4软件包的静态导入。
我有以下内容:
import static org.junit.Assert.fail;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTimeout;
我删除了import static org.junit.Assert.fail;
(不知道我是如何设法将其放入其中的),现在一切正常。
答案 3 :(得分:1)
我不小心将test
目录设置为源。并且测试源被视为源文件。
sourceSets.main.java.srcDirs 'src'
| -src
| -主要
| -测试
修复:
sourceSets.main.java.srcDirs 'src/main'