2013-07-11 12 views
28

Tworzę aplikację Spring MVC przy użyciu STS (wtyczka eclipse) i maven.Nie można ukończyć skanowania w poszukiwaniu adnotacji dla aplikacji internetowej [/ aplikacji] z powodu StackOverflowError

Aby utworzyć projekt, wykonałem kreatora STS dla nowego "Wiosennego projektu MVC". Następnie dodałem kilka zależności do innych projektów i bibliotek.

Jednak kiedy jestem teraz próbuje wdrożyć projekt do zintegrowanego serwera vFabric STS, czasami uzyskać wyjątek:

SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/wsa]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    ... 
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/app] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector] 
    at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2179) 
    ... 

przy wydawaniu „Maven czyste”, wraz z „Maven zainstalować "i restart serwera, wyjątek czasami nie jest generowany, a aplikacja działa poprawnie. Jednak przez większość czasu to nie działa.

Domyślam się, że nie ma potrzeby skanowania zależności bouncycastle dla adnotacji.
Czy mogę w jakiś sposób wyłączyć skanowanie niektórych słoików?

Próbowałem już dodać metadata-complete="true" do mojego web.xml i zwiększając rozmiar stosu bez rezultatu.

Co mogę zrobić, aby to naprawić?

+1

* Możliwe przyczyny źródłowe to zbyt niskie ustawienie dla -Xss i nielegalne cykliczne zależności dziedziczenia. * Domyślam się, że wiadomość już od Ciebie odpowiada. –

+0

Jak już powiedziałem: już zwiększyłem rozmiar stosu. I nie mogę zmienić dziedziczenia niektórych zewnętrznych zależności. Potrzebuję tylko sposobu, aby wykluczyć je ze skanowania. – Matthias

+0

Gdzie podnosiłeś rozmiar stosu? –

Odpowiedz

0

Przełączyłem się na Tomcat w celach programistycznych - jak na razie działa bez żadnych modyfikacji.

16

Masz cykliczną zależność. org.bouncycastle.asn1.ASN1EncodableVector zależy od org.bouncycastle.asn1.DEREncodableVector, która zależy od wersji org.bouncycastle.asn1.ASN1EncodableVector, która .... To jest nieskończony cykl, więc dostajesz StackOverflowException.

Jeśli masz wtyczkę Mavena zainstalowaną w Eclipse, spójrz na Hierarchię zależności i poszukaj tych klas. Znalazłem kogoś z podobnym problemem here, rozwiązał go, patrząc na drzewo zależności, a następnie dodając wykluczenie, aby przerwać cykliczną zależność.

+0

Dziękuję za odpowiedź. Drzewo zależności wygląda całkiem normalnie dla tych bibliotek (nie mogę rozpoznać żadnej cyklicznej zależności): '\ - org.apache.activemq: activemq-all: jar: 5.8.0: compile \ - org.apache.activemq : activemq-amqp: jar: 5.8.0: kompilacja \ - org.apache.qpid: proton-jms: jar: 0.3.0-fuse-2: kompilacja \ - org.apache.qpid: proton: jar: 0.3 0,0-bezpiecznik-2: skompilować \ - org.bouncycastle: bcpkix-jdk15on: słoik: 1,47: skompilować \ - org.bouncycastle: bcprov-jdk15on: słoik: 1,47: compile' powinienem spróbować z wyjątkiem biblioteki maven za pomocą pom? Czy tylko z wdrożenia? – Matthias

+0

Widzę, że masz dwie zależności 'org.bouncycastle *'. Czy możesz sprawdzić, czy jedno z nich zależy od drugiego? Spróbuj usunąć jedną z nich i sprawdź, czy Twój kod nadal działa. Jeśli jeden z nich zależy od drugiego, prawdopodobnie sam pobierze drugi. – g00glen00b

+0

Problem polega na tym, że są to tylko pośrednie zależności, tj.są wymagane przez wymagany projekt, którego nie mogę zmienić. W ten sposób dodałem grupę "org.bouncycastle"/artefact "bcprov-jdk16" do listy "wyjątków" tej zależności w moim pliku pom. Jednak wciąż nie ma szczęścia. – Matthias

39

W moim przypadku klasa org.bouncycastle.asn1.DEREncodableVector, która spowodowała cykliczną zależność, została obsłużona przez dwa słoiki w ścieżce klasy.

bcprov-jdk15on-1.47.jar i bcprov-jdk16-1.45.jar

Wyłączone niechciane słoik (bcprov-jdk16-1.45.jar) i to działało dobrze

0

miałem ten sam problem usunąć wszelkie ślady BouncyCastle biblioteki w pliku buildConfig. Brak śladów w zależnościach lub wykluczeniach. Po prostu dodaj wtyczkę do crypto.2.0 i wszystko działa dobrze!

1

Miałem ten sam problem i naprawiłem go. Idź do pom i szukać BouncyCastle Powinieneś zobaczyć więcej niż jeden wykluczyć jednego z nich i należy go naprawić

0

podwoić również sprawdzić folder lib pod Tomcat aby upewnić się, że duplikat zależność nie jest tam obecny.

2

Właśnie napotkałem ten problem. Inni już dają odpowiedź na ten problem. Powiedziałbym coś jeszcze.

Domyślam się, że używasz maven-shade-plugin lub coś podobnego, co pakuje wszystkie zależności w słoik Uber, prawda?

Widać z grepcode że bcprov-jdk15on:1.52 definiuje DEREncodableVector jak

public class DEREncodableVector extends ASN1EncodableVector 

Podczas bcprov-jdk14:1.38 definiuje ASN1EncodableVector jak

public class ASN1EncodableVector extends DEREncodableVector 

I z maven-shade-plugin, to losowo wybrać klasę, gdy dwa lub więcej takie same zajęcia istnieć . A kiedy wybiera tę kombinację, następuje cykliczna zależność. Jeśli wybierze inne kombinacje, aplikacja może działać poprawnie. Pasuje do tego, co opisałeś:

Jednak przez większość czasu to nie działa.

To probabilistyczne wydarzenie.

+0

Należy zauważyć, że ten warunek może również powstać w zależności od 'pdfbox-app', która zawiera własną wersję gry Bouncy Castle. –

2

Zostało to dzieje się ze mną za pomocą

 <groupId>org.bouncycastle</groupId> 
     <artifactId>bcpkix-jdk15on</artifactId> 
     <version>1.54</version> 

uaktualnieniu że do

 <groupId>org.bouncycastle</groupId> 
     <artifactId>bcprov-jdk16</artifactId> 
     <version>1.46</version> 

i że wydaje się, że stała ona

0

Jeśli jest już wyłączone w konfiguracji kompilacji i błędów nadal istnieje, możesz spróbować wyczyścić katalog roboczy swojego projektu przed rozpoczęciem budowy.

maven clean 

-

grails clean 
0

miałem ten sam problem, ale z innego rozwiązania. Mój konflikt dotyczył bcprov-jdk15on-1.55.jar i tika-app-1.7.jar. Najwyraźniej tika zawiera dmuchany zamek, aw tym przypadku starszą wersję dmuchanego zamku, który powoduje konflikt.

Powiązane problemy