У меня очень странная ошибка при попытке вставить конструктор с помощью Guice. В конструкторе есть определенная линия:Ошибка внедрения в Strange Guice
@Inject
public RoundRobinAssigner(
... arguments
) {
...stuff
assignments = Sets.synchronizedNavigableSet(Sets.<CountingEntry<String>>newTreeSet());
}
Это не выполняется при впрыске со следующим.
1) Error injecting constructor, java.lang.NoSuchMethodError: com.google.common.collect.Sets.synchronizedNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;
at edu.harvard.econcs.turkserver.util.RoundRobinAssigner.<init>(RoundRobinAssigner.java:46)
at edu.harvard.econcs.turkserver.util.RoundRobinAssigner.class(RoundRobinAssigner.java:40)
while locating edu.harvard.econcs.turkserver.util.RoundRobinAssigner
Но если я удалю Sets.synchronizedNavigableSet()
обертывание, все инъекционные просто отлично.
@Inject
public RoundRobinAssigner(
... arguments
) {
...stuff
assignments = Sets.<CountingEntry<String>>newTreeSet();
}
Очевидно, что это субоптимально, поскольку я хочу использовать синхронизированный набор. Есть ли какая-то причина, по которой инструктор, получивший название Guice, будет вести себя иначе, чем обычный? Ни один из этих кодов не имеет проблем с компиляцией, и класс Sets
из guava тоже был загружен, поэтому я понятия не имею, что вызывает это.
Да, это действительно проблема. Два противоречивых заявления Гуавы в разных проектах «pom.xml». Eclipse использовал самую новую для компиляции, но запуск подчинялся действительным правилам Maven, вызывая ошибку. –