在Maven中怎么配置外部Jar
转摘自:http://liugang594.iteye.com/blog/1677712
假设我们有一个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的更多相关文章
- 将eclipse java程序打包成jar的总结(包括工程中没有引用外部jar包和有引用外部jar包两种情况)
一.当eclispe java工程中没有引用外部jar包时: 选中工程---->右键,Export...--->Java--->JAR file--->next-->填写 ...
- spring boot:在项目中引入第三方外部jar包集成为本地jar包(spring boot 2.3.2)
一,为什么要集成外部jar包? 不是所有的第三方库都会上传到mvnrepository, 这时我们如果想集成它的第三方库,则需要直接在项目中集成它们的jar包, 在操作上还是很简单的, 这里用luos ...
- maven中如果使用本地jar
1.安装到本地仓库class12.jar这个东西在中央仓库里没有,所以,cmd到oracle\product\10.2.0\db_1\jdbc\lib路径下,mvn install 就好了(发布第三方 ...
- IntelliJ IDEA14.1中java项目Maven中没有配置JDK时的问题
在IntelliJ IDEA 14.1中使用在java项目中使用Maven时当没有在Maven中配置JDK编译版本.源码版本时,IDEA将默认的编译版本.源码版本设置为jdk5. 在IDEA中Lang ...
- maven中Rhino classes (js.jar) not found - Javascript disabled的处理
想使用单元测试 来测一下服务请求,于是想到了使用Junit,查了一下,决定使用 HttpUnit 来发送请求 于是在maven中引入了 <dependency> <groupId&g ...
- Maven中手动引用第三方jar包
有些jar包在Maven库中并不支持,但我们又需要.所以就必须手动引入. 可分为三步完成: 1 ,在项目目录下创建Lib,把引入的jar包加入. 2.在pom.xml中引入dependences. 如 ...
- maven中把依赖的JAR包一起打包(转)
转自:http://lvjun106.iteye.com/blog/1849803 这里所用到的MAVEN-PLUGIN是MAVNE-ASSEMBLY-PLUGIN 官方网站是:http://mave ...
- maven中添加json-lib的jar包
在maven配置文件pom.xml中添加如下配置信息: <dependency> <groupId>net.sf.json-lib</groupId> <ar ...
- maven中把依赖的JAR包一起打包
<buizld> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId ...
随机推荐
- SGU 495
#include<bits/stdc++.h> using namespace std; #define ll long long ; ; int n,m; double dp[N]; / ...
- ABAP CDS ON HANA-(11)ABAP CDSでの関連付け
Association in ABAP CDS An association in CDS view joins different data sources. Defining and using ...
- 【APUE】Chapter10 Signals
Signal主要分两大部分: A. 什么是Signal,有哪些Signal,都是干什么使的. B. 列举了非常多不正确(不可靠)的处理Signal的方式,以及怎么样设计来避免这些错误出现. 10.2 ...
- adb 命令模拟按键事件
转自:http://blog.csdn.net/jlminghui/article/details/39268419 例子:adb shell input keyevent 4 #这条命令相当于按了设 ...
- IDEA 中.properties文件中文自动转Unicode编码及乱码问题
问题描述: 在使用IDEA开发工具编辑属性文件(.properties)的时候出现中文自动转成了Unicode编码,或在读取属性文件的时候中文出现乱码. 问题解决: 进入 File -> Set ...
- Qt程序加图标
第一步 准备一个ICON图标 例如:myicon.ico 新建文本文件,里面编辑文字 IDI_ICON1 ICON DISCARDABLE "myicon.ico" 文件另存为 x ...
- APP功能性测试-4
弱网络测试 使用fiddler模拟低速环境 使用fiddler抓取手机上某个应用的包 手机连接fiddler fiddler 代理地址127.0.0.1默认端口8888 只抓http协议(https, ...
- Java串口编程学习1-环境配置(64位Win7)
最近在做zigbee的课程设计,需要Java实现对串口数据的读写操作. 网上找了很多代码,好像都比较过时了,直接拿来用没法跑通……QAQ……然后自己写个教程留底,如有不当之处还请各位路过的大神赐教. ...
- HDU 3696 Farm Game(拓扑+DP)(2010 Asia Fuzhou Regional Contest)
Description “Farm Game” is one of the most popular games in online community. In the community each ...
- POJ 1149 PIGS(最大流)
Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock an ...