假设我们有一个Maven的project,其中有些Jar包不是来自Maven库的,是存在本地的某些Jar文件,比如说在project下有一个lib,里面放了一些额外需要的Jar。
默认情况下,如果用mvn 命令去编译或运行它,并且其中有使用到这些外部jar的类,那么可能报x.x.x包找不着。这是因为maven在它当前的配置里找不到你需要的这些外部jar的配置。
那么如何在maven中配置外部jar,以便在编译和运行的时候能找着它们呢?这里就简单介绍两种方法。
一、使用Dependency声明
这个方法就是和其他maven的dependency一样,在pom.xml里声明一个dependency:
<dependency>
<groupId>org.ibm</groupId>
<artifactId>jms</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/jms.jar</systemPath>
</dependency>
细心的人可能已经留意到了,这里多了两个声明:scope和systemPath。
在Maven中可用的声明大致有:compile, runtime, test, system, 和 provided 。关于他们的具体意思,有兴趣的可以去 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope 看。
在上面的dependency里,我们声明了scope为system, 它使用起来和provided差不多,即此依赖由系统提供,但是与provided有点不同的是,它需要显式的使用systemPath指定lib所在的路径,如上systemPath。
最后看到的效果如上图,jms.jar被加到了工程的maven依赖里。用这种方法可以不需要预先把需要的jar安装在maven库下。
二、创建一个Project范围的库
以上的方法是从避免安装lib到maven库方向上实现。另一种方法就是则是从构造库的方向上考虑的:创建一个虚拟的本地库,让maven到这个本地库里去查找需要的lib。
步骤大致如下:
1. 构造虚拟Maven库
这里我们需要提供一个和maven库结构一样的文件夹/文件结构,以模拟Maven库,例如假如project里lib即是一个maven库,则它的结构可能是:
如上,虚拟库中声明了两个jar:
1. com.ibm.mq-1.0.jar : groupId 是 org.ibm.jms;artifactId是com.ibm.mq;version是1.0
2. com.ibm.mqjms-1.0.jar : groupId是org.ibm.jms;artifactId是com.ibm.mqjms;version是1.0
假设以上jar是可用的maven依赖的话,那在dependency依赖里的添加项为:
<dependency>
<groupId>org.ibm.jms</groupId>
<artifactId>com.ibm.mqjms</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.ibm.jms</groupId>
<artifactId>com.ibm.mq</artifactId>
<version>1.0</version>
</dependency>
下面的问题就是如何让Maven能找到这个虚拟Maven库。
在pom.xml里,我们使用repositories声明可能查找的、多个其他的Maven的库,例如:
<repositories>
<repository>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<id>codehausSnapshots</id>
<name>Codehaus Snapshots</name>
<url>http://snapshots.maven.codehaus.org/maven2</url>
<layout>default</layout>
</repository>
</repositories>
当Maven在Central库里没有找到对应的artifact,则会到这些库里去查找。所以,我们只需要如上把虚拟的Maven库的定义的添加到pom.xml里即可:
<repositories>
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
这里库的路径是:${project.basedir}/lib 。它是一个release库而不是snapshot库。
区别
方式一:会直接引用指定路径的lib,而不会把它加到本地的Maven库里去,所以它只在当前project使用,但工程可以方便的共享,且不使用额外的空间
方式二:引用的jars会首先被安装到本地的maven库里,然后再通过引用从本地的Maven库里加载,好处是一旦安装,在其他的project也可以引用,但是需要首先在本地安装,当前工程是便携的,但是直接引用而未如上声明的工程可能不是便携的。
分享到:
相关推荐
本篇文章主要介绍了maven项目引用外部jar的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
maven的scala编译包
这是一个springboot+maven写的demo,主要演示springboot项目通过maven插件,将依赖与配置文件打包到jar包外部,实现灵活的项目管理.仅供参考学习
有些时候,当我们需要在自己的maven工程中添加一个确定的jar而发现Maven中央仓库不存在时,但是我们自己手上有这些需要的jar包,那么我们可以自给自足,把这个jar包添加到我们的自己的maven仓库中,这样方便在maven...
今天小编就为大家分享一篇关于IDEA Maven项目中导入本地jar包的步骤,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring...网上很多教程都是基于maven情况下的,而很多小伙伴没有使用到maven,jar包就成了一个很大的问题,我这边整理了springboot所使用到的jar包
主要介绍了SpringBoot使用Maven打包异常-引入外部jar,需要的朋友可以参考下
一个基于springboot + jsp的demo项目, 非常简洁,可通过maven一键构建,亮点是不仅可以war包方式运行,还可以可执行jar包方式运行(实现这个需要突破很多关键技术和限制...)
主要介绍了Maven引入外部jar的几种方法(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
idea引入aspose-words-15.8.0,idea引入外部jar方法。
本篇文章主要介绍了spring boot引入外部jar的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了maven打包成第三方jar包且把pom依赖包打入进来的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或OpenBSD上安装Maven 2.4. 验证Maven安装 2.5. Maven安装细节 2.5.1. 用户相关配置和仓库 2.5.2. 升级Maven 2.6. 获得Maven...
springboot 项目编译后无法扫描加载到子jar包中的注解解决方法
采用一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。...
我们通常在lib文件夹中存放从外部引入的jar包 3、找到我们要引入的jar包,鼠标选中jar包,然后按住鼠标左键不放,把jar包拖到lib文件夹中。或先复制jar包,然后在lib文件夹上右击,选择复制。此时,打开选择框,...
将外部的jar包可以加入本地maven中央库管理,直接通过配置即可在maven中引用
1.把此jar文件夹在加载到eclipse中(鼠标右键build path - configure build path-libraries-add jars-选择此jar文件(本地路径)-ok-apply) 2.在代码中,把鼠标光标放在要查看源码的类名称上,按住键盘Ctrl键,当光标...
前后端项目启动教程课程,配套后端Maven依赖包,适用于SpringBoot3.1版本,用于 https://blog.csdn.net/qq_41464123?type=download 系列项目...在Maven中,我们可以使用依赖管理器来管理项目所需的外部JAR包或库文件。