Java >> Java tutorial >  >> Tag >> maven

Kan ikke fuldføre scanningen for annoteringer til webapplikationen [/app] på grund af en StackOverflowError

I mit tilfælde org.bouncycastle.asn1.DEREncodableVector klasse, som forårsagede den cykliske afhængighed, blev serveret af to krukker i klassestien.

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

Udelukkede den uønskede jar(bcprov-jdk16-1.45.jar), og det fungerede godt


Du har en cyklisk afhængighed. org.bouncycastle.asn1.ASN1EncodableVector afhænger af org.bouncycastle.asn1.DEREncodableVector hvilket afhænger tilbage af org.bouncycastle.asn1.ASN1EncodableVector hvilken ... . Dette er en uendelig cyklus, så du får en StackOverflowException .

Hvis du har Maven-pluginnet installeret i Eclipse, skal du se på Afhængighedshierarkiet og se efter disse klasser. Jeg fandt en person med et lignende problem her, han løste det ved at se på afhængighedstræet og derefter tilføje en udelukkelse for at bryde den cykliske afhængighed.


Jeg stødte lige på dette problem. Andre giver allerede svaret på dette problem. Jeg ville sige noget andet.

Jeg gætter på, at du bruger maven-shade-plugin eller noget lignende, der pakker alle afhængigheder ind i en Uber-krukke, ikke?

Du kan se fra grepcode at bcprov-jdk15on:1.52 definerer DEREncodableVector som

public class DEREncodableVector extends ASN1EncodableVector

Mens bcprov-jdk14:1.38 definerer ASN1EncodableVector som

public class ASN1EncodableVector extends DEREncodableVector

Og med maven-shade-plugin , ville den tilfældigt vælge en klasse, når to eller flere samme klasser eksisterer. Og når den vælger denne kombination, sker der cyklisk afhængighed. Hvis den vælger andre kombinationer, fungerer din applikation muligvis fint. Den matcher det, du beskrev

Men de fleste gange virker det ikke.

Det er en sandsynlighedsbegivenhed.


Java tag