博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven总结
阅读量:6536 次
发布时间:2019-06-24

本文共 12044 字,大约阅读时间需要 40 分钟。

  hot3.png

何为maven?

  1. Maven主要是基于Java平台的项目构建,依赖管理和项目信息
  2. Maven是优秀的构建工具,跨平台,消除构建的重复,抽象了一个完整的构建生命周期模型,标准化构建过程
  3. 管理分布的项目信息,版本控制系统,轻松获取项目文档,测试报告,静态分析报告,版本日志报告等
  4. 极限编程(XP)的搭配是非常不错的,比如持续集成(CI)
  5. 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件,构件存储在仓库,(仓库就是存放依赖和插件的地方),任何的构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径

maven安装配置

  1. 安装jdk
  2. 下载maven,到下载如:
  3. 配置环境变量
  4. 查看mvn –v

注:maven需要先安装好jdk

maven目录结构

a658751be9fdcc2925615f465d42197bf94.jpg

bin:该目录包含了mvn运行的脚本,这些脚本用来配置Java命令,还包含了m2.conf文件,这是classworlds的配置文件

boot:就包含了一个文件,以这次的下载的版本,该文件是plexus-classworlds-2.5.2.jar,是一个类加载器框架

conf:这个目录用到的非常重要的文件setting.xml,直接修改该文件,就能在机器上全局地制定了Maven的行为

lib:该目录包含了所有Maven运行时需要的Java类库,Maven是分模块开发的,可以说lib目录就是真正的目录,还包含内置的超级POM(所有的POM均继承此文件,你可以使用解压工具打开jar文件$M2_HOME/lib/maven-model-builder-x.x.x.jar,然后访问路径org/apache/maven/model/pom-4.0.0.xml)

settings.xml文件配置

用户配置路径为${user.home}/.m2/settings.xml,该配置需用户自行创建

全局配置路径为${maven.conf}/settings.xml,该配置为maven自带配置,即原文所在位置

当两者都存在时,maven会合并这2个配置;有相同配置参数时,有效值为用户配置中的参数

localRepository

本地仓库路径,默认路径为${user.home}/.m2/repository

interactiveMode

互动模式,默认值为true。该值使用默认值即可,无需更改

offline

离线模式,默认值为false。当因为各种原因无法与远程仓库连接时,可将该值修改为true

pluginGroups

插件组,内部由n个pluginGroup节点组成,默认自带了org.apache.maven.plugins和org.codehaus.mojo。若有特殊的需求是可进行扩展。

proxies

   
       
optional
       
true
       
http
       
proxyuser
       
proxypass
       
proxy.host.net
       
80
       
local.net|some.host.com
   

 

代理设置,内部由n个proxy节点组成。部分公司出于安全考虑会需要员工通过代理才可上网,这时,就需配置该节点的参数了。

参数说明:

id:唯一标识符

active:是否被激活使用,默认为true。当有多个proxy节点存在时,用于选择使用哪个代理,但同一时间仅有一个代理会被被激活

protocol:协议类型

username:用户名,没有可不填

password:密码,没有可不填

host:IP地址

port:端口号

nonProxyHosts:不使用代理的地址

以上参数在通常配置代理的情况都会使用到,一样填上即可,最终的代理地址为protocol://host:port

servers

   
       
nexus1
       
admin
       
admin123
   
   
       
nexus2
       
/path/to/private/key
       
optional; leave empty if not used
   

服务器,内部由n个server节点组成。有2种配置方式:一种是通过id匹配,username和password进行认证登录;另一种是通过id匹配指向一个privateKey(私钥)和一个passphrase

mirrors

   
       
nexus
       
*
       
http://localhost:8081/repository/maven-public/
   
   
       
repo2
       
central
       
Human Readable Name for this Mirror.
       
http://repo2.maven.org/maven2/
   

镜像仓库,内部由n个mirror节点组成。用来代替中央仓库(Maven默认的远程仓库),用于提升传输速度。因此此处可以添加一个镜像,以提升我们下载的速度

profiles

用于覆盖在一个POM或者profiles.xml文件中的任何相同id的profiles节点

activeProfiles

activeProfile值为profile中所定义的id,在这里定义的activeProfile总是被激活

总结:

一般情况而言,settings.xml无需配置太多的东西,作为优化,可配置localRepository和mirrors

maven的简单使用

maven项目的目录约定

MavenProjectRoot(项目根目录)

   |----src
   |     |----main
   |     |         |----java ——存放项目的.java文件
   |     |         |----resources ——存放项目资源文件,如spring配置文件
   |     |----test
   |     |         |----java ——存放所有测试.java文件,如JUnit测试类
   |     |         |----resources ——存放项目资源文件,如spring配置文件
   |----target ——项目输出位置
   |----pom.xml ----用于标识该项目是一个Maven项目

