Hadoopの統合SpringBootは、ジャーパッケージの競合の問題を解決するために表示されたら
2020年1月3日(金晴れた日)
開発ツール:
IDEA 0.2019から2
のHadoop 2.9.2
Mavenの
SpringBoot 1.5.8
JDK 1.8
問題の説明
プロジェクトの要件と統合springbootのHadoopのシステムでは、簡単な個人用ファイルストレージシステムを完了するために、次のような効果がある。
しかし、統合、およびspringbootのHadoopの、プロジェクトの開始、与えられた:
java.lang.IllegalStateException:検出log4jのオーバーSLF4Jの両方上SLF4J-log4j12.jar .jarファイルとバウンドにStackOverflowErrorを先取り、クラスパスを。
原因
ログのエラーメッセージによって、それはおそらく、JARパッケージの競合を引き起こしたことになります。以下のような複数のSLF4J-log4j12.jar。
:その後、関連するブログへのアクセスを通じて、一つの理由があることが判明し
たjarのHadoop-commonパッケージ、log4jの、SLF4J-log4j12、JAXBでのサーブレットAPI -impl 4つの関連の依存
と「Hadoopのクライアントは、 "ジャーパッケージ"サーブレットAPI、log4jの、SLF4J -log4j12、JSR305、JSP-API」 の依存関係の5
のtomcat-埋め込む-碧玉と依存性の競合の原因。
ブロガーは、log4jのを使用して、独自のプロジェクトを持っているので、場合によっては、log4jの、紳士淑女のプロジェクトに依存するすべてのそれらの除去する必要性は、これらの依存関係を削除してください必要はありません。
ソリューション
過剰に関連する依存性を除去するための瓶で対立。
<!--hadoop公共依赖-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--hadoop client 依赖-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</exclusion>
<exclusion>
<artifactId>jsp-api</artifactId>
<groupId>javax.servlet.jsp</groupId>
</exclusion>
</exclusions>
</dependency>
フォローアップの質問:
解決するために、上記の手順に従って、プロジェクトを開始できます。しかし、ページがアクセスされたときに、エラーが再び。
javax.el.ExpressionFactory.newInstance()Ljavax / EL / ExpressionFactory
; 間違った種類は、大まかに分析することができ、理由は解決ページの欠如です。だから、もう一度、関連するブログポストを参照してください、我々はまだJSPの輸入依存度を見つける必要があります
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
これまでのところ、このプロジェクトは、通常の訪問することができます。