目录
Maven入门学习
/  

Maven入门学习

Maven简介

Apeache Maven是一种纯Java编写的、开源的、跨平台的、标准化的、基于项目对象模型。

跨平台:跨os平台、跨IDE(集成开发环境)平台。例如:在Eclipse上写的项目如果要导入到idea中,比较麻烦,而直接使用maven项目,十分顺利。

标准化:项目构建标准化、项目结构标准化。

用户画像:更多的属性组成用户画像。比如:你在一个平台上使用的时间越长,这个平台就会根据大数据更加了解你。

Maven工作原理

uWcbJx.png

uWRfQf.png

  • Dependency代表依赖:在引入依赖时,先在本地库中查找,**如果没有在向上一层寻找,直至找到,再返回到本地的仓库。如果第二次再使用时,直接在本地仓库就可以找到。**在公司中,如果一个同事下载好了,会保存到公司的局域网中,会节约带宽。
  • 防火墙:一般就是对ip和端口号的规则的集合,符合规则或者不负责就可以过或者不能过。

Maven的安装配置

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

这个仓库不行

    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>
<localRepository>/media/nianshao/59D5FCE97201B8A75/java/repository</localRepository>
  • maven测试命令
    • mvn help:system

Maven的项目结构

uW2Oqe.png

package包的命名

一个项目中的包的名称一般可以分为四到五级:

  • 第一级:甲方公司域名的倒序,或开发方公司域名的倒序。为了保证项目在全球是唯一的。例如,cn.edu.aynu
  • 第二级:项目名称,为了保证项目在甲方公司中的唯一性。例如,cn.edu.aynu.sms。
  • 第三级:项目模块名称,为了保证在当前项目中资源的唯一性。例如,cn.edu.aynu.sms.aaa.bbb.ccc
  • 第四级:功能顶层包,为了区分各种资源的功能,例如,cn.edu.aynu.sms.aaa.bbb.ccc.service cn.edu.aynu.sms.aaa.bbb.ccc.dao
  • 第五级:impl包,用于存放接口实现类,例如,cn.edu.aynu.sms.aaa.bbb.ccc.service.impl

Maven的构建命令

  • mvn compile
    • 编译项目
  • mvn test
    • test目录测试
  • mvn clean
    • 清除已经编译过的代码, 即target目录

组合命令:

  • mvn clean test
  • mvn clean package
    • 打包
    • · 将编译好的代码打包成为可发布的格式,如 JAR,WAR
  • mvn clean install
    • 安装到本地仓库
    • · 将包安装至本地仓库,以让其它项目依赖

常用maven打包命令

mvn clean package -Dmaven.test.skip=true

Maven跳过单元测试的两种方式

-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

Maven的生命周期

Maven的生命周期与项目生命周期

一个项目的构建过程需要经历被编译、被测试、被打包、被发布等生命阶段。这些项目生命阶段的构建是由谁完成的呢?是由Maven生命周期的各个阶段完成的。

Maven只所以非常强大的一个重要的原因是,它拥有十分完善的生命周期模型(Lifecycle)。Maven的生命周期是对所有项目的构建过程进行的抽象和统一,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。所以,Maven的生命周期是用于管理项目生命周期的。

Maven有三套相互独立的生命周期,分别是Clean、Default和Site,分别用于完成三类完全不同的任务。每个生命周期又包含多个生命阶段(Phase),这些生命阶段是有时间先后顺序的。即后面的阶段的执行,必定是执行过了前面的阶段。

Default生命周期

Default生命周期是Maven最重要的生命周期,用于构建项目,其中定义了构建项目时所需要执行的所有阶段。下面列出了比较重要和常用的阶段。

Default生命周期是Maven最重要的生命周期,用于构建项目,其中定义了构建项目时所需要执行的所有阶段。下面列出了比较重要和常用的阶段。
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,WAR
pre-integration-test
integration-test
post-integration-test
verify
install   将包安装至本地仓库,以让其它项目依赖
deploy   将最终的包复制到远程的仓库,以让其它开发人员与项目共享

Clean生命周期

Clean生命周期用于清除之前指令执行结果 。其包含三个生命阶段。
pre-clean   执行一些需要在clean之前完成的工作
clean   移除所有上一次构建生成的文件
post-clean   执行一些需要在clean之后立刻完成的工作

Site生命周期

Site生命周期用于建立和发布项目站点。其包含四个生命阶段。
pre-site   执行一些需要在生成站点文档之前完成的工作
site   生成项目的站点文档
post-site   执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy   将生成的站点文档部署到特定的服务器上

项目依赖管理

项目版本号级联修改

https://www.jianshu.com/p/4b4a2af013de

mvn versions:set -DnewVersion=1.1.0

2 当新版本号设置不正确时可以撤销新版本号的设置

mvn versions:revert

3 确认新版本号无误后提交新版本号的设置

mvn versions:commit

直接依赖与间接依赖

以来传递

jar包分类

(1)编译、运行、打包时均不需要的Jar包

(2)编译、运行时需要,但打包时不需要的Jar包

(3)编译时不需要,但运行、打包时需要的Jar包

(4)编译、运行、打包时均需要的Jar包

依赖传递范围的设定

(1)test

(2)provided

(3)runtime

(4)compile

(5)system

  • <systemPath>${basedir}/lib/xxx.jar</systemPath>

(6)import

可选依赖与排除依赖

依赖冲突

直接依赖冲突

统一管理版本号

依赖的继承

直接继承

可选继承

聚合

具有可选依赖的聚合父工程

小技巧

对于 网上找不到 jar包的坐标的,有两种方法。

  1. 通过maven命令 将 jar包 安装到本地仓库。见http://blog.lacknb.cn/articles/2020/03/28/1585378266095.html
  2. 通过pom.xml指定jar的路径。
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>${oauth.version}</version>
            <systemPath>${project.basedir}/lib/xxxx-2.0-SNAPSHOT.jar</systemPath>
        </dependency>

maven多环境配置

    <profiles>
        <!-- 测试环境 -->
        <profile>
            <id>test</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <profileActive>test</profileActive>
            </properties>
        </profile>
        <!--开发环境-->
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
        </profile>
        <!-- 生产环境 -->
        <profile>
            <id>prod</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
        </profile>
    </profiles>

默认dev环境

打包后的包名加上时间

<properties>
        <!--配置打包后的时间格式化-->
        <maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
        <!--配置时间的时区-->
        <maven.build.timestamp.timezone>GMT+8</maven.build.timestamp.timezone>
</properties>

<finalName>yourapplicationname-${profileActive}-${maven.build.timestamp}</finalName>

打包后的效果:xxxx-prod-202304171311.jar

profileActive 是在多环境中配置的,要先配置下。


标题:Maven入门学习
作者:gitsilence
地址:http://blog.lacknb.cn/articles/2019/10/08/1577974151787.html