解決Maven的jar包沖突問題


1. 問題描述

 

  控制台說:無法將 com.zpx.servlet.MyServlet 識別為 javax.servlet.Servlet

 

2. 問題原因

  Maven的一個核心功能就是一鍵構建,所以Maven將不再使用本地安裝的Tomcat,而是使用Maven自身集成的Tomcat插件對項目進行構建。手動導入的 jar 包和本地安裝的Tomcat中的 jar 包名字完全一樣,卻又是兩個包,造成了 jar 包沖突異常。

 

3. 解決方法

  Maven為 jar 包坐標提供了 <scope> 標簽,指明了 jar 包的作用域,限制了 jar 包的使用范圍,解決了 jar 包沖突。 

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
</dependencies>

 

4. 要點補充

  Maven的 <scope> 標簽有五個屬性,他們的作用域分別是:

    compile:默認屬性,對於 編譯、測試、運行 三個狀態都有效

    test:僅對 測試 狀態有效(例如:junit)

    provided:僅對 編譯和測試 狀態有效(例如:servlet-api、jsp-api)

    runtime:僅對 測試和運行 裝填有效(例如:JDBC)

    system:僅對 編譯和測試 狀態有效,但是需要顯式提供本地 jar 包路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM