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

2023-05-16

        在项目开发过程中,难免遇到需要引用私有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>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven项目引用本地jar涉及scope配置 的相关文章

  • Hibernate版本的jars,maven,应该放在一起吗?

    我很难理解哪些 jar 版本应该与 hibernate 一起使用 我有一组可以一起工作的 hibernate 版本 Maven 东西 但我不知道为什么 我怎样才能知道哪些版本与其他版本一起工作 我也想升级我的休眠 但我不知道要放入什么版本号
  • Maven无法编译java 1.8

    我正在尝试使用 maven 构建 jar 但我不断收到错误 ERROR Failed to execute goal org apache maven plugins maven compiler plugin 3 1 compile de
  • 如何在android studio中使用maven

    我想用底部栏 https github com roughike BottomBar我的项目中的库 当我添加正确的gradle命令在build gradle文件和sync 我收到此错误 Failed to resolve com rough
  • 如果maven中没有为资源过滤设置环境变量,如何使用默认值?

    我正在使用资源过滤来替换属性文件中的一些 values 例如该文件包含 属性 值 我希望将 VALUE 替换为环境变量 VALUE 如果在构建运行时设置了 VALUE 则效果很好 惊人的 但是 这些环境变量仅在我们的官方构建环境 由 Jen
  • 从原型创建 Maven 项目时出错:501 HTTPS 必需

    I run mvn archetype generate并得到这个错误 Error reading archetype catalog http repo maven apache org maven2 org apache maven w
  • java:无法访问org.springframework.boot.SpringApplication错误的类文件

    java cannot access org springframework boot SpringApplication bad class file C Users xyz m2 repository org springframewo
  • maven 构建 OSGi 的问题(包括依赖项)

    我目前正在从 OSGi iPOJO 和 iPOJO Annotations 开始 并尝试构建一个要在 Felix 中部署的简单组件 不幸的是 我遇到了各种问题 这些问题需要我花几个小时才能解决 或者在浪费时间后我什至无法解决 如下所示 我想
  • 从 Eclipse IDE 在 Tomcat8 中部署 Maven 项目

  • Maven Pom.xml 问题

    我正在尝试使用 maven 制作一个 spring mvc 项目 并在 pom xml 中出现以下错误 CoreException 无法计算构建计划 插件 org apache maven plugins maven compiler pl
  • jQuery异步ajax查询和返回值问题(范围、闭包)

    由于异步查询和变量范围问题 代码无法正常工作 我不明白如何解决这个问题 使用 async false 更改为 ajax 方法 不是一个选项 我知道闭包 但我如何在这里实现它 不知道 我已经在这里看到了有关 js 中的闭包和 jQuery 异
  • AAR 可以包含传递依赖吗? [复制]

    这个问题在这里已经有答案了 现在我有一个库项目 比如项目 Foo 它依赖于像 OkHttp 这样的库 现在 Foo 有一个 Maven 构建步骤 可以生成 AAR 并将其推送到公共位置 现在假设我有项目 B 我们将其称为 Bar Bar是一
  • 在资源中找到未签名的条目....jar

    我正在使用 Netbeans 来编译和签署我的所有 jar 所有这些都使用相同的证书 但是 当我使用 Sun Java SE 6 运行 Webstart 时 出现错误 Found unsigned entry in resource jar
  • 在 while 循环之外使用变量(作用域)

    关于 PHP 范围的小问题 我似乎无法在 while 循环之外调用变量 report 我尝试过各种事情 包括return 这不起作用 这里唯一起作用的两个函数是如果我echo变量 report在循环内 或者如果我print它 我不想这样做
  • 如何使用maven创建基于spring的可执行jar?

    我有一个基于 Maven 的 Spring WS 客户端项目 我想将其打包为单个 jar 在eclipse中 一切运行正常 当我尝试将其打包为可执行 jar 时 我收到 ClassNotFound 异常 因为 Spring jar 未包含在
  • 如何在多模块 spring-boot maven 项目中构建特定模块

    我创建了一个多模块 Spring Boot Maven 项目 但是当我使用 mvn clean package pl module2 spring boot run 在控制台中 它告诉我 module1 中的某些类找不到 但我已经在 mod
  • 如何对 jar 文件资源使用 File.separator?

    我正在尝试读取位于 jar 文件中的属性文件 我想使用 File separator 因为应用程序将在多个平台上运行 我正在构建路径如下 jarFilePath jar file jarFile getAbsolutePath jarPro
  • Gradle创建多项目Jar

    因此 从 Gradle 和 Android Studio 诞生之初起 我就一直在使用它们 然而 我发现自己用头撞墙的次数有时远远超过了它的价值 我花了一天半的时间试图解决我目前的困境 在我工作的地方 我们使用很多共享库项目 这意味着与 Gr
  • 使用功能分支时避免 Maven 存储库版本冲突

    Question 如何处理 Maven 多项目构建的功能分支 Jenkins 构建和部署这些分支 以将开发人员的构建开销降至最低 但开发和功能分支无法构建相同的 Maven 版本 否则我们将面临工件和源代码之间不匹配的风险 我们有一个脚本来
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • Spring Boot 中的 JSTL 支持

    虽然我知道有JSP 支持中的一些限制 http docs spring io spring boot docs current reference html boot features developing web applications

