slf4j重複引用造成問題和Dependency Scopes

slf4j重複引用造成問題和Dependency Scopes

這篇介紹slf4j重複引用造成問題和Dependency Scopes。

遇到的問題

1
2
org.slf4j在Maven已定義一個,但另外引用的jar底下也有使用不同版本的org.slf4j
造成有時log都寫到catalina.out (看引用的順序決定

解決辦法

1
2
3
4
5
6
7
8
9
保留原本org.slf4j在Maven的定義
在pom.xml多使用
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
<scope>provided</scope>
</dependency>
並將scope指定成provided

Dependency Scopes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1、 compile  (編譯)
此為預設值,表示此jar是所有階段需要的。 部署時將一起被打包到jar/war裡面。

2、 test (測試)
表示此jar檔只有在測試時,才需要使用。如 junit jar 等。
部署時將不會打包到jar/war裡面。

3、 runtime (運行)
表示此jar檔只有在運行時,才需要使用。如jdbc jar等。

4、 provided (已提供)
當運行時,表示此jar檔期望由JDK、Tomcat及jboss等來提供。如 servlet.jar、jsp-api.jar 等。
部署時將不會打包到jar/war裡面。

5、 system (系統)
表示此jar檔有系統提供。跟provided 相似,這是以外部JAR檔的形式提供。
而在maven repository 是無法找到它的。
需指定位置,配合 systemPath 來使用。