学无先后,达者为师

网站首页 编程语言 正文

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

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新