Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson数据绑定类路径问题_Java_Maven_Jenkins - Fatal编程技术网

Java Jackson数据绑定类路径问题

Java Jackson数据绑定类路径问题,java,maven,jenkins,Java,Maven,Jenkins,我有一个spring boot应用程序,当我在本地使用“mvn clean install”进行部署时,它运行良好,但是当war通过Jenkin生成时,它抛出以下错误 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectMapper' defined in class path resource [com/test/common/TestR

我有一个spring boot应用程序,当我在本地使用“mvn clean install”进行部署时,它运行良好,但是当war通过Jenkin生成时,它抛出以下错误

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectMapper' defined in class path resource [com/test/common/TestRestConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.fasterxml.jackson.databind.ObjectMapper]: Factory method 'objectMapper' threw exception; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.fasterxml.jackson.databind.SerializationConfig
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
        ... 62 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.fasterxml.jackson.databind.ObjectMapper]: Factory method 'objectMapper' threw exception; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.fasterxml.jackson.databind.SerializationConfig
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
        ... 74 common frames omitted
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.fasterxml.jackson.databind.SerializationConfig
        at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:535)
        at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:452)
本地战争O/p:-

com/fasterxml/jackson/databind/SerializationConfig.class
./jackson-databind-2.7.3.jar
org/codehaus/jackson/map/SerializationConfig.class
./jackson-mapper-asl-1.9.13.jar
com/fasterxml/jackson/databind/SerializationConfig.class
./jersey-all-2.18.jar
com/fasterxml/jackson/databind/SerializationConfig.class
./jersey-all-2.18.jar
org/codehaus/jackson/map/SerializationConfig.class
./jackson-mapper-asl-1.9.13.jar
com/fasterxml/jackson/databind/SerializationConfig.class
./jackson-databind-2.7.3.jar
詹金战争O/p:-

com/fasterxml/jackson/databind/SerializationConfig.class
./jackson-databind-2.7.3.jar
org/codehaus/jackson/map/SerializationConfig.class
./jackson-mapper-asl-1.9.13.jar
com/fasterxml/jackson/databind/SerializationConfig.class
./jersey-all-2.18.jar
com/fasterxml/jackson/databind/SerializationConfig.class
./jersey-all-2.18.jar
org/codehaus/jackson/map/SerializationConfig.class
./jackson-mapper-asl-1.9.13.jar
com/fasterxml/jackson/databind/SerializationConfig.class
./jackson-databind-2.7.3.jar
基本上,我在TestRestConfiguration类中注入ObjectMapper,如下所示

@Inject
    private ObjectMapper objectMapper;
不确定,为什么通过Jenkin生成的war文件会引起问题


在此方面的任何帮助都将不胜感激。

您似乎正在从两个不同的jar文件依赖项中提取相同的类(SerializationConfig)。从您的问题中可以明显看出,com.fasterxml.jackson.databind(在堆栈跟踪中引用)中的一个可以在jackson-databind-2.7.3.jar或jersey-all-2.18.jar中找到:

com/fasterxml/jackson/databind/SerializationConfig.class
./jackson-databind-2.7.3.jar
org/codehaus/jackson/map/SerializationConfig.class
./jackson-mapper-asl-1.9.13.jar
com/fasterxml/jackson/databind/SerializationConfig.class
./jersey-all-2.18.jar
我会首先尝试减少依赖项,这样您就可以依赖jackson-databind-2.7.3.jar或jersey-all-2.18.jar,但不能同时依赖两者。如果您的应用程序将使用其中一个,我怀疑这将解决您的问题(尽管我承认我可能会看到Spring的“没有定义类型的唯一bean”,我在您的帖子中没有注意到)

无论如何,如果我是正确的,那么您看到的是类加载的工件在本地环境中发生的情况与Jenkins生成并部署在服务器上的工件中发生的情况不同(这里增加了复杂性——您可能希望仔细检查服务器上提供的任何LIB,并准确了解类加载的顺序——我知道这并不有趣)

查看Jackson的SerializationConfig类,我发现以下内容,如果两个不同jar文件中的类实际上不完全相同,这可能会让事情变得有趣

private static final long serialVersionUID = 1
希望有帮助。祝你好运

编辑1:

建立一对生成所谓“胖罐子”的构建可能会很有趣使用一些嵌入式服务器(如Tomcat或Jetty)创建的文件。如果您比较本地生成的文件与Jenkins上生成的文件的行为,您可能会从中学到一些东西。您是否看到同样的问题?使用fat jar文件,您对部署的环境的控制比部署到现有服务器上时更明确(和预配置的、可更改的)容器

编辑2:

您可以做几件事来帮助您找出环境差异

mvn dependency:tree
或者,如果你很有耐心的话

mvn -X

你确定Jenkins清除了构建,即它调用“mvncleaninstall”,而不仅仅是“mvn install”?一旦我在本地使用了“mvn clean install”,异常消失,应用程序成功启动

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.7.4</version>
    </dependency>

    <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.4</version>
    </dependency>

    <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.4</version>
    </dependency>

com.fasterxml.jackson.core
杰克逊数据绑定
2.7.4
com.fasterxml.jackson.core
杰克逊核心
2.7.4
com.fasterxml.jackson.core
杰克逊注释
2.7.4

如果您想查看有关依赖项的更多信息以及跳过或包含特定依赖项的原因,请添加详细标志:mvn dependency:tree-Dverbose