maven

Maven

 

maven的相关概念

a) 构建的概念

b) 什么是maven

c) 为什么要用maven

1、Maven的下载及安装

2、创建第一个maven工程

a) Maven的工程结构

b) Maven的命令

3、MavenEclipse插件

a) 创建maven工程

b) 插件的配置

4、Maven的核心概念

a) 坐标

b) 继承

c) 依赖

d) 聚合

e) 生命周期

5、Maven的仓库管理

a) 中央仓库

b) 私服

 

Maven的相关概念

1.1 项目开发中遇到的问题

1、都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行?

2、为什么在我的机器上可以正常打包,而配置管理员却打不出来?

3、项目组加入了新的人员,我要给他说明编译环境如何设置,但是让我挠头的是,有些细节我也记不清楚了。

4、我的项目依赖一些jar包,我应该把他们放哪里?放源码库里?

5、这是我开发的第二个项目,还是需要上面的那些jar包,再把它们复制到我当前项目的svn库里吧

6、现在是第三次,再复制一次吧    ----- 这样真的好吗?

7、我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组

-----这不是一个好的分发机制,太多的环节可能导致出现bug

8、项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署,太麻烦了。

 

1.2 解决方案

需要一个工具进行项目管理,对项目中的jar包进行管理、jar包的版本管理、项目的打包的流程管理。实现一步构建。

 

1.2.1 Ant

可以对项目进行构建。缺少生命周期的管理,需要自己手工定义。需要自己定义一个build.xml,缺少jar包的管理。对工程的目录结构没有约束。

 

1.2.2 Maven

拥有约定,知道你的代码在哪里,放到哪里去

拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情

 

 

1.3 什么是maven

maven翻译为“专家”,“内行”。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建依赖管理项目信息管理

 

Maven主要有两个功能:

1、项目构建

2、依赖管理


 

1.4 什么是构建

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Maven定义的工程构建生命周期

 

 

 

1.5 Maven的模型

 

 

Maven就是一个工程构建工具。

 

Maven的下载及安装

2.1 下载

Maven的官方网站:http://maven.apache.org/

 

使用的版本:apache-maven-3.0.5

 

Maven是使用java开发,需要安装jdk1.6以上,推荐使用1.7

 

2.2 Maven的安装步骤

第一步:安装jdk

第二步:把maven解压缩。

 

第三步:配置环境变量MAVEN_HOME.

D:\temp\javaee18\apache-maven-3.0.5

第四步:在path中添加%MAVEN_HOME%/bin

第五步:测试

Mvn -v测试

 

 

创建maven项目

3.1 配置本地仓库的位置

默认位置:~/.m2/repository

 

修改本地仓库路径,需要修改settings.xml

 

 

全局配置:%MAVEN_HOME%/conf/settings.xml

用户配置:在新的maven仓库的位置复制一个settings.xml

 

3.2 创建一个maven工程

3.2.1 Maven工程结构

Project

  |-src

|-main

  |-java

  |-resource

|-test

  |-java

  |-resource

  |-target

  |-pom.xml

 

3.2.2 创建一个maven工程

 

编写pom.xml:

  

  4.0.0

  

  

  cn.itcast.maven

  

  HelloWorld

  

  

  0.0.1

  

  Hello

  

  

junit

junit

4.9

test

 

打包方式,默认是jar包。

 

3.2.3 使用maven编译:

mvn compile

 

3.2.4 测试

mvn test

 

下载的插件:

 

 

3.2.5 打包

 

mvn package

 

3.2.6 安装到本地仓库

mvn install

 

3.3 命令组合使用:

mvn clean install

mvn clean compile

mvn clean package

 

Eclipse中使用maven

4.1 Maven插件

 

 

 

 

 

4.2 创建maven工程

4.2.1 第一种方法

 

 

工程骨架选择:

 

 

 

 

4.2.2 第二种方法

 

 

配置pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0modelVersion>

<groupId>com.itheimagroupId>

<artifactId>maven-secondartifactId>

<version>0.0.1-SNAPSHOTversion>

<dependencies>

<dependency>

<groupId>junitgroupId>

<artifactId>junitartifactId>

<version>4.12version>

dependency>

dependencies>

project>

 

 

注意:如果要依赖本地工程打成的jar包,需要先安装到本地仓库。

 

 

查找jar包的g-a-v可以使用http://search.maven.org/查找。

 

Maven的核心概念

坐标、maven的依赖管理、生命周期、继承、聚合、插件。

 

5.1 坐标

groupId:定义当前Maven组织名称

artifactId:定义实际项目名称

version:定义当前项目的当前版本

 

packaging:定义该项目的打包方式,如果没有此项则默认为jar包。

常用的打包方式:jarwarpom(只有一个pom文件)

 

5.2 依赖管理

就是项目中jar 包的管理。可以使用pom文件中定义jar包的坐标,管理依赖。

 

5.2.1 依赖的范围管理

1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效

2.test:测试依赖范围。只对于测试classpath有效

