2016-09-09 30 views
8

ローカルで「mvn clean install」を使用してデプロイするとうまくいく春の起動アプリケーションがありますが、Jenkinから戦争が生成されると、次のエラーが発生します。Jackson Databindクラスパスの問題

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) 

私はちょうど越えて比較し、私はコンパイルするために使用されているJDKのマイナーバージョンを除くすべての差分を参照してくださいいけないを使用して2 warファイルを比較してみました。

私は地元の戦争のO/P

find . -type f -name '*.jar' -print0 | xargs -0 -I '{}' sh -c 'jar tf {} | grep SerializationConfig.class && echo {}' 

、以下のコマンドの出力がある

、私の地元のビルドにし、ジェンキンビルドでSerializationConfig.classを検索してみました: -

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 

ジェンキン戦争のO/P: -

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 

基本的には、次のように私は

@Inject 
    private ObjectMapper objectMapper; 

わからない、私のTestRestConfigurationクラスでObjectMapperを注入し、なぜジェンキンを介して生成されたwarファイルが問題を引き起こしています。

これについての助けに感謝します。

答えて

7

2つの異なる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 

私が最初にあなたがジャクソン・データバインド-2.7.3.jarまたはジャージー全て-2.18.jarのいずれかに依存しているように、あなたの依存関係をバック削り取っしようと、両方ではありません。あなたのアプリケーションがどちらか一方で動作するならば、私はこれがあなたの問題を解決すると思う(私はSpringの "No unique bean of type ...が定義されている"というメッセージを期待しているかもしれないと認めているが、あなたの投稿に)。

とにかく私が正しいとすれば、あなたのローカル環境では、クラスロードの成果とジェンキンスによって生成された成果物がサーバー上に展開されるのに対して、あなたの提供しているライブラリを調べて、あなたのクラスの読み込み順序がどんな順番であるのかを理解したいと思うかもしれません。

ジャクソンのSerializationConfigクラスのsource codeで覗く、私は2つの異なったjarファイル内のクラスが実際に同一でない場合は、物事が面白くする可能性がある、次のことを見つける。..

private static final long serialVersionUID = 1 

それがお役に立てば幸いです。がんばろう!

EDIT 1:

のペアを設定するには面白いかもしれませんTomcatやJettyのようないくつかの組み込みサーバとのいわゆる「脂肪のjar」ファイルを生成するビルドします。あなたがジェンキンズで生産されたものとローカルに生産されたものの行動を比較すると、そのことから何かを学ぶかもしれません。あなたは同じ問題を抱えていますか?fat jarファイルを使用すると、既存の(あらかじめ設定された変更可能な)コンテナにデプロイする場合よりも、デプロイされた環境をより明示的に制御できます。

EDIT 2:ご使用の環境の違いからヘルプフィギュアを行うには可能性があります物事の

カップル..

mvn dependency:tree 

か、あなたは多くの忍耐を持っている場合

mvn -X 
2

はありますジェンキンスがビルドをクリーンアップする、つまり、 "mvn clean install"と呼ばれ、 "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> 
関連する問題