Maven学习

Maven简介及安装

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。
构建过程的几个主要环节

  • 清理:删除以前的编译结果,为重新编译做好准备
  • 编译:将java源程序编译为字节码文件
  • 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
  • 报告:在每一个测试后以标准的格式记录和展示测试结果
  • 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。java工程对应jar包,web工程对应war包
  • 安装:在Maven环境下特指将打包的结果-jar包或war包安装到本地仓库中
  • 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
    安装
    下载maven安装包解压最好不要有中文空格目录
    在这里插入图片描述
    配置环境变量
    M2_HOME D:\java\apache-maven-3.6.0
    path %M2_HOME%\bin
    查看Maven版本信息验证安装是否正确
    cmd 命令窗口下mvn -v
    在这里插入图片描述
    修改maven配置文件
    53行配置maven位置下载位置
 <localRepository>D:\java\apache-maven-3.6.0\localRespository</localRepository>

146行配置国内阿里云下载

  <mirrors>
<mirror>  
    <id>nexus-aliyun</id>  
    <mirrorOf>central</mirrorOf>    
    <name>Nexus aliyun</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror> 
  </mirrors>

218行配置jdk

  <profiles>
 <profile>
    <id>development</id>
    <activation>
      <jdk>1.8</jdk>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
      <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
  </profile>
 </profiles>

几个基本的Maven命令
mvn compile 编译
mvn clean 清理
mvn test 测试
mvn package 打包
运行Maven命令时一定要进入pom.xml文件所在的目录!

Maven核心概念

  • POM:项目对象模型,pom.xml是maven工程的核心配置文件,相当于web工程中的web.xml
  • 约定的目录结构
  • 坐标:maven中的坐标使用三个向量在仓库中唯一定位一个maven工程
    1.groupid:公司或组织域名倒序+项目名称
    2.artifactid:模块名
    3.version:版本号
  • 依赖管理
    Maven中最关键的部分,使用Maven最主要的是使用它的依赖管理功能。
    1.依赖的目的
    当Ajar包用到了Bjar包中的某些类时,A就对B产生了依赖,在项目中以依赖的方式引入一个我们需要的jar包就是使用 dependency 标签指定被依赖 jar 包的坐标就可以了。
<dependency>
     <groupId>com.yxm.maven</groupId> 
     <artifactId>Hello</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>compile</scope>
</dependency>

2.依赖的范围
目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范 围有几个可选值,我们用得到的是:compile、test、provided 三个。
从项目结构角度理解 compile 和 test 的区别
在这里插入图片描述
从开发和运行这两个不同阶段理解compile和provided的区别
在这里插入图片描述
有效性总结

compiletestprovided
主程序×
测试程序
参与部署××

3.依赖的排除
如果我们在当前工程中引入了一个依赖是A,而A又依赖了B,那么Maven会自动将A依赖的B引入当前工程,但是个别情况下B有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入A的时候将B排除。

<dependency>
     <groupId>com.yxm.maven</groupId>
     <artifactId>HelloFriend</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <scope>compile</scope>
     <exclusions> 
        <exclusion> 
            <groupId>commons-logging</groupId> 
            <artifactId>commons-logging</artifactId> 
        </exclusion> 
      </exclusions> 
</dependency>

4.统一管理所依赖 jar 包的版本
对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提
取出来统一声明版本号

<properties>
     <yxm.spring.version>4.1.1.RELEASE</yxm.spring.version>
</properties>

其中 yxm.spring.version 部分是自定义标签。引用前面声明的版本号

 <dependencies>
 <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${yxm.spring.version}</version>
 </dependency>
……
</dependencies>

设置中文编码为UTF-8

<properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
  • 仓库管理
    本地仓库:为当前本机电脑上的所有 Maven 工程服务。
    远程仓库:(1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
    (2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
    (3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

  • 生命周期

  • 插件和坐标

  • 继承

  • 聚合

生命周期

我们开发一个项目的时候,通常有这些环节:创建项目、编写代码、清理已编译的代码、编译代码、执行单元测试、打包、集成测试、验证、部署、生成站点等,这些环节组成了项目的生命周期,这些过程也叫做项目的构建过程。
maven出来之后,项目生命周期中的这些环节都被简化了,被规范化了。这些都是maven约定好的,所以清理代码用一个命令mvn clean就可以完成,不需要我们去配置清理的目标目录;用mvn compile命令就可以完成编译的操作;用mvn test就可以自动运行测试用例;用mvn package就可以将项目打包为jar、war格式的包,能够如此简单,主要还是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之后立刻完成的工作

用户可以通过mvn pre-clean来调用clean生命周期中的pre-clean阶段需要执行的操作。
调用mvn post-clean会执行上面3个阶段所有的操作,上文中有说过,每个生命周期中的后面的阶段会依赖于前面的阶段,当执行某个阶段的时候,会先执行其前面的阶段。

default生命周期

这个是maven主要的生命周期,主要被用于构建应用,包含了23个阶段。

生命周期阶段描述
validate校验:校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
initialize初始化:初始化构建状态,比如设置属性值。
generate-sources生成源代码:生成包含在编译阶段中的任何源代码。
process-sources处理源代码:处理源代码,比如说,过滤任意值。
generate-resources生成资源文件:生成将会包含在项目包中的资源文件。
process-resources编译:复制和处理资源到目标目录,为打包阶段最好准备。
compile处理类文件:编译项目的源代码。
process-classes处理类文件:处理编译生成的文件,比如说对Java class文件做字节码改善优化。
generate-test-sources生成测试源代码:生成包含在编译阶段中的任何测试源代码。
process-test-sources处理测试源代码:处理测试源代码,比如说,过滤任意值。
generate-test-resources生成测试源文件:为测试创建资源文件。
process-test-resources处理测试源文件:复制和处理测试资源到目标目录。
test-compile编译测试源码:编译测试源代码到测试目标目录.
process-test-classes处理测试类文件:处理测试源码编译生成的文件。
test测试:使用合适的单元测试框架运行测试(Juint是其中之一)。
prepare-package准备打包:在实际打包之前,执行任何的必要的操作为打包做准备。
package打包:将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
pre-integration-test集成测试前:在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
integration-test集成测试:处理和部署项目到可以运行集成测试环境中。
post-integration-test集成测试后:在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
verify验证:运行任意的检查来验证项目包有效且达到质量标准。
install安装:安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy部署:将最终的项目包复制到远程仓库中与其他开发者和项目共享。

site生命周期

site生命周期的目的是建立和发布项目站点,Maven能够基于pom.xml所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。主要包含以下4个阶段:

阶段描述
pre-site执行一些需要在生成站点文档之前完成的工作
site生成项目的站点文档
post-site执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy将生成的站点文档部署到特定的服务器上

Maven插件

●Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
●每个插件都能实现多个功能,每个功能就是一个插件目标。
●Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
例如:compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标。
自定义Maven插件
maven中的插件是有很多目标(goal)组成的,开发插件,实际上就是去编写插件中目标的具体代码。每个目标对应一个java类,这个类在maven中叫做MOJO,maven提供了一个Mojo的接口,我们开发插件也就是去实现这个接口的方法,这个接口是:

org.apache.maven.plugin.Mojo

接口有3个方法:

void execute() throws MojoExecutionException, MojoFailureException;
void setLog( Log log );
Log getLog();

execute:这个方法比较重要,目标的主要代码就在这个方法中实现,当使用mvn命令调用插件的目标的时候,最后具体调用的就是这个方法。
setLog:注入一个标准的Maven日志记录器,允许这个Mojo向用户传递事件和反馈
getLog:获取注入的日志记录器
实现一个插件的具体步骤:
1、 创建一个maven构件,这个构件的packaging比较特殊,必须为maven-plugin,表示这个构件是一个插件类型,如下:
pom.xml中的packageing元素必须如下值:

     <packaging>maven-plugin</packaging>

2、导入maven插件依赖:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.0</version>
</dependency>

<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.4</version>
    <scope>provided</scope>
</dependency>

3、创建一个目标类,需要继承org.apache.maven.plugin.AbstractMojo
4、目标类中添加注解@Mojo注解:

  @org.apache.maven.plugins.annotations.Mojo(name="目标名称")

注意@Mojo注解用来标注这个类是一个目标类,maven对插件进行构建的时候会根据这个注解来找到这个插件的目标,这个注解中还有其他参数,后面在详细介绍。
5、在目标类的execute方法中实现具体的逻辑
6、安装插件到本地仓库:插件的pom.xml所在目录执行下面命令

  mvn clean install

7、让使用者去使用插件
最后:总结一个我面试的时候一个面试题除了clean和package命令你还使用过哪些命令?

  1. 创建Maven的普通java项目:
    mvn archetype:create
    -DgroupId=packageName
    -DartifactId=projectName
  2. 创建Maven的Web项目:
    mvn archetype:create
    -DgroupId=packageName
    -DartifactId=webappName
    -DarchetypeArtifactId=maven-archetype-webapp
  3. 编译源代码: mvn compile
  4. 编译测试代码:mvn test-compile
  5. 运行测试:mvn test
  6. 产生site:mvn site
  7. 打包:mvn package
  8. 在本地Repository中安装jar:mvn install
  9. 清除产生的项目:mvn clean
  10. 生成eclipse项目:mvn eclipse:eclipse
  11. 生成idea项目:mvn idea:idea
  12. 组合使用goal命令,如只打包不测试:mvn -Dtest package
  13. 编译测试的内容:mvn test-compile
  14. 只打jar包: mvn jar:jar
  15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
    ( -skipping 的灵活运用,当然也可以用于其他组合命令)
  16. 清除eclipse的一些系统设置:mvn eclipse:clean
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值