3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api

4.runtime:运行时提供。例如:jdbc驱动

 

如果不指定范围就是compile。对所有的classpath都生效。

 

5.2.2 依赖的传递

 

 

5.2.2.1 依赖范围对依赖传递的影响

 

Compile:不管依赖多少层,依赖都会向下传递。Test:不会向下传递依赖。

当第二直接依赖的范围是test的时候,依赖不会得以传递。

当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided

当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime

 

5.2.3 依赖冲突

就近原则:如果本工程中配置jar包的版本和依赖传递过来的jar包的版本不一致,使用本工程配置的jar包版本。

 

本工程中配置同一个jar包的多个 版本,谁在后面配置使用谁。

 

5.2.4 可选依赖

在依赖的节点中添加一个optional选项,来缺点此jar包是否向下传递,如果为true就不传递,如果为false就传递,默认为false

 

 

5.2.5 排除依赖

当依赖以及传递到本工程中,我们不想要jar包。需要排除。

 

 

5.3 生命周期

Maven中有三大生命周期。

Clean

Default

Site

 

生命周期可以理解为构建工程的步骤。

 

5.3.1 clean:清理项目

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

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

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

 

5.3.2 Default:默认生命周期

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 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

 

运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

 

5.3.3 site:生成项目站点

Site生命周期

 

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

site 生成项目的站点文档

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

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

 

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

 

5.4 Maven的插件

maven中几乎所有的功能都是通过插件来完成的。可以在pom文件中对插件进行配置。

 

5.4.1 配置编译插件

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.pluginsgroupId>

<artifactId>maven-compiler-pluginartifactId>

<configuration>

<source>1.7source>

<target>1.7target>

<encoding>UTF-8encoding>

configuration>

plugin>

plugins>

build>

 

5.4.2 Tomcat插件

使用tomcat插件不需要本地安装tomcat

第一步:创建一个web工程:

 

 

第二步:在pom文件中添加插件配置:

<build>

<plugins>

<plugin>

<groupId>org.apache.tomcat.mavengroupId>

<artifactId>tomcat7-maven-pluginartifactId>

<configuration>

<port>8080port>

<path>/maven-webpath>

configuration>

plugin>

plugins>

build>

 

第三步:启动tomcat

tomcat7:run

tomcat:run (默认为tomcat6)

5.5 继承

工程之间继承继承的是一个pom文件的配置。

1、依赖的继承

2、Jar包版本的管理

3、插件版本的管理

 

父工程必须是pom工程。

 

 

子工程可以有两种方法创建:

1、改造现有工程

2、创建新工程

 

 

 

 

 

 

5.5.1 Jar包的版本管理

 

在父工程中定义jar包的版本,并不实际依赖。子工程中如果使用此jar包,需要添加依赖,可以不用添加版本号。

 

5.5.2 提取版本号

 

 

5.6 聚合

把独立的模块聚合成一个完整的工程。

需要使用一个pom工程实现。

 

创建一个聚合工程:

 

 

 

 

先创建一pom工程,然后创建maven模块。最终 把所有模块打包成一个war包。

 

启动的时候需要启动聚合工程。

1、配置tomcat插件

2、tomcat7:run

仓库管理

6.1 什么是Maven仓库?

用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging

6.2 仓库的分类

1、本地仓库

~/.m2/repository/

每个用户只有一个本地仓库

2、远程仓库

中央仓库:Maven默认的远程仓库,不包含版权资源

              http://repo1.maven.org/maven2

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

 

 

6.3 Maven私服

需要使用Nexus来搭建私服。Nexus就是一个文本工程。War包。

 

6.3.1 配置私服

只需要下载Nexus然后把war部署到tomcat即可。

 

6.3.2 访问私服

http://localhost:8080/nexus-2.7.0-06

 

直接查询jar包的坐标。

 

管理私服,需要登录:

用户名:admin

密码:admin123

 

 

 

对外公布的仓库:

 

 

6.3.3 私服文件存放路径

 

 

6.4 使用私服

在本地仓库的settings.xml中配置mirrors节点就可以使用私服。

在本地仓库setting.xml中配置如下:

 

 

 

 nexus

 *

 http://localhost:8080/nexus-2.7.0-06/content/groups/public/

 

 

 

6.5 部署构建到Nexus

第一步:配置settings.xml

添加一个登录到私服的用户名和密码。

 

  releases

admin

admin123

snapshots

admin

admin123

 

 

 

第二步:配置pom文件。

<distributionManagement>

<repository>

<id>releasesid>

<name>Internal Releasesname>

<url>http://localhost:8080/nexus-2.7.0-06/content/repositories/releases/url>

repository>

<snapshotRepository>

<id>snapshotsid>

<name>Internal Snapshotsname>

<url>http://localhost:8080/nexus-2.7.0-06/content/repositories/snapshots/url>

snapshotRepository>

distributionManagement>

 

第三步:mvn deploy部署

 


你可能感兴趣的:(java)