`mvn spring-boot:run` 导致了 `java.lang.LinkageError: loader constraint violation` 错误。

huangapple 未分类评论60阅读模式
英文:

mvn spring-boot:run results in java.lang.LinkageError: loader constraint violation

问题

我有一个项目,将其作为可执行的JAR运行时正常运行。
然而,当我使用 mvn spring-boot:run 时,我遇到以下错误:

  1. 在线程 "Thread-129" 中的异常 java.lang.LinkageError: loader constraint violation: loader (instance of sun/misc/Launcher$AppClassLoader) previously initiated loading for a different type with name "org/test/DefaultIdAndText"
  2. at java.lang.ClassLoader.defineClass1(Native Method)
  3. ...

我无法分享代码,因为它是私有的。
我确实有相同的库JAR依赖项两次(直接1次),并且还有1次通过另一个依赖项。
我尝试过添加排除项,但似乎没有任何作用。

奇怪的是,当我直接运行JAR时,应用程序运行正常。

更新

我还注意到了以下情况... 我认为这就是问题所在:

  1. TomcatEmbeddedWebappClassLoader
  2. context: ROOT
  3. delegate: true
  4. -----------> Parent Classloader:
  5. org.springframework.boot.devtools.restart.classloader.RestartClassLoader@79fe98a7

我将尝试禁用开发工具的类加载器和重新加载。

英文:

I have a project that runs fine with I run it as an executable JAR.
However, when I use mvn spring-boot:run I get the following error:

  1. exception in thread "Thread-129" java.lang.LinkageError: loader constraint violation: loader (instance of sun/misc/Launcher$AppClassLoader) previously initiated loading for a different type with name "org/test/DefaultIdAndText"
  2. at java.lang.ClassLoader.defineClass1(Native Method)
  3. at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
  4. at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  5. at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
  6. at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
  7. at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
  8. at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
  9. at java.security.AccessController.doPrivileged(Native Method)
  10. at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
  11. at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  12. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
  13. at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  14. at java.lang.Class.getDeclaredFields0(Native Method)
  15. at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
  16. at java.lang.Class.getDeclaredFields(Class.java:1916)
  17. at com.fasterxml.jackson.databind.util.ClassUtil.getDeclaredFields(ClassUtil.java:1055)
  18. at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector._findFields(AnnotatedFieldCollector.java:66)
  19. at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collect(AnnotatedFieldCollector.java:41)
  20. at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collectFields(AnnotatedFieldCollector.java:36)
  21. at com.fasterxml.jackson.databind.introspect.AnnotatedClass._fields(AnnotatedClass.java:349)
  22. at com.fasterxml.jackson.databind.introspect.AnnotatedClass.fields(AnnotatedClass.java:321)
  23. at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addFields(POJOPropertiesCollector.java:379)
  24. at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:308)
  25. at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getJsonValueAccessor(POJOPropertiesCollector.java:196)
  26. at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findJsonValueAccessor(BasicBeanDescription.java:251)
  27. at com.fasterxml.jackson.databind.ser.BasicSerializerFactory.findSerializerByAnnotations(BasicSerializerFactory.java:346)
  28. at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:216)
  29. at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:165)
  30. at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1389)
  31. at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1336)
  32. at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:510)
  33. at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:713)
  34. at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:308)
  35. at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3905)
  36. at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3219)
  37. at lambda$commit$0(EventStoreService.java:120)
  38. at java.util.concurrent.ConcurrentHashMap$EntrySpliterator.forEachRemaining(ConcurrentHashMap.java:3606)
  39. at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)

I can't share the code because it is proprietary.
I do have the same library jar dependency two times (1 directly), and 1 through another dependency.
I added an exclusion but this doesn't seem to do anything.

The strange thing is that the application runs fine, when I run the jar directly.

Update

I also noticed the following... and I think it is the problem:

  1. TomcatEmbeddedWebappClassLoader
  2. context: ROOT
  3. delegate: true
  4. ----------> Parent Classloader:
  5. org.springframework.boot.devtools.restart.classloader.RestartClassLoader@79fe98a7

I will try to disable the devtools classloader and reloading.

答案1

得分: 1

问题出在 Spring 开发工具上。
我不得不将它移除,并且还要从任何其他依赖项中排除掉它。

我首先通过运行以下命令并查看其位置来将其移除:

  1. dependency:tree -Dverbose

然后,我要么将依赖项注释掉,要么添加以下排除项:

  1. <exclusion>
  2. <!-- 在此处声明排除项 -->
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-devtools</artifactId>
  5. </exclusion>

移除后,错误消失了,现在我看到:

  1. TomcatEmbeddedWebappClassLoader
  2. context: ROOT
  3. delegate: true
  4. ----------> Parent Classloader:
  5. java.net.URLClassLoader@44052821
英文:

The problem was spring dev tools.
I had to remove it, and also remove it with an exclusion from any other dependencies.

I removed it by first running the following and seeing where it was located:

  1. dependency:tree -Dverbose

And following I either commented out the dependency or added the following exclusion:

  1. &lt;exclusion&gt; &lt;!-- declare the exclusion here --&gt;
  2. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  3. &lt;artifactId&gt;spring-boot-devtools&lt;/artifactId&gt;
  4. &lt;/exclusion&gt;

After removing it, the error went away and I now see:

  1. TomcatEmbeddedWebappClassLoader
  2. context: ROOT
  3. delegate: true
  4. ----------&gt; Parent Classloader:
  5. java.net.URLClassLoader@44052821

huangapple
  • 本文由 发表于 2020年5月3日 23:20:18
  • 转载请务必保留本文链接:https://java.coder-hub.com/61576871.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定