Niedawno podczas scalania nowych testów jednostkowych do mojej gałęzi roboczej zacząłem widzieć ten błąd:
Exception (java.lang.NoSuchMethodError) encountered during startup: com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService()Lcom/google/common/util/concurrent/ListeningExecutorService;
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService()Lcom/google/common/util/concurrent/ListeningExecutorService;
at org.apache.cassandra.index.SecondaryIndexManager.<clinit>(SecondaryIndexManager.java:125)
at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:405)
at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:623)
at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:597)
at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:588)
at org.apache.cassandra.db.Keyspace.initCf(Keyspace.java:417)
at org.apache.cassandra.db.Keyspace.<init>(Keyspace.java:324)
at org.apache.cassandra.db.Keyspace.open(Keyspace.java:129)
at org.apache.cassandra.db.Keyspace.open(Keyspace.java:106)
at org.apache.cassandra.db.SystemKeyspace.checkHealth(SystemKeyspace.java:935)
at org.apache.cassandra.service.StartupChecks$10.execute(StartupChecks.java:422)
at org.apache.cassandra.service.StartupChecks.verify(StartupChecks.java:125)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:200)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:602)
at org.cassandraunit.utils.EmbeddedCassandraServerHelper.lambda$startEmbeddedCassandra$1(EmbeddedCassandraServerHelper.java:150)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Oto obraźliwa klasa testowa:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { MyApplication.class })
@TestExecutionListeners(listeners = { CassandraUnitDependencyInjectionTestExecutionListener.class, DependencyInjectionTestExecutionListener.class })
@EmbeddedCassandra(timeout = 100000)
@CassandraDataSet("indexer.cql")
@ActiveProfiles("test")
public class MyDaoTest {
@Autowired
MyDao myDao;
@Test ...
}
Udało mi się sprawdzić, czy testy jednostkowe przebiegają zgodnie z zapisem, uruchamiając mvn test -DskipMutation
, więc wydaje się, że jest to problem podczas używania wbudowanej Cassandry w połączeniu z testami mutacji, ale nie jestem zbyt zaznajomiony z żadną z tych technologii.
Czy ktoś kiedykolwiek napotkał ten problem i czy mógłbyś podać kilka wskazówek dotyczących rozwiązania tego problemu (bez wyłączania testów mutacji)?
1 odpowiedź
Najbardziej prawdopodobną przyczyną tego błędu jest to, że masz wersję Guava poniżej 18.0, gdzie MoreExecutors.newDirectExecutor - jest wymagana dla Cassandry. Uruchom mvn dependency:tree
w swoim projekcie i sprawdź wersje Guava, które masz w swoim projekcie. Jeśli którakolwiek z zależności jest zależna od starszej wersji Guavy, spróbuj wykluczyć Guawę z tej zależności (chociaż może to zepsuć twój kod - w tym przypadku spróbuj znaleźć zależność, która nie używa tej starej wersji Guawy).
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].
mvn dependency:tree -Dincludes=com.google.guava
zwraca tylko jedną zależność,\- com.google.guava:guava:jar:18.0:compile
.NoSuchMethod
wtedy