maven学习笔记

maven实战学习笔记

放假了解了一下maven,发现真是一个不错工具,原来电脑里面的jar包都乱作一团,很多重复,而且经常找jar包找半天,通过使用maven仓库来管理jar包可以很好的解决这个问题。

1:首先安装maven,目前maven有两个大版本,2.X以及3.x,下面是3.0.5的下载地址。

http://mirrors.cnnic.cn/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz

将下载的包解压到指定的目录中,然后像配置jdk环境一样,在系统环境变量中加上变量名为M2_HOME(名字随意取),指向maven解压的跟目录,在path变量中加入%M2_HOME%\bin,此时在cmd控制台中输入mvn -v可以查看mvn的版本信息



2:在控制台中键入mvn help:system命令,可以看到maven会下载一些jar包以及pom.xml文件,这些东西被下载到本地仓库中,默认的本地仓库的路径是个人工作目录下面的.m2文件夹,这个路径可以更改,在M2_HOME/conf目录下面找到settings.xml文件,将该文件拷贝到.m2文件夹下面,修改<localRepository></localRepository>中的路径为本地的仓库路径。有时候在公司的环境中,需要通过代理去上网下载jar包之类的资源,我们可以在setting.xml中配置

 <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy> -->
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>	
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
   
  </proxies>


3:maven主要通过配置文件pom.xml来构建项目。

一个最简单的pom.xml文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<project>
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.ynb</groupId>
	<artifactId>helloWorld</artifactId>
	<version>1.0</version>
	<name>helloWorld</name>
</project>
modelVersion为当前POM模型的版本,maven2.0以及maven3.0中只能为4.0.0

groupId,artifactId,version这三行定义了这个项目的基本坐标,在maven中,任何jar包,pom以及项目都是通过坐标来进行定位以及区分的。

groupId定义了项目属于哪个组,artifactId定义了该项目在该组中的id,version定义了该项目的版本信息,maven就是通过这三个属性来找到并下载对应的jar包


4:pom.xml配置

某个项目可能会对其他的jar包以及项目有依赖,我们在pom.xml中配置这种依赖关系。

一个依赖申明可以包含以下元素:

<dependencies>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.1</version>
			<type>jar</type>
			<scope>compile</scope>
			<optional>true</optional>
			<exclusions>
				<exclusion>
				
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>
对于配置的依赖关系,maven会通过groupId,artifactId,version三个属性首先在本地仓库中查找对应的jar包,如果本地没有,那么会在maven中央仓库中下载,然后存储在本地,以后需要直接从本地仓库中读取而不是道中央仓库去下载。


<type>:该标签通常不用填写,默认为jar


<scope>:该标签表示依赖范围,可选值有:

1.compile编译依赖范围,该值为默认值,对于编译,测试以及运行都需要该依赖关系

2.provided对于编译以及测试class-path有效,但在运行时无效,典型的例子是servlet-api,运行时,容器会提供对应的jar包

3.runtime对于测试以及运行时有效,但是对于编译主代码时无效,典型的例子是jdbc驱动程序,项目编译时只需要jdk提供的jdbc接口,但是在测试以及运行时需要上述接口的具体jdbc实现。

4.system与provided范围一致。但是该范围不通过maven仓库解析,而是与本机系统绑定,需要通过systemPath元素来指定依赖文件的路径,该返回指定的路径与具体的机器有关系,应该少用这种范为

<dependency>

......

<scope>system</scope>

<systemPath>${java_home}/lib/rt.jar</systemPath>//可以引用环境变量

</dependency>



<optional>表示依赖是否为可选依赖

optional标签的值为true或者false。如果为true表示该依赖为可选依赖,对于可选依赖,当项目A包含有依赖项目B,而B包含可选依赖C,那么A并不包含依赖C,如果实际中A项目依赖C,需要显示的申明该依赖。简而言之就是可选依赖是不会被传递的



优化依赖关系

项目之间的依赖关系错综复杂,Maven会自动解析所有项目的直接依赖和传递性依赖,并根据规则正确判断每个依赖的范围,对于一些依赖的冲突也能进行调节,以确保某个构建在依赖关系中只存在一个版本,最后得到的依赖成为已解析依赖,可以通过命令mvn dependency:list查看项目的依赖列表。

mvn dependency:tree以树型形式展示依赖列表以及依赖之间的相互依赖关系。

mvn dependency:analyze对项目中的依赖关系进行分析,会列出Used unclared dependencies以及Unused declared dependencies,

Used unclared dependencies表示使用了没有申明的依赖,我们需要显示申明这种依赖关系

Unused declared dependencies表示有申明了,但是没有使用的依赖,可以移除这种依赖关系


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值