Статический импорт только из классов и интерфейсов

Мой код компилируется в Eclipse, но когда я пытаюсь скомпилировать из командной строки (через нашу систему на основе ruby), я получаю это сообщение об ошибке:

static import only from classes and interfaces

Предполагается, что статический импорт открытых статических полей не разрешен. Что я должен искать, чтобы помочь диагностировать эту проблему? Как я могу это исправить?

Update: за запрос @Ted, объявление константы в ссылочном файле:

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

и (бокслеризованная) ссылка в файле ссылки:

import static my.path.MyClass.NULL;

Ответ 1

Я предполагаю, что Eclipse и buildr используют либо разные версии компилятора Java, либо разные флаги компилятора. В компиляторе Java 7 есть ошибка (идентификатор ошибки: 715906), которая генерирует эту ошибку при статическом импорте определенных полей. Обходной путь - использовать статический импорт с подстановочными знаками. Так что вместо:

import static pkg.Class.staticField;

сделай это:

import static pkg.Class.*;

Ответ 2

Поздний ответ, но я только что получил аналогичную проблему и понял это. Я отправлю сообщение, если это поможет кому-то еще, кто находит эту страницу...

Я получил аналогичную ошибку, когда после большого слияния и рефакторирования я случайно помещал тестовый класс в src/main/java вместо src/test/java. Поскольку зависимость JUnit была scope = tests, она не работала в чистом maven. Возможно, у вас такая же проблема.

Ответ 3

У меня также была эта ошибка, и моя проблема оказалась в странном статическом импорте пакета 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; (понятия не имею, как мне это удалось в первую очередь), и теперь все работает.

Ответ 4

Я случайно установил test каталог в качестве источника. И тестовые источники рассматривались как исходные файлы.

sourceSets.main.java.srcDirs 'src'

| - источник
| -- главный
| -- тестовое задание

Fix:

sourceSets.main.java.srcDirs 'src/main'