• maven的使用


    前言:

    接上篇安装完之后的使用

    一、为什么要使用maven这样的构建工具

    1.1 一个项目就是一个工程

    如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于maven就可以将一个项目拆分成多个工程

    1.2 项目中使用jar包,需要“复制”、“粘贴”项目的lib中

    同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。借助于maven,可以将jar包保存在“仓库”中,不管在哪个项目只要使用引用即可就行。

    1.3 jar包需要的时候每次都要自己准备好或到官网下载

    借助于maven我们可以使用统一的规范方式下载jar包,规范

    1.4 jar包版本不一致的风险

    不同的项目在使用jar包的时候,有可能会导致各个项目的jar包版本不一致,导致未执行错误。借助于maven,所有的jar包都放在“仓库”中,所有的项目都使用仓库的一份jar包。

    1.5 一个jar包依赖其他的jar包需要自己手动的加入到项目中

    FileUpload组件->IO组件,commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar

    极大的浪费了我们导入包的时间成本,也极大的增加了学习成本。借助于maven,它会自动的将依赖的jar包导入进来。

    二、maven是什么

    ① maven是一款服务于java平台的自动化构建工具

    make->Ant->Maven->Gradle

    名字叫法:我们可以叫妹文也可以叫麦文,但是没有叫妈文的。

    ② 构建

    构建定义:把动态的Web工程经过编译得到的编译结果部署到服务器上的整个过程。

    编译:java源文件[.java]->编译->Classz字节码文件[.class]

    部署:最终在sevlet容器中部署的不是动态web工程,而是编译后的文件

    ③ 构建的各个环节

    • 清理clean:将以前编译得到的旧文件class字节码文件删除

    • 编译compile:将java源程序编译成class字节码文件

    • 测试test:自动测试,自动调用junit程序

    • 报告report:测试程序执行的结果

    • 打包package:动态Web工程打War包,java工程打jar包

    • 安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置

    • 部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行

       2.1 maven的使用

    Maven的使用方式主要有两种,分别是命令行方式集成开发工具创建Maven项目

    命令行方式使用的场景:打包时shell中通过mvn命令打包

    集成开发工具使用的场景:新创建一个项目的时候,通过集成开发工具自动生成项目目录

    2.2 maven安装

    Linux下安装maven安装_84岁带头冲锋的博客-CSDN博客_linux 查看是否安装maven

    2.3 了解maven的目录结构

     通过which mvn命令查找到mvn的安装路径,然后进入到maven的安装目录可以看到maven的目录结构

    maven的目录结构如上图所示

    bin目录:存放maven运行的一些命令脚本

    boot目录:包含类加载器的框架,mvn使用boot加载类库

    conf目录:maven的配置文件

    lib目录:包含第三方依赖的类库以及自身的类库

    2.4 maven配置文件的settings.xml文件

    settings.xml对于maven来说相当于全局性的配置,作用于所有的项目

    简单介绍一下setting.xml文件中的几个参数配置:

    1.mirrors

    配置镜像地址,主要提供一个方便地切换中央仓库地址的途径,即jar包下载地址。

    2. localRepository

    本地仓库了路径,默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。

    运行 Maven 命令时,Maven 将下载依赖的文件放到localRepository指定的路径中。

    2.5 maven项目的目录结构

    maven项目需要遵守约定优于配置(Convention Over Configuration)的原则,每一个maven 项目都要有相同的工程结构。

    maven默认的文件结构如下:

    target路径:用来存放项目构建后的文件和目录、jar包、war包、编译的class文件

    pom.xml:项目对象模型(Project Object Model)的简称,作用类似ant的build.xml文件,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

    集成开发工具创建maven项目时,myeclipse和idea都集成了maven,默认写好了一些项目的目录结构。

    2.6 maven 仓库

    Maven 仓库就是指存放jar包的地方,有三种类型:本地仓库、中央仓库和远程仓库。

    本地仓库:在配置文件settings.xml中由localRepository指定,在安装 Maven 后并不会自动创建,它是在第一次执行 maven 命令的时候才被创建。

    中央仓库(私服):在配置文件settings.xml中由mirrors指定,是由 Maven 社区提供的仓库,其中包含了大量常用的库。

    中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。

    公司中央仓库地址maven.lianjia.com

    远程仓库:如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

    在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。

    当我们执行 Maven 构建命令时,Maven 开始按照本地仓库、中央仓库、远程仓库的顺序查找依赖库,本地找不到则去中央仓库找,中央仓库找不到则去远程仓库找。

    其实中央仓库和远程仓库的定义并没有明显的区别。

    2.7 pom.xml文件

    项目对象模型(project object model)是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

    pom.xml 文件应该位于每个 Project 的根目录。

    执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

    pom文件标签及含义

    project:工程的根标签。

    groupId:这是工程组的标识,groupId一般分为多个段,第一段为域,第二段为公司名称,比如com.companyname.orgname。

    artifactId:也是工程组的标识,它通常是工程的名称。例如,mls-biz-label。groupId 和 artifactId 一起唯一标识一个项目。

    version:这是工程的版本号。它用来区分不同的版本,SNAPSHOT表示快照,表示此项目还在开发中,不稳定。除了SNAPSHOT,还有LATEST,RELEASE。

    dependencies:项目引入需要的额外依赖,可以嵌套dependency。

    outputDirectory:配置主源码输出相对路径。

    三、maven常用命令

    mvn clean package  

    该命令依次执行了cleanresourcescompiletestResourcestestCompiletest、jar等7个阶段。

    clean:删除target中的字节码文件和测试报告的文件,clean能够保证上一次构建的输出不会影响到本次构建

    resources:拷贝main resources到main output directory

    compile:编译

    jar:打包

    -U参数:该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默认以天为单位检查更新,而持续集成的频率应该比这高很多

    -D代表(properties属性) 如果参数是-Denv=test,表示打包时在properties标签内部找到标签名称=env的标签,然后将value替换成test,如果不存在这个标签,则忽略这个参数

    -P代表(profiles配置文件) 如果参数是-Ptest,表示打包时使用properties标签内部的test配置

    常用命令

    查看maven版本

    mvn --version
    

    创建基于maven web archetype的 maven web工程
    创建maven的spring web工程  http://www.mkyong.com/maven/how-to-create-a-web-application-project-with-maven/

    mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
    

    创建maven的java普通工程

    mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app
    

    编译工程

    mvn compile
    

    执行单元测试

    mvn test
    

    打包

    mvn package
    

    安装到本地maven库

    mvn install
    

    将包部署到远程仓库

    mvn deploy
    

    将工程生成web站点,可以基于site的语法生成一个文档性的网站

    mvn site
    

    删除编译好的target目录

    mvn clean
    

    生成eclipse工程

    mvn eclipse:eclipse
    

    生成 IntelliJ IDEA工程

    mvn idea:idea
    

    如果maven工程中配置了jetty插件,则下面名称启动jetty内置服务器

    mvn jetty:run
    

    查看工程里面激活生效的profile,

    mvn help:active-profiles
    

    安装指定文件到本地仓库

    mvn install:install-file -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=1.0.0 -Dpackaging=jar -Dfile=<myfile.jar>
    

    查看实际pom信息

    mvn help:effective-pom
    

    分析项目的依赖信息 打印整个依赖树

    mvn dependency:analyze 或 mvn dependency:tree
    

    查看帮助信息

    mvn help:help 或 mvn help:help -Ddetail=true
    

    查看插件的帮助信息

    mvn :help,比如:mvn dependency:help 或 mvn ant:help
    

    打包时跳过测试

    mvn package -Dmaven.test.skip=ture
    

    使用 help 插件的  describe 目标来输出 Maven Help 插件的信息。

    mvn help:describe -Dplugin=help 
    

    使用Help 插件输出完整的带有参数的目标列

    mvn help:describe -Dplugin=help -Dfull 
    

    Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序

    mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main 
    

    Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序

    mvn dependency:resolve 
    

    想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行

    mvn install -X 
    

    构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件

    mvn install assembly:assembly 
    

    显示详细错误信息

    mvn -e            
    

    验证工程是否正确

    mvn validate        
    

    在集成测试可以运行的环境中处理和发布包

    mvn integration-test     
    

    运行任何检查,验证包是否有效且达到质量标准

    mvn verify          
    

    产生应用需要的任何额外的源代码,如xdoclet

    mvn generate-sources    
    

    下载源码

    mvn -DdownloadSources=true 
    

    下载javadoc

    mvn -DdownloadJavadocs=true 
    

    先下载最新版本,再执行打包操作

    mvn -U package

  • 相关阅读:
    Oracle RU 19.21及 datapatch -sanity_checks
    Oracle 云服务即将支持 PostgreSQL!
    《C++ 并发编程实战 第二版》学习笔记目录
    hbuildx mac离线安装插件
    计组 | 存储器容量扩展(字扩展、位扩展、字位扩展)
    macOS 安装使用 python 虚拟机
    [实践篇]13.5 QNX侧如何操作进程?
    docker学习(一)
    采用创新的FPGA 器件来实现更经济且更高能效的大模型推理解决方案
    小菜React
  • 原文地址:https://blog.csdn.net/L2111533547/article/details/126435423