工程化专题-maven

============目录===========
1.认识maven
2.maven的优势
3.下载安装
4.配置
5.pom介绍
6.传递依赖
7.依赖仲裁
8.生命周期
9.版本管理
10.常用命令
11.常用插件
12.自定义插件
12.profile使用
13.仓库nexus
14.archetype  模版化
============目录===========

1.认识maven
仓库消除重复的构建,模板化消除重复的编码,profile使配置可选,更有丰富的版本控制与插件

2.maven的优势
a)约定优于配置
b)构建简单
c)插件丰富

3.下载安装
a)MAVEN_HOME环境变量设置 ~\apache-maven-3.5.3
a)测试是否安装成功 cmd->mvn -version

4.配置
全局setting.xml 
自定义setting.xml :加载顺序优于全局
localRepository:本地仓库路径
pluginGroups:自定义插件
proxies:代理,翻墙用
servers:私有仓库,需要密码的
mirrors:镜像配置,选国内
profiles:配置,开发,生产配置分开

1<mirror>  
2  <id>alimaven</id>  
3  <name>aliyun maven</name>  
4  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
5  <mirrorOf>central</mirrorOf>          
6</mirror>

5.pom介绍
超级pom.xml  :/apache-maven-3.3.3/lib/maven-model-3.3.3.jar
modelVersion:超级pom的版本
groupId:组名,一般为公司域名
artfactid:功能命名
version:版本号
packaging:jar,war,pom,maven-plugin
properties:变量配置
dependencyManagement:只能出现在父pom里面,用于做版本控制,子pom引用的时候不用写版本号
dependency
    type:默认jar
    scope 作用域,在什么阶段用,会不会打包
a)compile  编译使用   例如spring-core(用在编译,打包)
b)test 测试 例如spring-test(用在测试,不打包)
c)provided 已提供  例如 servlet(tomcat容器已提供,用在编译,不打包)
d)runtime 运行时 例如JDBC驱动实现(jdbc只实现了接口,编译期间不关心有没有实现类,用在运行时,打包)
e)system 本地一些jar,systemPath定义  例如短信jar(中央仓库并没有这个jar,但是你又想用,1install到本地 2发布到中央仓库 3 systemPath)

6.传递依赖
父/子 工程
compile
test
provided
runtime
compile
compile
-
-
runtime
test
test
-
-
test
provided
provided
-
provided
provided
runtime
runtime
-
-
runtime

7.依赖仲裁

当maven依赖同一个common-lib的时候出现的问题
a)最短路径原则
b)路径相同时,加载先后原则(书写顺序的先后,可能遇到api冲突问题)
c)exclusions,遇到冲突时使用排除法排除低版本的jar(例如jstl-api排除servlet-api)
    
8.生命周期
a)3个生命周期,每个生命周期多个阶段,每个阶段是由plugin goals组成的
b)A Build Lifecycle is Made Up of Phases
c)A Build Phase is Made Up of Plugin Goals


d)运行一个package命令,那么会按顺序从上到下依次运行validata,intialize等命令




9.版本管理
开发版可以重复更新,不管版本号,覆盖更新,使用开发版不安全;稳定版一个版本号只能更新一次,同个版本覆盖不了。
a)1.0-SNAPSHOT(开发版)
当遇到开发版的jar包有更新到中央仓库时,协作者需要更新到本地
方式一 把本地repository的这个包删除
方式二 运行的时候强制更新 mvn clean package -U (强制拉一次)
b)主版本好.次版本号.增量版本号-里程碑版本
1.0.0-RELEASE

10.常用命令
a)compile
b)clean    删除target/
c)test       test case junit/testNG
d)package 打包
e)install    把项目install到local repo
f)deploy    发本地jar发布到remote
  
11.常用插件
a)网址
https://maven.apache.org/plugins/ 
http://www.mojohaus.org/plugins.html 
b)findbugs 静态代码检查
mvn findbugs:check
c)versions 统一升级版本号
mvn versions:set -DnewVersion=1.1     
e)source 打包源代码
f)assembly 打包zip、war
g)tomcat7
                     
12.自定义插件
b)<packaging>maven-plugin</packaging>
c)依赖
 1<dependency>
 2    <groupId>org.apache.maven</groupId>
 3    <artifactId>maven-plugin-api</artifactId>
 4    <version>3.5.0</version>
 5</dependency>
 6<dependency>
 7    <groupId>org.apache.maven.plugin-tools</groupId>
 8    <artifactId>maven-plugin-annotations</artifactId>
 9    <version>3.5</version>
10    <scope>provided</scope>
11</dependency>
d)新建类继承 AbstractMojo          


e)插件install到本地
f)新工程去执行插件

g)args参数传递
mvn -install -Dargs123
                      
12.profile使用
a)使用场景 dev/pro/test
 1配置两个profile
 2<profile>
 3    <id>dev</id>
 4    <properties>
 5        <profiles.avtive>dev</profiles.avtive>
 6    </properties>
 7    <activation>
 8        <activeByDefault>true</activeByDefault>
 9    </activation>
10</profile>
11<profile>
12    <id>pro</id>
13    <properties>
14        <profiles.avtive>pro</profiles.avtive>
15    </properties>
16</profile>
17定义规则
18<build>
19    <resources>
20        <resource>
21            <directory>${basedir}/src/main/resources</directory>
22            <excludes>
23                <exclude>conf/**</exclude>
24            </excludes>
25        </resource>
26        <resource>
27            <directory>src/main/resources/conf/${profiles.avtive}</directory>
28        </resource>
29    </resources>
30</build>

目录结构


执行 mvn clean install -P pro

b)setting.xml 的profile                 
公司的maven如果是内网连接,那么到家里就连不上了,这时候可定义两个profile连接不同的仓库 
 
13.仓库nexus
b)下载
c)安装  windwos  进入bin ./nexus.exe /run
d)访问地址 http://127.0.0.1:8081/nexus    admin/admin123
e)发布到仓库配置
 1//pom配置
 2<distributionManagement>
 3    <repository>
 4        <id>nexus-releases</id>
 5        <name>releases</name>
 6        <url>http://127.0.0.1:8081/repository/maven-releases/</url>
 7    </repository>
 8    <snapshotRepository>
 9        <id>nexus-snapshots</id>
10        <name>snapshots</name>
11        <url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
12    </snapshotRepository>
13</distributionManagement>
14//setting配置(id与pom的id要对应)
15<server>  
16    <id>nexus-releases</id>  
17    <username>admin</username>  
18    <password>admin123</password>  
19</server>
20<server>  
21    <id>nexus-snapshots</id>  
22    <username>admin</username>  
23    <password>admin123</password>  
24</server>
1    
 
f)从仓库下载配置
配置mirror
配置profile

g)用户角色权限
使用场景,如果两个部门的人不同工程使用了同一个artifactId,那么会被覆盖,这时候需要配置一下,不同角色传到不同仓库

h)定时任务 Tasks配置:如配置定时更新索引

14.archetype  模版化
a)应用场景:可以是module的模板,生成快速开发脚手架
b)生成一个archetype
到你要生成的工程下执行命令
i.mvn archetype:create-from-project 生成一个模板
ii.cd /target/generated-sources/archetype 生成模板的位置
iii.mvn install 把模板映射到本地仓库

c)从archetype创建项目
从本地仓库选择模板生成 mvn archetype:generate -DarchetypeCatalog=local

15.其他
mvn dependency:tree >d.txt 树日志
mvn help:system 系统变量



公众号:左耳代码


猜你喜欢

转载自blog.csdn.net/charjay_lin/article/details/80710739