使用maven命令创建项目

mvn archetype:generate固定写法

  -DgroupId                           组织标识(包名)

  -DartifactId                                 项目名称

  -DarchetypeArtifactId                    指定ArchetypeId,maven-archetype-quickstart,创建一个Java Project;

maven-archetype-webapp,创建一个Web Project

-DinteractiveMode                      是否使用交互模式

例如:

mvn archetype:generate -DgroupId=com.qianbao.bhh -DartifactId=bhh-web -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false;

常用maven命令

mvn -v                         查看maven的版本及配置信息

mvn compile                    编译项目代码

mvn package                   打包项目

mvn package -Dmaven.test.skip=true   打包项目时跳过单元测试

mvn test                        运行单元测试

mvn clean                      清除编译产生的target文件夹内容,可以配合相应命令一起使用,如mvn clean package, mvn clean test

mvn install                     打包后将其安装在本地仓库

mvn deploy                     打包后将其安装到pom文件中配置的远程仓库

mvn site                        生成站点目录

mvn dependency:list           显示所有已经解析的所有依赖

mvn dependency:tree         以树的结构展示项目中的依赖

mvn dependency:analyze     对项目中的依赖进行分析,依赖未使用,使用但未引入

mvn -settings D:\nexus-settings.xml  制定settings配置文件

maven的核心概念

坐标

什么是坐标?

在平面几何中坐标(x,y)可以标识平面中唯一的一点。

maven坐标组成

  • groupId:组织标识(包名)
  • artifactId:项目名称
  • version:项目的当前版本
  • packaging:项目的打包方式,最为常见的jarwarpom

maven为什么使用坐标?

  • Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。
  • 拥有了统一规范,就可以把查找工作交给机器。

依赖管理

依赖配置

        
              
junit
              
junit
              
4.9
       

</dependencies>

依赖范围

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

  1.compile 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
  2.test:测试依赖范围。只对于测试classpath有效
  3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
  4.runtime:运行时提供。例如:jdbc驱动

传递性依赖

33f1676f43dd68222ebda43f120f171860d.jpg

仓库管理

maven仓库

用来统一存储所有Maven共享构建的位置就是仓库

maven仓库布局

根据Maven坐标定义每个构建在仓库中唯一存储路径,大致为:groupId/artifactId/version/artifactId-version.packaging

仓库分类

本地仓库

每个用户只有一个本地仓库,默认是在~/.m2/repository/~代表的是用户目录

远程仓库

中央仓库:Maven默认的远程仓库,URL地址:

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

0f50d97d76b1c7944d789d99062b26af80a.jpg

生命周期

何为生命周期?

maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

mven三大生命周期

maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",这三套生命周期分别是:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  3. Site Lifecycle 生成项目报告,站点,发布站点。

  再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

Clean Lifecycle

clean生命周期每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的cleanClean生命周期的一个阶段。有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

  1. pre-clean 执行一些需要在clean之前完成的工作
  2. clean 移除所有上一次构建生成的文件
  3. post-clean 执行一些需要在clean之后立刻完成的工作

  "mvn clean" 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,"mvn clean"等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-cleanclean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。 

Default Lifecycle

Default生命周期Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:

  1. validate
  2. generate-sources
  3. process-sources
  4. generate-resources
  5. process-resources 复制并处理资源文件,至目标目录,准备打包。
  6. compile 编译项目的源代码。
  7. process-classes
  8. generate-test-sources
  9. process-test-sources
  10. generate-test-resources
  11. process-test-resources 复制并处理资源文件,至目标测试目录。
  12. test-compile 编译测试源代码。
  13. process-test-classes
  14. test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  15. prepare-package
  16. package 接受编译好的代码,打包成可发布的格式,如 JAR
  17. pre-integration-test
  18. integration-test
  19. post-integration-test
  20. verify
  21. install 将包安装至本地仓库,以让其它项目依赖。
  22. deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

  运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

Site Lifecycle

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

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

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

聚合与继承

聚合

聚合是为了快速构建项目,如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合,例如:

   
baihua_web
   
baihua_api
   
baihua_core
   
baihua_search
   
baihua_batch
   
baihua_oms_web
   
baihua_schedule

继承

继承为了消除重复,我们把很多相同的配置提取出来,例如:grouptIdversion

继承配置代码

   
com.qianbao.baihua
   
baihua-parent
   
1.0.0

继承代码中定义属性

    
UTF-8
   
1.8
   
${java.version}
   
${java.version}
   
3.5.2
   
3.1.2
   
4.3.4.RELEASE
   
5.2.4.Final
   
5.2.4.Final
   
4.12

父模块用dependencyManagement进行管理

   
       
           
org.springframework.boot
           
spring-boot-test
           
test
       
   

子模块可以有选择行的继承,而不需要全部继承

私服nexus3安装及使用

安装

下载地址: 

7d9296a253b1607f6d5bcf8dc5d5b5624df.jpg

windows版本安装:

选择相应安装包下载,下载后解压得到如下:

a97926523dabf98fea3f2ffb590bf56cad6.jpg

  1. cmd执行nexus-3.12.1-01/bin/nexus /run
  2. 如果要安装为windows服务,执行nexus /install,提示服务安装成功后,启动执行net start nexus,停止执行net stop nexus。
  3. 安装完成后默认开放8081端口(nexus\nexus-3.12.1-01\etc\ nexus-default.properties中配置)
  4. 安装成功后有两个默认账号admin、anonymous,其中admin具有全部权限默认密码admin123;anonymous作为匿名用户,只具有查看权限。 

Linux版本安装:

选择相应安装包下载,下载后解压得到如下:

273b4e08130c89fa4260c6a0295406e4c18.jpg

cd bin下执行./nexus start

3db3aa1fc69ae6a889332970642ae7b6d32.jpg

配置文件在etc/nexus-default.properties中,可修改端口,默认8081;用户admin,密码admin123

使用

Repositories说明

  1. maven-centralmaven中央库,默认从拉取jar 
  2. maven-releases:私库发行版jar 
  3. maven-snapshots:私库快照(调试版本)jar 
  4. maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。

本地maven库配置settings.xml

D:\Repositories\Maven
  
     
nexus
     
admin
     
admin123
  
  
    
nexus
    
*
    
http://localhost:8081/repository/maven-public/
  
  
      
repo2
      
central
      
Human Readable Name for this Mirror.
      
http://repo2.maven.org/maven2/
    
  
       
nexus
       
        
          
central
          
http://central
          
true
          
true
        
       
      
        
          
central
          
http://central
          
true
          
true
        
       
  
 
  
nexus

pom.xml配置

  
     
nexus
     
Releases
     
http://localhost:8081/repository/maven-releases
  
  
     
nexus
     
Snapshot
     
http://localhost:8081/repository/maven-snapshots
  

Maven多模块项目搭建

  1. 创建父模块demo

mvn archetype:generate -DgroupId=com.enterprise.demo -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false;

  1. 进入父模块里,删除src文件夹,修改pom文件中<packaging>pom</packaging>
  2. 创建子模块demo-web
mvn archetype:generate -DgroupId=com.enterprise.demo -DartifactId=demo-web -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false;
  1. 创建子模块demo-core
mvn archetype:generate -DgroupId=com.enterprise.demo -DartifactId=demo-core -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false;
  1. 创建子模块demo-api
mvn archetype:generate -DgroupId=com.enterprise.demo -DartifactId=demo-api -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false;
  1. 创建子模块demo-admin
mvn archetype:generate -DgroupId=com.enterprise.demo -DartifactId=demo-admin -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false;
  1. 修改父pom文件,添加如下:
   
UTF-8
   
UTF-8
   
1.8
 
   
        
           
com.enterprise.demo
           
demo-api
           
1.0-SNAPSHOT
       
       
           
com.enterprise.demo
            
demo-core
           
1.0-SNAPSHOT
       
       
           
com.enterprise.demo
           
demo-web
           
1.0-SNAPSHOT
       
       
           
junit
           
junit
           
${junit.version}
       
   
   
       
nexus
       
Releases
       
http://localhost:8081/repository/maven-releases
   
   
       
nexus
       
Snapshot
       
http://localhost:8081/repository/maven-snapshots
   
  1. 各模块依赖关系

web依赖core

core依赖api

admin依赖core

  1. 其他注意事项

各子模块pom中去掉groupid,可继承父模块

 

转载于:https://my.oschina.net/jzgycq/blog/1921931

你可能感兴趣的文章
protocol buffers的编码原理
查看>>
行为型设计模式之命令模式(Command)
查看>>
减少死锁的几个常用方法
查看>>
HDFS 核心原理
查看>>
正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
查看>>
利用KMP算法解决串的模式匹配问题(c++) -- 数据结构
查看>>
登录内网账号后,连接不上内网网址
查看>>
安装 MariaDB
查看>>
Python3学习笔记16-错误和异常
查看>>
图像识别——ubuntu16.04 movidius VPU NCSDK深度学习环境搭建
查看>>
.NET应用架构设计—适当使用活动记录模式代替领域模型模式
查看>>
dev_dbg()
查看>>
关于RVDS的PRESERVE8
查看>>
Tomcat在Mac平台安裝
查看>>
底层和高层-失去的平衡[我们要开发怎样的应用]
查看>>
60款高质量的网站模板免费下载(上篇)
查看>>
利用 JAVA 操作 EXCEL 文件
查看>>
【转】关于ListActivity的简单体验
查看>>
c# BackgroundWorker 控件
查看>>
Ruby入门(1)——数据类型
查看>>