maven

什么maven

Maven是干什么用的?这是很多同学在学完这个课程后最大的问题。之所以会提出这个问题,是因为即使不使用Maven我们仍然可以进行B/S结构项目的开发。从表述层、业务逻辑层到持久化层再到数据库都有成熟的解决方案——不使用Maven我们一样可以开发项目啊?所以我们有必要通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足。

生命周期

●Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了。

●Maven有三套相互独立的生命周期,分别是:

①Clean Lifecycle在进行真正的构建之前进行一些清理工作。

②Default Lifecycle构建的核心部分,编译,测试,打包,安装,部署等等。

③Site Lifecycle生成项目报告,站点,发布站点。

再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean,这个clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。

 clean生命周期

Clean生命周期一共包含了三个阶段:

①pre-clean 执行一些需要在clean之前完成的工作

②clean 移除所有上一次构建生成的文件

③post-clean 执行一些需要在clean之后立刻完成的工作

11.3 Site生命周期

①pre-site 执行一些需要在生成站点文档之前完成的工作

②site 生成项目的站点文档

③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

④site-deploy 将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

11.4 Default生命周期

Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:

validate

generate-sources

process-sources

generate-resources

process-resources 复制并处理资源文件,至目标目录,准备打包。

compile 编译项目的源代码。

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources 复制并处理资源文件,至目标测试目录。

test-compile 编译测试源代码。

process-test-classes

test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。

prepare-package

package 接受编译好的代码,打包成可发布的格式,如JAR。

pre-integration-test

integration-test

post-integration-test

verify

install将包安装至本地仓库,以让其它项目依赖。

deploy将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

 Maven核心概念

Maven之所以能够实现自动化的构建,和它的设计是紧密相关的。我们对Maven的学习就围绕它的九个核心概念展开:

①POM

②约定的目录结构

③坐标

④依赖管理

⑤仓库管理

⑥生命周期

⑦插件和目标

⑧继承

⑨聚合

 

配置maven的配置文件

在这一节中,我们来看看Maven核心程序的安装和本地仓库的必要设置。然后我们就可以编写第一个Maven程序了。

① 检查JAVA_HOME环境变量。

Maven是使用Java开发的,所以必须知道当前系统环境中JDK的安装目录。

C:\Windows\System32>echo %JAVA_HOME%

D:\DevInstall\jdk1.7.0_07

②解压Maven的核心程序。

将apache-maven-3.2.2-bin.zip解压到一个非中文无空格的目录下。例如:

D:\DevInstall\apache-maven-3.2.2

③配置环境变量。

M2_HOME

D:\DevInstall\apache-maven-3.2.2

path

%M2_HOME%\bin或D:\DevInstall\apache-maven-3.2.2\bin

④查看Maven版本信息验证安装是否正确

C:\Windows\System32>mvn -v

Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)

Maven home: D:\DevInstall\apache-maven-3.2.2\bin\..

Java version: 1.7.0_07, vendor: Oracle Corporation

Java home: D:\DevInstall\jdk1.7.0_07\jre

Default locale: zh_CN, platform encoding: GBK

OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

Maven的坐标

使用如下三个向量在Maven的仓库中唯一的确定一个Maven工程。

[1]groupId:公司或组织的域名倒序+当前项目名称

[2]artifactId:当前项目的模块名称

[3]version:当前模块的版本

<groupId>com.atguigu.maven</groupId>

<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>

 

Maven的依赖

当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。例如:commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。

通过第二个Maven工程我们已经看到,当前工程会到本地仓库中根据坐标查找它所依赖的jar包。

配置的基本形式是使用dependency标签指定目标jar包的坐标。

<dependencies>

<dependency>

<!—坐标 -->

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.10</version>

<!-- 依赖的范围 -->

<scope>test</scope>

</dependency>

</dependencies>

 

 直接依赖和间接依赖

 

如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。

 

 

依赖的范围

 

①compile

[1]main目录下的Java代码可以访问这个范围的依赖

[2]test目录下的Java代码可以访问这个范围的依赖

[3]部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下

②test

[1]main目录下的Java代码不能访问这个范围的依赖

[2]test目录下的Java代码可以访问这个范围的依赖

[3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下

 

③provided

[1]main目录下的Java代码可以访问这个范围的依赖

[2]test目录下的Java代码可以访问这个范围的依赖

[3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下

 

④runtime[了解]

[1]main目录下的Java代码不能访问这个范围的依赖

[2]test目录下的Java代码可以访问这个范围的依赖

[3]部署到Tomcat服务器上运行时会放在WEB-INF的lib目录下

 

依赖的排除

有的时候为了确保程序正确可以将有可能重复的间接依赖排除。请看如下的例子:

●假设当前工程为survey_public,直接依赖survey_environment。

●survey_environment依赖commons-logging的1.1.1对于survey_public来说是间接依赖。

●当前工程survey_public直接依赖commons-logging的1.1.2

●加入exclusions配置后可以在依赖survey_environment的时候排除版本为1.1.1的commons-logging的间接依赖

<dependency>

<groupId>com.atguigu.maven</groupId>

<artifactId>Survey160225_4_Environment</artifactId>

<version>0.0.1-SNAPSHOT</version>

<!-- 依赖排除 -->

<exclusions>

<exclusion>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.1.2</version>

</dependency>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值