Apache Maven总结
1、Maven的配置:
首先来说说Maven的配置问题。
官网:http://maven.apache.org/download.cgi
或者点击这个链接直接下载:http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.zip
下载解压到一个本地的纯英文文件夹,然后配置本地环境变量:在path里面添加Maven的bin文件夹目录,选择新建,然后添加,我的是G:\java\IDEA\Maven\apache-maven-3.6.1\bin;【注:此项操作应该基于java的jdk已经配置好的情况之下,如果没有配置好,应先进行jdk配置】如果是使用JAVA_HOME的方式配置的jdk,则需要在JAVA_HOME后面添加Maven的路径,我的是G:\java\IDEA\Maven\apache-maven-3.6.1;前面记得加分号。
Maven配置成功的标志:在cmd中运行:测试安装成功:mvn -v 如果出现一系列信息,则表示安装成功
2、设置本地仓库:
修改Maven的配置文件,apache-maven-xxx\conf目录下的settings文件,设置本地的仓库位置
(可选,默认在C盘的用户目录下)修改localRepository 为:<localRepository>d:/mvn/repo</localRepository>
【注:注意注释符的位置,将语句直接复制在注释的外面,如果在注释里面,则为无效操作】
可以测试新建一个Maven项目:进入你设置的文件夹下面,cmd运行:
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.chinasofti.build -DartifactId=demo
一直按回车,运行完成之后就能在文件夹下面发现一个名为demo的文件夹,这个就是新建的。可以在cmd运行:
mvn clean compile exec:java -Dexec.mainClass="com.chinasofti.build.App"
清除构建
3、修改镜位置,极速之选,不选龟速。
在上面修改好之后,修改mirrors,在<mirrors>标签下加入以下配置,启动阿里云的镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4、在eclipse或者myeclipse或idea上面修改maven的基本设置
5知识点总结:,
Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。其最强大的功能就是能够自动下载项目依赖库。
从用途来说,它可以是:构建工具;依赖管理工具;项目信息聚合工具。
5.1生命周期:
初始化--编译--测试--打包--验证--安装--部署
Maven 强大的原因是有一个十分完善的生命周期,生命周期可以理解为对构建(build)过程进行抽象和定义的过程,它定义了各个构建环节的执行顺序,有了这个顺序,Maven 就可以自动化的执行构建命令。生命周期(lifecycle)由多个阶段(phase)组成,每个阶段(phase)会挂接一到多个goal。goal是maven里定义任务的最小单元,相当于ant里的target。可以理解maven为一个插件的容器,每个插件绑定到某个goal执行。根据定义的总结,可以分为三个周期:
a、Clean Lifecycle:在进行真正的构建之前进行一些清理工作
b、Default Lifecycle:构建的核心部分,编译、测试、打包、安装、部署等等。
c、Site Lifecycle:生成项目报告,站点,发布站点。
其中值得注意的是,在maven中,只要在同一个生命周期,你执行后面的阶段,那么前面的阶段也会被执行,而且不需要额外去输入前面的阶段。讲到这里,我们就要说说Maven的一些基本命令行了。
5.2常用的一些命令:
编译compile:编译项目的代码
打包package:获取编译后的代码,并且把它们打成可派发的格式,比如JAR.
测试test:使用合适的单元测试框架测试源码。这些测试代码并不要求打包或者部署
安装instal:安装包到本地的repository中,以便其他项目可以依赖这个项目。
部署deploy:在构建的结束阶段,把最终包上传到远端的repository中,以便其他的项目和开发者可以使用。
检测validate:验证项目是否正确,并且所有必要的信息是否有效
清理clean:清理maven项目
5.3依赖机制
5.31
依赖管理指的就是Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”,Maven可以通过免费的远程仓库进行下载jar包,我们需要在Pom.xml文件进行配置即可,就是对应版本的坐标。
<dependency> --依赖声明
<groupId>net.sf.json-lib</groupId> --包名(一般为域名的反写)。
<artifactId>json-lib</artifactId> --项目名
<version>2.4</version> --版本名
<type>jar</type> --依赖的类型,jar或者war(默认为jar,表示依赖的是一个jar包)
<classifier>jdk15</classifier> --通常是用于从同一POM构建的拥有不同内容的构件,可选属性,可以是任意的字符串
</dependency>
【注:另外当type表示为<type>pom.lastUpdated</type> 这种属性时,表示只将jar的描述信息加载了进来,实际的jar包并未导入。】
5.32依赖的范围:
a、compile:编译时依赖在所有阶段都可获得,这是默认值。
b、provided: 提供的依赖范围用来编译应用程序,但无需部署。若你用到jdk或者应用服务器提供的JAR,则使用此范围,servlet APIs就属于这个依赖范围。测试时,此依赖范围也加入到classpath。
c、runtime:运行依赖范围在编译阶段是不需要的,只有在运行时需要,比如JDBC驱动程序。
d、test:测试范围依赖,仅在编译和运行单元测试时需要(比如Junit)。
e、system 本地依赖,不建议使用。(nexus)
5.33依赖的传递:
Only compile and runtime scopes are transitive
A->B->C
简单传递依赖:A->C
A->B-C(0.1)
A->C(0.2)
最短路径优先原则: A->C(0.2)
A->B->C(0.1)
A->E->C(0.2)
第一声明优先原则:最终依赖C(0.1)
5.34依赖归类:
<properties> --定义版本属性
<spring.version>2.5</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version> --引入归类版本属性
</dependency>
</dependencies>
5.35依赖排除
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
5.36继承关系:
父maven项目中通过dependenciesManagement中定义公共依赖项
子maven项目中通过dependencies中定义公共依赖项插件/properties都可以继承
5.37仓库(repository):
优先级排列:local -> private-> central
local:localRepository in settings.xml
private:mirrors in settings.xml
central: Public Repositories in nexus
6、其余略..................