您的位置:首页 > 其它

关于Maven管理项目中引用子项目作为Jar包问题

2016-03-17 00:00 411 查看
摘要: 本人今天在研究框架时发现Jeecg框架基于Git的Maven项目,于是就产生了各种二逼的问题,搞的自己晕头转向,最后网上各种寻找办法,都是因为自己不懂Maven,也没有系统的去学习Maven,都是用的时候碰到什么问题就去搜。下面对于自己遇到的问题作一下收集。

今天导入项目时发现A,B,C项目,A依赖于B,B依赖于C 于是先来检查了一下各自的Pom.xml,没有问题,于是在C项目上用Maven各种编译,总是提示 B项目的Jar包不存在,于是就纳闷了,检查了一下,pom.xml中的配置基本没有问题:

B项目中pom.xml:

<dependency>

<groupId>org.mayframework</groupId>

<artifactId>bms-core</artifactId>

<version>${bms-core.version}</version>

</dependency>

:bms-core 则为A项目。

C项目中pom.xml:

<dependency>

<groupId>org.mayframework</groupId>

<artifactId>bms-paltform</artifactId>

<version>${bms-paltform.version}</version>

</dependency>

bms-paltform则为B项目。

引用网上找到的答案:首先得让maven知道你这个项目依赖了哪些jar包,但maven只认pom文件,所以你得把你项目的所有依赖写到pom文件中。在子项目中你可以使用dependency标签来引用父项目,同时也就得到了所有依赖。

所以在这里配置文件是没有问题的,但是B项目和A项目有一项配置:

<distributionManagement>

<repository>

<id>nexus-releases</id>

<name>Nexus Release Repository</name>

<url>http://192.168.58.38:8081/nexus/content/repositories/MS-release/</url>

</repository>

</distributionManagement>

问题主要跟这里有关,好奇的我就去找Maven的distributionManagement属性,结果明白了:

<!-- **************插入解释*******************-->

Maven 中的distributionManagement属性:

分发构件至远程仓库

mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。

我们需要配置POM的distributionManagement来指定Maven分发构件的位置,如下:

Xml代码

<settings>

...

<servers>

<server>

<id>nexus-releases</id>

<username>admin</username>

<password>admin123</password>

</server>

<server>

<id>nexus-snapshots</id>

<username>admin</username>

<password>admin123</password>

</server>

</servers>

...

</settings>

需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。将认证信息放到settings下而非POM中,是因为POM往往是它人可见的,而settings.xml是本地的。

小结

本文介绍了Maven仓库,它是什么?本地仓库,远程仓库,中央仓库具体是指什么?并介绍了如何在POM中配置项目层次的仓库,在settings中配置用户层次的仓库,以及mirror。本文还介绍了如何安装构件到本地仓库,如何分发构件至仓库。

【转载于:http://tianya23.blog.51cto.com/1081650/292205/】

看到这里立即明白了为什么在编译C项目时会看到Maven去外网下载B和A的Jar,此时立即去检查本地库中是不是存在B和A的Jar,结果发现没有,于是真相大白,是因为本地库没有找到对应的Jar包,所以会去远程仓库找,此时立即将B项目和A项目按照依赖关系顺序进行编译Install,在本地库生成Jar包,再编译C项目时就没有问题了。

在这里要批评一下自己,对Maven了解甚少,就应该详细的学习一下Maven,遇到问题再去学习并解决问题,这样效率很低,这里贴出Maven视频教学:

http://www.imooc.com/view/443
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: