前言:
接上篇安装完之后的使用

如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于maven就可以将一个项目拆分成多个工程
同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。借助于maven,可以将jar包保存在“仓库”中,不管在哪个项目只要使用引用即可就行。
借助于maven我们可以使用统一的规范方式下载jar包,规范
不同的项目在使用jar包的时候,有可能会导致各个项目的jar包版本不一致,导致未执行错误。借助于maven,所有的jar包都放在“仓库”中,所有的项目都使用仓库的一份jar包。
FileUpload组件->IO组件,commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar
极大的浪费了我们导入包的时间成本,也极大的增加了学习成本。借助于maven,它会自动的将依赖的jar包导入进来。
① 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容器下,使其可以运行
Maven的使用方式主要有两种,分别是命令行方式和集成开发工具创建Maven项目
命令行方式使用的场景:打包时shell中通过mvn命令打包
集成开发工具使用的场景:新创建一个项目的时候,通过集成开发工具自动生成项目目录
Linux下安装maven安装_84岁带头冲锋的博客-CSDN博客_linux 查看是否安装maven
通过which mvn命令查找到mvn的安装路径,然后进入到maven的安装目录可以看到maven的目录结构

maven的目录结构如上图所示
bin目录:存放maven运行的一些命令脚本
boot目录:包含类加载器的框架,mvn使用boot加载类库
conf目录:maven的配置文件
lib目录:包含第三方依赖的类库以及自身的类库
settings.xml对于maven来说相当于全局性的配置,作用于所有的项目
简单介绍一下setting.xml文件中的几个参数配置:
1.mirrors
配置镜像地址,主要提供一个方便地切换中央仓库地址的途径,即jar包下载地址。

2. localRepository
本地仓库了路径,默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
运行 Maven 命令时,Maven 将下载依赖的文件放到localRepository指定的路径中。

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

target路径:用来存放项目构建后的文件和目录、jar包、war包、编译的class文件
pom.xml:项目对象模型(Project Object Model)的简称,作用类似ant的build.xml文件,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
集成开发工具创建maven项目时,myeclipse和idea都集成了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 开始按照本地仓库、中央仓库、远程仓库的顺序查找依赖库,本地找不到则去中央仓库找,中央仓库找不到则去远程仓库找。
其实中央仓库和远程仓库的定义并没有明显的区别。
项目对象模型(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:配置主源码输出相对路径。
mvn clean package
该命令依次执行了clean、resources、compile、testResources、testCompile、test、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