一、Maven依赖的是本地工程还是仓库jar包
相信大家都碰见过 maven 配置的依赖或者是 jar 包或者是工程,在开发的过程当中,当然需要引入的是工程,这样查看 maven 依赖的文件的时候,就能直接查看到源码。
一、本地工程依赖
举个例子,其架构如下所示(以下均使用eclipse中m2eclipse插件进行演示)——
此时,这里依赖的“dependency-to-hello”指代的是eclipse工作空间中的工程,这样,直接源码依赖的便是工作空间里的源码,这样很方便,也是需要的。会注意到,所依赖的“dependency-to-hello”工程,并没有显示其路径,也就是默认的工作空间的地址。
那么,什么时候maven依赖的是仓库(本地仓库或远程仓库)中的jar包呢?
二、(本地/远程)仓库jar包依赖
很简单的方法之一,直接把“dependency-to-hello”工程关闭掉(close project),这样,就得到这样一个视图——
会看到,此时maven依赖的正是对应“dependency-to-hello”工程的jar文件,并且,后面的路径显示是从maven仓库里面取的。
三、工程依赖及仓库依赖的转换
OK,现在还原之,我们将工程“dependency-to-hello”打开,会看到对应的maven依赖又变回原来的工程依赖了。
需要说的是,当重新打开工程“dependency-to-hello”的时候,hello工程并没有出现红色感叹号,也就是无须做“update dependencies”等的更新maven依赖等操作。
从这里,我们就能够看出来——m2eclipse首先查看是否能够从本地工程库中得到对应的maven依赖,如何存在,则将本地工程依赖进来;如何不存在,则从本地仓库/远程仓库中加载解析对应的jar包依赖。
二、maven的dependency中怎么指定本地的jar包
一、使用Dependency声明这个方法就是和其他maven的dependency一样,在pom.xml里声明一个dependency:org.ibmjms1.0.0system${project.basedir}/lib/jms.jar细心的人可能已经留意到了,这里多了两个声明:scope和systemPath。二、创建一个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.02.com.ibm.mqjms-1.0.jar:groupId是org.ibm.jms;artifactId是com.ibm.mqjms;version是1.0假设以上jar是可用的maven依赖的话,那在dependency依赖里的添加项为:org.ibm.jmscom.ibm.mqjms1.0org.ibm.jmscom.ibm.mq1.0下面的问题就是如何让Maven能找到这个虚拟Maven库。在pom.xml里,我们使用repositories声明可能查找的、多个其他的Maven的库,例如:falsealwayswarntrueneverfailcodehausSnapshotsCodehausSnapshotslib。它是一个release库而不是snapshot库。区别方式一:会直接引用指定路径的lib,而不会把它加到本地的Maven库里去,所以它只在当前project使用,但工程可以方便的共享,且不使用额外的空间方式二:引用的jars会首先被安装到本地的maven库里,然后再通过引用从本地的Maven库里加载,好处是一旦安装,在其他的project也可以引用,但是需要首先在本地安装,当前工程是便携的,但是直接引用而未如上声明的工程可能不是便携的。
三、maven 怎么依赖本地jar包
本地的直接build path 就好了 非要用maven 的话
<dependency>
<groupId>xxx.xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
<scope>system</scope>
<systemPath>${basedir}/xxx/xxxx.jar</systemPath>
</dependency>
${basedir}就是项目根路径
|