小饶学编程之JAVA EE第三部分——项目管理工具:4Maven

一、开发中遇到的问题

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

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

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

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

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

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

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

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

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

二、maven

Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的工具。

Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上

Maven主要有两大功能:管理依赖、项目构建。

依赖指的就是jar包。

2.1什么是构建

绘制构建流程图

2.2构建过程

在这里插入图片描述

2.3项目构建的方式

1、 Eclipse

使用eclipse进行项目构建,相对来说,步骤比较零散,不好操作

2、 Ant

它是一个专门的项目构建工具,它可以通过一些配置来完成项目构建,这些配置要明确的告诉ant,源码包在哪?目标class文件应该存放在哪?资源文件应该在哪

3、 Maven

它是一个项目管理工具,他也是一个项目构建工具,通过使用maven,可以对项目进行快速简单的构建,它不需要告诉maven很多信息,但是需要安装maven去的规范去进行代码的开发。也就是说maven是有约束的。

三、maven的安装

3.1下载

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

在这里插入图片描述

在这里插入图片描述

下载完成后直接解压

3.2安装

第一步:配置maven的环境变量MAVEN_HOME D:\apache-maven-3.6.3

在这里插入图片描述

第二步:配置maven的环境变量PATH %MAVEN_HOME%\bin
在这里插入图片描述

第三步:测试maven是否安装成功,在系统命令行中执行命令:mvn –v

在这里插入图片描述

3.3 配置maven

在maven中有两个配置文件:用户配置、全局配置(默认)

3.3.1 全局配置

在maven安装目录的conf里面有一个settings.xml文件,这个文件就是maven的全局配置文件。

该文件中localRepository用来配置maven本地仓库的地址
在这里插入图片描述

默认在系统的用户目录下的m2/repository中,该目录是本地仓库的目录。

在这里插入图片描述

3.3.2 用户配置

用户配置文件的地址:~/.m2/settings.xml,该文件默认是没有,需要将全局配置文件拷贝一份到该目录下。
在这里插入图片描述

重新指定本地仓库地址,如果不指定,则默认是~/.m2/repository目录,如果用户配置文件不存在,则使用全局配置文件的配置。
在这里插入图片描述

3.3.3修改Maven中央仓库地址

Maven是当前流行的项目管理工具,但官方的库在国外经常连不上,连上也下载速度很慢。因此我们可以修改中央仓库地址为国内一些企业提供的地址。

修改 m a v e n . h o m e / c o n f 或 者 {maven.home}/conf或者 maven.home/conf{user.home}/.m2文件夹下的settings.xml文件,在标签下加入上述内容即可。如下:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <mirrors>
        <!-- 阿里云仓库 -->
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
         	<url>https://maven.aliyun.com/repository/central</url>
        </mirror>
    
        <!-- 中央仓库1 -->
        <mirror>
            <id>repo1</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo1.maven.org/maven2/</url>
        </mirror>
    
        <!-- 中央仓库2 -->
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>
    </mirrors> 
</settings>

四、创建maven工程

4.1Maven工程结构

Project

​ |–src(源码包)

​ |–main(正常的源码包)

​ |–java(.java文件的目录)

​ |–resources(资源文件的目录)

​ |–test(测试的源码包)

|–java

​ |–resources

​ |–target(class文件、报告等信息存储的地方)

​ |–pom.xml(maven工程的描述文件)

4.2创建maven工程

4.2.1使用命令行创建

创建java工程

mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-quickstart

创建web工程

mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-webapp

4.2.2使用eclipse创建

右键—>Maven—>Maven Project,选择模板,填写包名,项目名称即可。

4.3Maven命令的使用

4.3.1 Maven compile

编译的命令

4.3.2 Maven clean

清除命令,清除已经编译好的class文件,具体说清除的是target目录中的文件

4.3.3 Maven test

测试命令,该命令会将test目录中的源码进行编译

4.3.4Maven package

打包命令

4.3.5 Maven install

安装命令,会将打好的包,安装到本地仓库

4.3.6组合命令

以上命令可以进行组合使用,如:

