27

我的代码在 Eclipse 中编译得很好,但是当我尝试从命令行编译时(通过我们基于 ruby​​ 的构建器系统),我收到以下错误消息:

static import only from classes and interfaces

建议不允许静态导入公共静态字段。我应该寻找什么来帮助诊断这个问题?我该如何解决?

更新: 根据@Ted 的要求,引用文件中的常量声明:

public static final String NULL = "<NULL>";

和引用文件中的(bowdlerized)引用:

import static my.path.MyClass.NULL;
4

4 回答 4

22

我的猜测是 Eclipse 和 buildr 使用不同的 Java 编译器版本或不同的编译器标志。Java 7 编译器中存在一个错误(错误 ID:715906),当您静态导入特定字段时会生成此错误。解决方法是使用通配符静态导入。所以而不是:

import static pkg.Class.staticField;

做这个:

import static pkg.Class.*;
于 2012-08-02T16:52:29.740 回答
11

迟到的答案,但我刚刚遇到了类似的问题并想通了。我会发布以防万一它可以帮助找到此页面的其他人...

在大合并和重构之后,我不小心将测试类放入 src/main/java 而不是 src/test/java 时,我遇到了类似的错误。由于 JUnit 依赖项是 scope=tests,因此它在纯 maven 中不起作用。也许你有同样的问题

于 2013-11-13T17:25:49.223 回答
6

我也有这个错误,我的问题原来是我的测试源文件中一个 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;(不知道我是如何设法把它放在那里的),现在一切正常。

于 2018-11-14T19:03:54.790 回答
1

我不小心将test目录设置为源。并且测试源被视为源文件。

sourceSets.main.java.srcDirs 'src'

| -- 源代码
  | -- 主要
  | - 测试

使固定:

sourceSets.main.java.srcDirs 'src/main'
于 2018-08-19T08:29:15.783 回答