Статический импорт только из классов и интерфейсов
Мой код компилируется в 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'