java - mvn spring-boot :run results in java. lang.LinkageError:违反加载器约束

标签 java spring spring-boot maven

我有一个运行良好的项目,我将它作为可执行 JAR 运行。 但是,当我使用 mvn spring-boot:run 时,出现以下错误:

 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"
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    at java.lang.Class.getDeclaredFields(Class.java:1916)
    at com.fasterxml.jackson.databind.util.ClassUtil.getDeclaredFields(ClassUtil.java:1055)
    at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector._findFields(AnnotatedFieldCollector.java:66)
    at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collect(AnnotatedFieldCollector.java:41)
    at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collectFields(AnnotatedFieldCollector.java:36)
    at com.fasterxml.jackson.databind.introspect.AnnotatedClass._fields(AnnotatedClass.java:349)
    at com.fasterxml.jackson.databind.introspect.AnnotatedClass.fields(AnnotatedClass.java:321)
    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addFields(POJOPropertiesCollector.java:379)
    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:308)
    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getJsonValueAccessor(POJOPropertiesCollector.java:196)
    at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findJsonValueAccessor(BasicBeanDescription.java:251)
    at com.fasterxml.jackson.databind.ser.BasicSerializerFactory.findSerializerByAnnotations(BasicSerializerFactory.java:346)
    at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:216)
    at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:165)
    at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1389)
    at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1336)
    at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:510)
    at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:713)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:308)
    at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3905)
    at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3219)
    at lambda$commit$0(EventStoreService.java:120)
    at java.util.concurrent.ConcurrentHashMap$EntrySpliterator.forEachRemaining(ConcurrentHashMap.java:3606)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)

我无法共享该代码,因为它是专有的。 我确实有两次相同的库 jar 依赖项(1 次直接),1 次通过另一个依赖项。 我添加了排除项,但这似乎没有任何作用。

奇怪的是,当我直接运行 jar 时,应用程序运行良好。

更新

我还注意到以下内容......我认为这就是问题所在:

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

我将尝试禁用 devtools 类加载器并重新加载。

最佳答案

问题出在 spring 开发工具上。 我必须删除它,并从任何其他依赖项中排除它。

我通过首先运行以下命令并查看它的位置来删除它:

dependency:tree -Dverbose

接下来,我注释掉了依赖项或添加了以下排除:

<exclusion>  <!-- declare the exclusion here -->
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                </exclusion>

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

TomcatEmbeddedWebappClassLoader
  context: ROOT
  delegate: true
----------> Parent Classloader:
java.net.URLClassLoader@44052821

关于java - mvn spring-boot :run results in java. lang.LinkageError:违反加载器约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61576871/

相关文章:

java - 如何捕获 401,403 错误并响应成功 200

java - javax.persistence.EntityManager 线程安全吗

spring - 为什么使用 registerSingleton() 注册的 spring bean 在 getBeanDefinitionNames() 中不可见?

spring - 在 Spring Boot 应用程序中将多个调用包装在一个事务中?

java - 如何序列化包含 LAZY 关联的 json

java - 异常已捕获错误

java - 如何完全删除/禁用Web浏览器上的Spring boot Logo ?

testing - 使用 Spring LDAP 嵌入式服务器运行测试时“地址已在使用”

java - 相同的方法调用,LinkedList、Queue 与 List 中的不同结果

java - 我需要担心与 tomcat spring bean 的并发性吗?