maven入门

本文可作为,孔浩maven课程的学习笔记



下载,安装

自己去看看


mvn基本概念

使用groupId,artifactId,version三个只来指定一个项目
例如
<dependency>
	<groupId>org.apache.tomcat</groupId>
	<artifactId>tomcat-jdbc</artifactId>
	<version>9.0.0.M4</version>
</dependency>
groupId一般是公司名称.项目名称
artifactId一般是就是上面那个大项目的子项目名称
version就是x.x.x-里程碑
里程碑包括
SNAPSHOT(程序员正在开发的版本)
alpha(程序员内部测试的版本)
beta(用户测试版本)
Release(RC 正式发布版)
GA(General Availability 广泛可用,官方推荐的使用版本)
在maven中一般用的是SNAPSHOT或者release


mvn 常用命令汇总


mvn compile
会在src的同级目录下生成target/classes
mvn test
会在src的同级目录下生成target/test-classes,target/surefire,target/surefire-report
mvn clean
删除target文件夹
mvn package 是打成jar
mvn install 是打成jar,并且把jar放到仓库里(本机的仓库)


 mvn archetype:generate 就是产生一个maven项目
 如果是第一次运行这个命令,首先会下载很多相关文件
 然后列出项目模板...
 然后进入互动界面
 Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): xxx
 会默认给出一个项目模板(所以直接回车即可)
 然后选择对应的项目模板的版本号(一般会默认给出,直接回车即可)
 选择groupId,artifactId,version等等
 然后回默认指定package,此时直接回车即可

 如下图,comfirm properties configuration下需要键入y,别的就是回车


依赖的作用域

compile,import,provided,runtime,system,test
import和system暂且不说
compile 编译的时候就把依赖加入,打包的时候也会加入
provided 编译和测试的时候会加入,打包的时候不会加入 例如tomcat的lib下那些jar
runtime 运行是依赖,编译的时候不会加入 例如myslq的连接包
test 只在test的时候加入,编译和打包的时候不要  例如junit
compile是maven默认的

依赖传递

如果项目A->spring-bean-2.2.3.jar
如果项目B->spring-bean-2.2.4.jar
项目C->A,B
那么项目c内加入的就会是spring-bean-2.2.3.jar
为什么?
因为在pom.xml里先写的是A#
如果项目A1->A2->spring-bean-2.2.3.jar
如果项目B->spring-bean-2.2.4.jar
项目C->A,B
那么项目c内加入的就会是spring-bean-2.2.4.jar
为什么?
因为从c到spring-bean-2.2.4.jar比从c到spring-bean-2.2.3.jar的距离短

依赖排除

如果我不想使用spring-bean-2.2.4.jar
怎么办?
在项目c里引用b的时候加上
<dependency>  
                 <groupId>com.dlf</groupId>  
                 <artifactId>B</artifactId>  
                 <version>0.0.1-SNAPSHOT</version>  
                 <exclusions>  
                                  <exclusion>  
                                       <groupId>spring-framework</groupId>  
                                     <artifactId>spring-bean</artifactId>  
                                  </exclusion>  
                 </exclusions>  
</dependency>  
另外maven dependency 里面有个optional选项 
默认为false
项目b的pom中引用了组件c,且c的optional是false  那么如果项目a引用项目b的时候 也会默认的把组件c加上
如果b的pom中引用了组件c,且c的optional是true 那么如果项目a引用项目b的时候 就不会引用组件c 如果还需要组件c 那么只能多加一个dependency 

项目聚合

如果一个大的项目分成了10个模块,我要package一下,岂不是要依次点击10个模块?
我们可以使用maven带有的聚合功能
我们在eclipse里新建一个maven工程,packaging选择pom

在新项目的pom.xml的project下加入:

<modules>
	<!-- 聚合 是模块的位置-->
	<module>../user-core</module>
	<module>../user-service</module>
</modules>
然后对这个工程的test compile都会依次对它所聚合的项目进行test,compile


项目继承

在子项目里写下
<parent>
     <groupId></groupId>
     <artifactId></artifactId>
     <version></version>
     <!-- 继承的绝对路径是 pom的文件-->
     <relativePath>../user-parent/pom.xml</relativePath>
</parent>
这样一来,父项目的gruopid和一些常量就能在子项目中不经声明而使用

同时,可以在父项目里把子项目需要的jar包都写入
例如
<dependencyManagement>
   <dependencies>  
               <dependency>  
                
	       </dependency> 
   </dependencies> 
</dependencyManagement>
子项目的pom的dependency就不需要写 version和scope

另外再说明一下

在父项目里

直接写

   <dependencies>  
               <dependency>  
                
	       </dependency> 
   </dependencies> 
子项目也会默认加载父项目所依赖的jar

如果是dependencyManagement

<dependencyManagement>
   <dependencies>  
               <dependency>  
                
	       </dependency> 
   </dependencies> 
</dependencyManagement>
那么需要在子项目里显式的加入dependency

那父项目的dependencyManagement到底干了什么事呢?

统一了项目中依赖的外部组件的版本






 另外如果myeclipse报这错误
ArtifactDescriptorException: Failed to read artifact descriptor for com.alibaba:druid:jar:0.2.23: ArtifactResolutionException: Failure to transfer com.alibaba:druid:pom:0.2.23 from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact com.alibaba:druid:pom:0.2.23 from/to central (http://repo1.maven.org/maven2): The operation was cancelled.


项目右键-->Maven4MyEclipse-->update project Configuration 


选择上force update of snapshots/releases 然后OK 即可




参考资料

http://www.cnblogs.com/yjmyzz/p/3495762.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值