标签:开发 地址 desc 生成 成功 很多 cti dir zip
1.maven常用的构建命令
(1)mvn -v 查看maven版本
(2)compile 编译
(3)test 测试
(4)package 打包
(5)clean 删除target
(6)install 安装jar包到本地仓库中
2.maven自动建立目录骨架
(1)archetype插件
- 用于创建符合maven规定的目录骨架
- 先创建一个文件夹,其名为project名
(2)自动创建目录方式一
- win+R,cmd,cd到该文件夹路径下,输入mvn archetype:generate,enter,第一次会自动下载一些相关依赖
- enter,输入6
- ‘groupId‘ 输入com.gc.maven;
- ‘artifactId‘输入maven-service;
- ‘version‘输入1.0.0SNAPSHOT;
- ‘package‘输入com.gc.maven.service,
- enter,输入y
- 至此自动创建成功
- 这是按照提示进行选择的方法
(3)自动创建目录方式二
- win+R,cmd,cd到该文件夹路径下
- 输入mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名 -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码所存在的包名
3.maven中的坐标和仓库
(1)坐标
- 构件通过坐标作为其唯一标识
- groupId,artifactId,version组成项目的基本坐标
(2)仓库
- 仓库管理项目的依赖
- 本地仓库和远程仓库:打开maven—>lib—>maven-model-builder-3.5.4.jar,用360压缩打开,org—>apache—>maven—>model—>pom-4.0.0.xml,打开,找到<url>https://repo.maven.apache.org/maven2</url>,即为远程仓库
- 镜像仓库:打开maven—>conf—>settings.xml,找到mirrors,配置1-2个镜像
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</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>
- 更改仓库位置:默认本地仓库在c盘中C:\Users\guochan\.m2,如果重装系统可能丢失,所以要更改仓库位置
- 创建一个本地文件夹其路径为E:\maven\repo,打开maven—>conf—>settings.xml,找到localRepository,
- <localRepository>E:/maven-3.5.0/repository</localRepository>
- win+R cmd ,输入命令mvn compile测试是否成功
4.在Intellij IDEA中配置maven以及创建maven项目
(1)配置maven
- Ctrl+Shift+A,输入maven,选择maven settings
- 在maven home directory中选择maven文件夹目录,我这里是D:/Program Files (x86)/apache-maven-3.5.4-bin/apache-maven-3.5.4
- 在user setting file中选择override,填入修改好本地仓库位置的配置文件,我这里是D:\Program Files (x86)\apache-maven-3.5.4-bin\apache-maven-3.5.4\conf\settings.xml
- local repository会自动检测到修改过的本地仓库路径
- 在settings搜索框中输入runner,找到maven下的runner,在VM Options中输入-DarchetypeCatalog=internal,如果未配置会导致maven 骨架生成速度缓慢
- 配置完成
- File—>other settings—>default settings,再将刚才配置一遍,在创建maven项目的时候就不用重复配置了
(2)创建maven web项目
- File—>New—>Project,选择maven,在create from archetype打勾,选择,next
- 输入groupId和artifactId,next
- 仍然选择maven home directory为D:/Program Files (x86)/apache-maven-3.5.4-bin/apache-maven-3.5.4
- user setting file选择override,为D:\Program Files (x86)\apache-maven-3.5.4-bin\apache-maven-3.5.4\conf\settings.xml
- local repository会自动检测到修改过的本地仓库路径
- 上述加下划线的三步如果在default settings中配置过即可忽略
- 点绿色的+,Name中输入archetypeCatalog,Value中输入internal,OK(该属性设置可以加快项目创建速度),next,finish
- 如果创建maven项目失败,错误[ERROR] Maven execution terminated abnormally (exit code 1)
- 原因:如果path里有两个java环境,则会导致创建失败
- 解决办法:查看Path路径下发现有C:\ProgramData\Oracle\Java\javapath和%JAVA_HOME%\bin这两个java环境,删除C:\ProgramData\Oracle\Java\javapath即可正常创建
- 创建好的项目结构缺少一些文件夹,手动补全,Alt+Insert,按照上一篇的目录结构添加directory,在main下添加java和resources,在src下添加test和resources
- Ctrl+;调出Project Structure,点击Modules,main下的java选择Sources,main下resources选择Resources;test下的java选择Tests,test下的resources选择Test Resources
5.maven的生命周期和插件
(1)完整项目的构建过程
(2)maven生命周期
- clean 清理项目
- pre-clean 执行清理前的工作
- clean 清理上一次构建生成的所有文件
- post-clean 执行清理后的文件
- default 构建项目(最核心)
- compile
- test
- package
- install
- site 生成项目站点
- pre-site 在生成项目站点前要完成的工作
- site 生成项目的站点文档
- post-site 在生成项目站点后要完成的工作
- site-deploy 发布生成的站点到服务器上
(3)maven的插件
- 详细插件信息可查看http://maven.apache.org/plugins/index
- 下面以使用source插件为例,希望运行package时即可将源码打包,在pom.xml中写入
<build>
<plugins>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.4.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>jar-no-fork</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
6.maven中pom.xml解析
<?xml version="1.0" encoding="UTF-8"?>
<!--project是pom.xml的根元素,包含pom约束的信息-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--指定当前pom的版本,也是必不可少的元素-->
<modelVersion>4.0.0</modelVersion>
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--第一个0表示大版本号
第二个0表示分支版本号
第三个0表示小版本号
0.0.1
snapshot 快照
alpha 内部测试
beta 公测
Release 稳定
GA 正式发布
-->
<version>1.0-SNAPSHOT</version>
<!--jar war zip pom-->
<packaging>war</packaging>
<name>项目描述名</name>
<url>项目地址</url>
<description>项目描述</description>
<developers>开发人员列表</developers>
<licenses>开源框架许可证信息</licenses>
<organization>组织信息</organization>
<!--依赖列表-->
<dependencies>
<!--依赖项-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<type></type>
<!--依赖范围 test表示junit只在测试的依赖范围内有用,在main主代码中引用junit会报错-->
<scope>test</scope>
<!--设置依赖是否可选,有true和false,默认是false,子项目继承,若为true,子项目必须显示引入该依赖-->
<optional>false</optional>
<!--排除依赖传递列表-->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--依赖的管理,主要定义在父模块中,供子模块继承-->
<dependencyManagement>
<!--依赖列表-->
<dependencies>
<!--多个依赖,但这些依赖并不会被运行,不会被引入实际的依赖中-->
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<!--对构件行为提供相应的支持-->
<build>
<!--插件列表-->
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
<!--通常用于子模块对父模块pom的继承-->
<parent></parent>
<!--用来聚合运行多个maven项目,使很多maven模块一起编译-->
<modules>
<module></module>
</modules>
</build>
</project>
7.maven依赖范围
(1)<scope>
- maven的依赖范围
- 开发时使用某一框架,将该项目的jar包引入到项目的classpath路径中,项目即可使用该框架为我们封装好的一些方法
- 依赖范围就是控制依赖与classpath的关系
(2)maven中的classpath
- 编译
- 测试:例如junit依赖范围中的值test表明junit只存在于测试的classpath中
- 运行
(3)scope的值
- 打开http://maven.apache.org/,点击右侧栏中的Documentation-Index(category),点开Introductions-The Dependency Mechanism(依赖机制),找到Dependency Scope
- 有6种scope的值,介绍如下
- compile:默认的范围,在编译、测试、运行时都有效。
- provided:在编译、测试时有效。例子:Servlet API加载,运行时不会被加入,因为web容器已经包含了这些API,如果加入进去会导致冲突。
- runtime:在测试、运行时有效。例子:jdbc驱动的实现,项目主代码的编译只需要JDK提供的jdbc的API,只有在执行测试和运行项目的时候才需要实现接口的具体的jdbc驱动。
- test:只在测试时有效。例子:junit。
- system:与provided相同,在编译,测试时有效,与本机系统相关联,可移植性差,换机子以后可能会出问题。比如我们要引用本机的JAVA_HOME,如果把项目移植到其他系统上,可能由于路径的不一致而导致错误。
- import:导入的依赖范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency配置(是从其他pom中继承的依赖)。
8.maven依赖传递
(1)依赖传递的例子
- 假设A依赖于B,B依赖于C
- 首先在B的pom.xml中添加B对C的依赖
<dependency>
<groupId>com.gc.C</groupId>
<artifactId>C</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.gc.B</groupId>
<artifactId>B</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 然后对C clean package(生成C的jar包) install(C的jar包安装到本地仓库中);再对B clean package(生成B的jar包) install(B的jar包安装到本地仓库中)
- 对A clean compile,即会发现在A的Maven Dependencies中有B.jar和C.jar。在A的pom.xml中并没有配置C,所以这就是传递依赖
(2)排除依赖
- 若A只想依赖于B,不想依赖于C,则可在A的pom.xml中加入exclusion,这样A中Maven Dependencies就自动去除了C.jar
<dependency>
<groupId>com.gc.B</groupId>
<artifactId>B</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.gc.C</groupId>
<artifactId>C</artifactId>
</exclusion>
</exclusions>
</dependency>
9.maven依赖冲突
(1)产生依赖冲突的场景
- A和B依赖了不同版本的相同的构件,那么对依赖A、B的C来说依赖的是哪个版本的构件,这就产生了依赖冲突
(2)两条原则
- 短路优先
- A—>B—>C—>X(jar)
- A—>D—>X(jar),选择此依赖
- 先声明先优先
10.maven聚合和继承
(1)使用聚合的场景:
- maven中将多个项目install,将其安装到本地仓库中,聚合可以将他们放到一起运行,称为聚合
(2)聚合的例子:
- 想要将项目A,B,C一起install到本地仓库中
- 新建一个新的maven项目D,其pom.xml如下
<packaging>pom</packaging>
<modules>
<module>../A</module>
<module>../B</module>
<module>../C</module>
</modules>
- 对D的pom.xml clean install,即可将A,B,C生产jar包并安装到本地仓库中
- D的pom.xml作为其他项目pom的容器
(3)使用继承的场景:
- 很多项目的pom.xml中有很多重复的配置,例如junit等,可以利用继承减少配置
(4)继承的例子:
- 假设有parent项目和sub项目,则分别配置parent和sub的pom.xml
- 新建一个新的maven项目parent,其pom.xml如下
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.11</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 在sub项目中的pom.xml修改如下(将junit中的version和scope删除):
<parent>
<groupId>com.gc.parent</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
- 此时junit就可以从parent的pom中继承过来
Maven核心知识
标签:开发 地址 desc 生成 成功 很多 cti dir zip
原文地址:https://www.cnblogs.com/chanaichao/p/9259154.html