随机推荐

  • mac系统electron项目打包出现:Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

    mac系统下 xff0c electron项目打包 xff0c 好像需要python可执行程序 xff0c 如果找不到就报这个错误 xff0c 而且python版本需要2 7版本 我的系统不知道怎么回事 xff0c 因为已经安装了pytho
  • 矩阵的乘法与利用矩阵求解线性方程组

    矩阵的乘法定义 xff1a 假定A 61 是一个m s的矩阵 xff0c B 61 是一个s n的矩阵 xff0c 那么规定 xff0c 矩阵A与矩阵B的乘积是一个m n的矩阵C 61 xff0c 其中 xff0c i 61 1 2 m j
  • 正则表达式[^]的作用

    与数字组合然后用中括号扩起来的用法比如 0 9 xff0c 或者与字母组合 a z 我们经常能见到 xff0c 表示匹配除了0 9或者a z之外的其他字符 但是有一种形式 xff0c 就是中括号 里面单独一个 xff1a 这种情况 xff0
  • [Java] synchronized在代码块中修饰.class与this的区别

    synchronized是java中的关键字 xff0c 表示同步 xff0c 可以在多线程环境中起到锁的作用 它是jvm层面的锁 xff0c 不需要人为获取释放锁资源 xff0c 由jvm决定 synchronized可以直接用在方法上
  • java面向对象编程中可能出现的隐藏hide、遮蔽shadow、遮掩obscure

    在java面向对象编程中 xff0c 我们最常遇到的两个场景是覆盖和重载 这两种情形是因为方法名相同的不同展现形式 方法覆盖是表现在父类和子类之间 方法重载发生在一个类的内部 在面向对象编程中 xff0c 我们还可能出现下面几种场景 xff
  • java控制台输出颜色设置

    在java中 xff0c 控制台输出 xff0c System out println 显示默认黑色 xff0c 如果是System err println 显示红色 要想让控制台输出改变颜色 xff0c 需要做一些设置 就像在linux终
  • java删除非空文件夹

    java中删除文件和空文件夹很简单 xff0c 直接调用File api xff0c file delete 就可以删除文件或者空文件夹本身 但是如果是非空文件夹 xff0c 这个方法就会失败 xff0c 就像在linux下我们使用命令rm
  • springboot项目中PropertySource读取yaml配置文件

    springboot项目中 xff0c 当我们使用 64 Value注解读取配置属性 xff0c 默认的配置文件是properties类型文件 xff0c 如果一些配置来自yaml格式配置文件 xff0c 那么就需要做一个配置 Proper
  • Java内存溢出问题排查分析

    目录 前言 一 MAT xff08 Memory Analyzer Tool xff09 二 软件初识 三 捕获dump文件 1 主动方式 2 被动方式 四 分析dump文件 总结 前言 项目运行过程中 xff0c 我们可能会遇到Java内
  • Excel行变列,列变行技巧以及单元格换行

    在excel操作中 xff0c 有可能有这样的需求 xff0c 就是一列数据 xff0c 我们最终需要把他们放在一行上展示 xff0c excel提供了复制粘贴功能 xff0c 在粘贴的时候 xff0c 右键选择 选择性粘贴 xff0c 再
  • snakeyaml生成yaml文件空值显示问题

    snakeyaml开源库 xff0c 可以很方便的加载和生成yaml文件 xff0c 普通的加载 xff0c 其实springboot项目都可以实现 xff0c 在生成yaml文件的时候 xff0c 有几个问题需要注意 xff0c 第一个是
  • java反射调用System.out.println实现控制台打印

    在java编程中 xff0c 我们最常用的控制台打印就是System out println 我们如果想用反射的方式来实现打印 xff0c 该如何操作呢 xff1f 我们可能会想着直接这样使用 Class forName 34 java l
  • vscode官方下载太慢解决办法

    不说话 xff0c 直接上动态图 xff1a 详细步骤 xff1a 1 打开官网 xff1a Visual Studio Code 点击下载 2 在下载器这里复制下载链接 xff0c 粘贴到浏览器地址栏 3 改变官网地址主地址为 vscod
  • node通过node-java库调用java

    node有一个库 node java xff0c 可以通过js的方式调用java语言 xff0c 听起来好像很好玩 xff0c 但是这个玩意要求很复杂 1 本机安装msbuild环境 这个东西简单的安装方式就是npm install g w
  • node-gyp编译c++编写的node扩展

    node有一个模块addon xff0c 翻译过来 xff0c 是插件 xff0c 但是有的地方也叫扩展 xff0c 这部分是用c 43 43 来编写的 xff0c 最后可以通过node gyp来针对各个平台编译适合自己平台的扩展 xff0
  • log4j日志漏洞问题

    去年 xff0c log4j被爆出了一个漏洞 xff0c 说可以通过利用日志格式化中的远程注入控制主机 当时 xff0c 这个漏洞被形容为史诗级漏洞 xff0c 因为这个远程操作可以执行一些操作 xff0c 如果这个操作有恶意 xff0c
  • postgresql数据备份与恢复

    postgresql数据备份与恢复在实际工作中可能会用到 xff0c 这里记录一下自己整理的备份与恢复的过程 xff0c 备份一般使用pg dump来做 xff0c 但是它备份的结果有两种格式 xff0c 默认不加 Fc参数 xff0c 产
  • bat批处理脚本大全

    目录 1 echo 2 注释 3 常见cmd命令 4 参数与变量 5 for循环 6 函数 7 数组 在windows上编程或者制作一些小工具 xff0c 少不了使用批处理脚本 xff0c 而且在各种开发环境搭建中我们经常会看到批处理脚本
  • node日志log4js库使用示例

    在node开发或者electron项目开发中 xff0c 我们可能需要记录日志的功能 xff0c 便于我们出错排查问题 今天介绍node中的日志库log4js log日志记录 xff0c 一般需要配置日志记录的级别 xff0c 日志输出类型
  • Maven项目引用本地jar涉及scope配置

    在项目开发过程中 xff0c 难免遇到需要引用私有jar的情况 xff0c 这时候最好是将该jar推送到私服仓库 xff0c 但是由于种种 现实问题 xff0c 比如权限不够 时间不够等等 于是就可以尝试将jar放入项目中进行集成 xff0