Классы, сгенерированные QueryDSL/APT и статическим импортом
Очевидно, я не могу использовать классы, созданные с помощью APT, в модульных тестах, использующих статический импорт. (Пример проекта Maven можно скачать здесь)
Если следующий образец класса
import com.mysema.query.jpa.impl.JPAQuery;
public class UserStore {
public void something() {
new JPAQuery(null).from(QUser.user).list(QUser.user.login);
}
}
изменено на
import static something.QUser.user;
import com.mysema.query.jpa.impl.JPAQuery;
public class UserStore {
public void something() {
new JPAQuery(null).from(user).list(user.login);
}
}
процесс сборки (чистая установка mvn) завершится неудачно:
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.466s
[INFO] Finished at: Wed May 30 16:05:40 CEST 2012
[INFO] Final Memory: 18M/150M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project apt-bug: Compilation failure: Compilation failure:
...
Означает ли это, что я не могу использовать эти сгенерированные классы со статическим импортом в модульных тестах или есть проблема в файлах pom.xml?
РЕДАКТИРОВАТЬ:
POM-файл: http://pastebin.com/gvycZmXD
2 ответа
Это может быть связано https://github.com/mysema/querydsl/issues/158
У меня еще не было времени расследовать это.
редактировать
По-видимому, это было исправлено в Java 7
Я предполагаю, что проблема находится в статическом импорте, потому что в сообщениях об ошибках говорится, что импортированный QUser.user не является ни классом, ни интерфейсом. Похоже, что пользователь - это просто атрибут класса QUser, который объясняет сообщение об ошибке.
/home/xxx/apt-bug/src/main/java/something/UserStore.java:3: cannot find symbol
symbol : class QUser
location: package something
import static something.QUser.user;
^
/home/xxx/apt-bug/src/main/java/something/UserStore.java:3: static import only from classes and interfaces
import static something.QUser.user;
^