網站首頁 編程語言 正文
????????在項目開發過程中,難免遇到需要引用私有jar的情況,這時候最好是將該jar推送到私服倉庫,但是由于種種 “現實問題” ,比如權限不夠、時間不夠等等。
????????于是就可以嘗試將jar放入項目中進行集成,此時需要面臨的就是該jar生命周期的問題。
一、Scope屬性
<dependency>
<groupId>com.medex</groupId>
<artifactId>WebsocketClient-aoa</artifactId>
<version>2.2.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/WebsocketClient-aoa-2.2.1.jar</systemPath>
</dependency>
首先在pom文件中將依賴換成讀取本地:<systemPath>
然后通過<scope>標簽控制該jar包(依賴)的生存周期:
1.compile
編譯范圍,默認scope,在工程環境的classpath(編譯環境)和打包(如果是WAR包,會包含在WAR包中)時候都有效。
2.provided
容器或JDK已提供范圍,表示該依賴包已經由目標容器(如tomcat)和JDK提供,只在編譯的classpath中加載和使用,打包的時候不會包含在目標包中。最常見的是j2ee規范相關的servlet-api和jsp-api等jar包,一般由servlet容器提供,無需在打包到war包中,如果不配置為provided,把這些包打包到工程war包中,在tomcat6以上版本會出現沖突無法正常運行程序(版本不符的情況)。
3.runtime
一般是運行和測試環境使用,編譯時候不用加入classpath,打包時候會打包到目標包中。一般是通過動態加載或接口反射加載的情況比較多。也就是說程序只使用了接口,具體的時候可能有多個,運行時通過配置文件或jar包掃描動態加載的情況。典型的包括:JDBC驅動等。
4.test
測試范圍,一般是單元測試場景使用,在編譯環境加入classpath,但打包時不會加入,如junit等。
5.system
系統范圍,與provided類似,只是標記為該scope的依賴包需要明確指定基于文件系統的jar包路徑。因為需要通過systemPath指定本地jar文件路徑。
二、打包掃描
所以此時我們需要設置為system方式,但是在部署到服務器時又會有別的問題。
此時部署到容器運行時,就會提示找不到類,因為該jar未被注入到項目lib中,需要在pom文件中增加打包掃描的配置。
1、項目打的是jar包,需要如下配置:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
2、項目打的是war包,需要如下配置:
按照上述,即使配置了<includeSystemScope>true</includeSystemScope>,打war包不會將本地jar包打入\WEB-INF\lib 下,而是在 \WEB-INF\lib-provided 下。需要在 <build> <plugins> 下添加或修改maven-war-plugin配置
?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<!-- 存放本地jar的文件夾 src/main/resources/lib -->
<directory>${project.basedir}/src/main/resources/lib</directory>
<!-- 目標lib目錄 WEB-INF/lib/ -->
<targetPath>WEB-INF/lib/</targetPath>
<includes>
<!-- 匹配所有jar包 -->
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
原文鏈接:https://blog.csdn.net/AikesLs/article/details/128574791
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-04-23 es6及之后的剩余參數
- 2022-10-06 詳解hive常見表結構_數據庫其它
- 2022-09-10 docker?machine安裝極狐gitlab的過程詳解_docker
- 2022-11-18 Python實現常見數據格式轉換的方法詳解_python
- 2023-06-17 tensorflow1.x和tensorflow2.x中的tensor轉換為字符串的實現_pytho
- 2024-01-08 AOP獲取方法返回值
- 2022-11-23 Android開發Jetpack?Compose元素Modifier特性詳解_Android
- 2022-07-01 詳解go?mod?使用方法_Golang
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支