日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Maven項目引用本地jar涉及scope配置

作者:Aikes902 更新時間: 2024-04-02 編程語言

????????在項目開發過程中,難免遇到需要引用私有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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新