mvn clean compile
mvn clean test
mvn clean package
mvn clean install

五、M2Eclipse

5.1下载插件

5.2查看是否安装成功

在这里插入图片描述

5.3、设置maven安装路径

在这里插入图片描述

5.4、设置Maven的用户配置

在这里插入图片描述

5.5、创建工程

eclipse中创建maven工程可以分为两种,一种是使用模板创建,一种是不使用模板创建。

六、Maven的核心概念

6.1 坐标

6.1.1、 什么是坐标?

在平面几何中坐标(x,y)可以标识平面中唯一的一点。在maven中坐标就是为了定位一个唯一确定的jar包。

Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范

拥有了统一规范,就可以把查找工作交给机器

6.1.2、 Maven坐标主要组成

groupId:定义当前Maven组织名称

artifactId:定义实际项目名称

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

6.2 依赖管理

6.2.1、 依赖范围

在这里插入图片描述

其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

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

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

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

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

6.2.2 依赖传递

A、B、C

B工程依赖A工程,C工程依赖B工程,那么B工程是C工程的直接依赖,A工程是C工程的间接依赖

6.2.2.1创建MavenThird工程

第一步:创建mavenThird工程

第二步:创建MavenThird.java

在这里插入图片描述

第三步:创建TestMavenThird.java

6.2.2.2 分析第一解决依赖和第二直接依赖

在这里插入图片描述

6.2.2.3 依赖范围传递

在这里插入图片描述

上面第一行表示第二直接依赖范围

中间的交叉单元格表示传递性依赖范围。

总结:

Ø 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。

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

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

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

6.2.3 依赖冲突

在maven中存在两种冲突方式:一种是跨pom文件的冲突,一致是同一个pom文件中的冲突。

6.2.3.1跨pom文件的冲突

MavenFirst的pom文件中依赖来junit的4.9版本,那边MavenSecond和MavenThird中都是使用了4.9版本。

在这里插入图片描述

如果MavenSecond中重新依赖junit的4.8版本,那么MavenSecond和MavenThird中都是使用了4.8本,这体现来依赖的就近使用原则。

在这里插入图片描述

依赖的jar包如下:

在这里插入图片描述

6.2.3.2同一个pom文件的冲突

在这里插入图片描述

6.2.4 可选依赖

Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。

在这里插入图片描述

6.2.5 排除依赖

Exclusions标签可以排除依赖

在这里插入图片描述

6.3 生命周期

Maven有三个生命周期:clean生命周期、default生命周期、site生命周期

生命周期可以理解为项目构建的步骤集合。

生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段。

6.3.1 Clean生命周期

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

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

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

mvn clean命令,等同于 mvn pre-clean clean。只要执行后面的命令,那么前面的命令都会执行,不需要再重新去输入命令。

有Clean生命周期,在生命周期又有clean阶段。

6.3.2 Default生命周期(重点)

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中,只要在同一个生命周期,你执行后面的阶段,那么前面的阶段也会被执行,而且不需要额外去输入前面的阶段,这样大大减轻了程序员的工作。

6.3.3 Site生命周期

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

site 生成项目的站点文档

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

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

6.4 插件

插件(plugin),每个插件都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是有插件来实现的。

比如:compile就是一个插件实现的功能。

6.4.1 编译插件

在这里插入图片描述

6.4.2 Tomcat插件

默认输入tomcat:run去使用tomcat插件来启动web工程,但是默认的tomcat插件使用的tomcat版本是tomcat6

而目前主流的tomcat,是使用的tomcat7,需要手动配置tomcat插件

  <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
        </plugin>

在这里插入图片描述

使用tomcat7来运行web工程,它的命令是:tomcat7:run

6.5、继承

创建继承项目

6.6、聚合

创建聚合项目

七、仓库

7.1、什么是Maven仓库

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

7.2、仓库的分类

  • 本地仓库

默认在~/.m2/repository,如果在用户配置中有配置,则以用户配置的地址为准

  • 远程仓库

中央仓库

http://repo1.maven.org/maven2

  • 私服

7.3、私服

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值