Zaledwie kilka dni temu spotkałem się z tym samym pytaniem, co twoje. Cały kod działa dobrze na mojej lokalnej maszynie, ale okazuje się, że wystąpił błąd (noclassdeffound & initialize). Dlatego publikuję swoje rozwiązanie, ale nie wiem dlaczego, po prostu przedstawiam możliwość. Mam nadzieję, że ktoś znajomy to wyjaśni. @ John Vint Najpierw pokażę Ci mój problem. Mój kod ma zarówno zmienną statyczną, jak i blok statyczny. Kiedy pierwszy raz spotkałem się z tym problemem, wypróbowałem rozwiązanie Johna Vinta i próbowałem złapać wyjątek. Jednak nic nie złapałem. Więc pomyślałem, że to dlatego, że zmienna statyczna (ale teraz wiem, że to to samo) i nadal nic nie znalazłem. Więc próbuję znaleźć różnicę między maszyną z systemem Linux a moim komputerem. Potem odkryłem, że ten problem występuje tylko wtedy, gdy kilka wątków działa w jednym procesie (nawiasem mówiąc, maszyna linux ma podwójne rdzenie i podwójne procesy). Oznacza to, że jeśli istnieją dwa zadania (oba używają kodu, który ma statyczny blok lub zmienne) uruchamiane w tym samym procesie, to idzie źle, ale jeśli działają w różnych procesach, oba są w porządku. W maszynie Linux używam
mvn -U clean test -Dtest=path
aby uruchomić zadanie, a ponieważ moja zmienna statyczna ma na celu uruchomienie kontenera (lub może zainicjujesz nowy program ładujący klasy), więc pozostanie on do zatrzymania jvm, a jvm zatrzyma się tylko wtedy, gdy zatrzymają się wszystkie zadania w jednym procesie. Każde zadanie uruchamia nowy kontener (lub classloader) i wprowadza zamieszanie w jvm. W rezultacie występuje błąd. Jak więc to rozwiązać? Moim rozwiązaniem jest dodanie nowego polecenia do polecenia maven i umieszczenie każdego zadania w tym samym kontenerze.
-Dxxx.version=xxxxx #sorry can't post more
Być może już rozwiązałeś ten problem, ale nadal masz nadzieję, że pomoże on innym, którzy napotykają ten sam problem.