如何兩步解決maven依賴導入失敗的問題

解決maven依賴導入失敗

由於網絡問題,maven依賴經常會導入失敗,私服上的以來導入失敗概率低一些,maven中央倉庫上的依賴導入失敗的概率則相對較高,其實這個問題很容易解決,但是之前還是見到很多初學者對此不知道該如何解決,甚至有人在依賴導入失敗,進而導致項目無法正常運行時還不知道是項目依賴導入失敗,種種原因,我決定寫這篇文章,像大夥介紹一下我在解決這個問題是常用的兩招,基本上這兩招打完,99%的問題都解決瞭,至於剩下的1%,隻需要繼續重復這兩招,也能解決。

方案一

首先,一般安裝好maven後,網上都會有教程將maven鏡像站換為aliyun的鏡像站,具體是在setting.xml文件的mirrors節點中添加如下配置:

<mirror>	
    <id>nexus-aliyun</id>	
    <mirrorOf>*</mirrorOf>	
    <name>Nexus aliyun</name>	
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>	
</mirror>

如果本地沒有setting.xml文件,則可以自行創建一個該文件,相關節點要和官方的一致。

但是這個方案也不是百分百有效的,我之前就遇到這樣的情況,依賴死活下載不下來,鏡像站已經改成aliyun的瞭,還是不行,後來嘗試把這段配置註釋掉,換回默認的下載源,就成功瞭,因此,當小夥伴遇到下載失敗的情況時,可以在官方鏡像站和aliyun之間進行切換,勿迷信某一個就能導入成功。

方案二

有的時候,依賴雖然下載失敗瞭,但是相關文件夾中卻多瞭以 .lastUpdated為後綴的文件,此時,如果開發者在開發工具中反復導入,會發現始終無法導入成功,這個時候就需要刪除本地倉庫中相關的 .lastUpdated文件,可以通過文件搜索找到本地倉庫中所有的以 .lastUpdated為後綴的文件,如下:

640?wx_fmt=png

找到後全部刪除,再在開發工具中重新導入依賴。

註意:

這兩種方案都試過之後,還是有可能導入失敗,此時,隻需要重復上面的步驟即可,我個人目前依賴下載失敗的問題,都是通過以上兩步解決的,屢試不爽。

maven導入JSTL依賴出現異常

(1)類轉換異常 : 未能加載或實例化TagLibraryValidator類

org.apache.jasper.JasperException: 未能加載或實例化TagLibraryValidator類:[org.apache.taglibs.standard.tlv.JstlCoreTLV]

原因 :

1643899883762

沒有導入依賴 standard jar 包導致的

完整的依賴是 (老版本 , javax包下的)

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl -->
    <dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>jstl-impl</artifactId>
      <version>1.2</version>
      <scope>runtime</scope>
    </dependency>

新版本 : (jakarta包下的)隻用導入一個就可以瞭

<!-- jstl-api -->
<dependency>    
    <groupId>jakarta.servlet.jsp.jstl</groupId>    
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>    
    <version>2.0.0</version>
</dependency>

(2)如果出現 <%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %> 爆紅的概況

可能是因為沒有導入standard包的相關依賴導致的

<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.5</version>
</dependency>

(3)java.lang.NoClassDefFoundError: (類定義未找到異常)javax/servlet/jsp/tagext/TagLibraryValidator

出現錯誤主要就是jar沒有導完全 ,

使用jstl所需要的jar共有 :

<!-- servlet.jsp-api -->
<dependency>    
    <groupId>jakarta.servlet.jsp</groupId>    
    <artifactId>jakarta.servlet.jsp-api</artifactId>    
    <version>3.0.0</version>
</dependency>
<!-- servlet-api -->
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
    <scope>provided</scope>
</dependency>
<!-- jstl-api -->
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>2.0.0</version>
</dependency>
<!-- jstl -->
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>
<!--standard-impl-->
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
    <scope>runtime</scope>
</dependency>
<!--standard-spec-->
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.5</version>
</dependency>

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: