文档章节

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

马孔多
 马孔多
发布于 2016/03/17 16:47
字数 928
阅读 40
收藏 0

今天导入项目时发现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代码 

  1. <settings>    

  2.   ...    

  3.   <servers>    

  4.     <server>    

  5.       <id>nexus-releases</id>    

  6.       <username>admin</username>    

  7.       <password>admin123</password>    

  8.     </server>    

  9.     <server>    

  10.       <id>nexus-snapshots</id>    

  11.       <username>admin</username>    

  12.       <password>admin123</password>    

  13.     </server>      

  14.   </servers>    

  15.   ...    

  16. </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


© 著作权归作者所有

共有 人打赏支持
马孔多
粉丝 0
博文 8
码字总数 3650
作品 0
浦东
程序员
私信 提问
Maven多模块项目介绍及搭建

对于大型WEB项目的开发一个很重要的部分就是代码的复用和维护管理。但是如果在搭建的时候采用多模块搭建,可以为之后的维护管理及复用提供便利。 接下来是在IntelliJ IDEA中的一个多模块项目...

战五渣
2016/06/13
3.9K
11
Maven之聚合工程的创建和聚合工程的打包-yellowcong

Maven管理项目的时候,我们通常将一个业务作为一个单独的子业务进行开发处理,这样就需要使用到了聚合打包和聚合工程的创建问题了。在现在的物联网公司,一般是这个开发模式,对于传统的对日...

yelllowcong
01/11
0
0
一定要学会将你的项目管理交给Maven

很多童鞋在eclipse或IDEA中新建项目时,还是习惯性的新建普通的Java Project,将项目的依赖和打包通过手工的方式来添加和执行,这样实在太不方便了,而且效率也低,此外,如果涉及到团队分工...

测试开发栈
06/04
0
0
关于Maven的使用问题

现有名为commons的maven项目,里面包含(pk1,pk2,pk3,pk4)四个子modules。现在有另外三个maven项目(pg1,pg2,pg3),pg1项目需要引用commons里面的pk1,pk3。pg2项目需要引用commons里...

ileler
2015/09/11
266
3
Maven 中 dependencies 与 dependencyManagement 的区别

Maven 中 dependencies 与 dependencyManagement 的区别 前提 这段时间项目中遇到过了一些 Jar 包冲突的问题,很多是由于我们项目模块很多的时候,用 Maven 管理不当导致的冲突问题,本文就这...

晨猫
10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

css hack

浏览器的兼容性一直是个头疼的问题,使用“欺骗”技术可使各个浏览器效果一致,花了些时间整理了各个浏览器的HACK,主要包括IE系列和最新版本的Chrome、Safari、Firefox、 Opera,比较全面的...

kitty1116
15分钟前
0
0
zookeeper脑裂问题

一、为什么zookeeper要部署基数台服务器? 二、zookeeper脑裂(Split-Brain)问题 2.1、什么是脑裂? 2.2、什么原因导致的? 2.2、zookeeper是如何解决的? 一、为什么zookeeper要部署基数台...

tantexian
21分钟前
1
0
Spring事务传播行为详解

前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的...

码代码的小司机
31分钟前
2
0
Android设备通过fastboot刷入TWRP

方法一:通过fastboot刷入TWRP的方式 首先去TWRP官网下载TWRP安装文件https://twrp.me/Devices/ 1.进入bootloader adb reboot bootloader 也可在开机时,同时按住电源键+音量减,进入bootloa...

robslove
36分钟前
0
0
为何译为“东家机”和“宾客机”

学习过虚拟化、云计算的人大概都知道,并且都在自己的电脑上安装KVM,如下图所示: 什么情况?不过是在物理机的Windows 10上安装了VMware;在VMware上安装了Linux CentOS 7操作系统;又在其上...

大别阿郎
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部