慕课网 项目管理利器 maven 学习记录

1. Maven定义

Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理构建、报告和文档的软件项目管理工具。

2.Maven下载和环境变量配置

Maven 官网: http://maven.apache.org/
官网下载: apache-maven-3.5.2-bin.zip
解压这个文件到某一个目录下,配置环境变变量
D:\dev\install\apache-maven-3.5.2\bin
M2_HOME : D:\dev\install\apache-maven-3.5.2
%M2_HOME%\bin

cmd窗口
mvn -v 命令检查环境变量配置

image.png

3.Maven 约定的基本目录结构

src/mian/java/package
src/test/java/package
src/resources
pom.xml

4. Maven常用的构建命令

mvn -v 查看maven版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除target
mvn install 把当前项目生成的jar包安装到本地仓库,这样另外一个项目就可以依赖这个项目生成的jar包,只要把这个项目的pom.xml中的坐标添加到另外一个项目的pom.xml中。

PS:maven依赖坐标查找jar的过程 maven -> 本地仓库 -> 中央仓库

5. 自动创建目录骨架

archetype插件用于创建符合maven规定的目录骨架
方式一:在某一个目录下运行该命令:mvn archetype:generate 根据提示输入项目坐标即可创建好项目的目录结构
方式二:

     mvn archetype:generate
          -DfroupId=组织名,公司网址的反写+项目名称
          -DartifactId=项目名-模块名
          -Dversion= 版本号
          -Dpackage=代码所存在的包名

6. maven中的坐标和仓库

仓库 本地仓库 和 远程仓库
mavne默认配置的中央仓库地址
"D:\dev\install\apache-maven-3.5.2\lib\maven-model-builder-3.5.2.jar"

默认中央仓库配置

打开pom-4.0.0.xml可以

<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

修改maven中央仓库地址

maven setting
<mirrors>
   <mirror>
     <id>maven.net.cn</id>
     <mirrorOf>central</mirrorOf>
     <name>central mirror in china</name>
     <url>http://maven.net.cn/content/groups/public</url>
   </mirror>
 </mirrors>

修改maven本地仓库路径 (在setting.xml文件中修改)
<localRepository>D:/data/repository</localRepository>
可以把setting.xml文件拷贝到该文件夹下,下次升级maven就不需要修改setting.xml

7. Maven的生命周期和插件

完整的项目构建包括:
清理、编译、测试、打包、集成测试、验证、部署

Maven生命周期

  • (1.0)clean 清理项目
    pre-clean 执行清理前的工作
    clean 清理上一次构建生成的所有文件
    post-clean 执行清理后的文件
  • (2.0) default 构建项目(最核心)
    compile /test /package /install
  • (3.0) 生成项目站点
    pre-site 在生成项目站点前要完成的工作
    site 生成项目的站点文档
    post-site 在生成项目站点后要完成的工作
    site-deploy 发布生成的站点到服务器上

ps: 生命周期的各个阶段是独立的,但是在每个阶段的子阶段中 执行后面子阶段的命令,前面的子阶段命令也会执行。

Maven插件的使用
maven插件列表: http://maven.apache.org/plugins/index.html

source插件的使用


image.png
 <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <executions>
              <execution>
                      <phase>package</phase>
                      <goals>
                          <goal>jar-no-fork</goal>
                      </goals>
              </execution>
       </executions>
        <configuration>
          <outputDirectory>/absolute/path/to/the/output/directory</outputDirectory>
          <finalName>filename-of-generated-jar-file</finalName>
          <attach>false</attach>
        </configuration>
      </plugin>
    </plugins>

8. pom.xml解析

<modelVersion> 指定当前pom的版本
<groupId> 反写的公司网址 + 项目名
<artifactId>项目名 + 模块名
<version> 当前项目版本号
<packaging> 默认是jar包,可以指定为war等
<name> 项目描述名
<url> 项目地址
<description> 项目描述
<developers> 开发人员
<licenses> 许可证
<organization> 组织

    <dependencies>
        <dependency>
            <groupId>
            <artifactid>
            <version>
            <type>
            <scope> 依赖的范围,默认值 compile
            <optional> true/false 设置依赖是否可选, 默认是false, 子项目可以继承该依赖,如果是true,子项目就要显示声明该依赖。 
          <exclusions>
                <exclusion>  排除依赖传递列表

依赖管理, 主要定义在父模块中,供子模块继承,在当前项目中不会运行

 <dependencyManagement>
      <dependencies>
          <dependency>

插件配置
···xml
<build>
<plugins>
<plugin>
<groupId>
<artifactId>
<version>


····xml
  <parent></parent>
 <

PS:
版本说明 snapshot 快照; alpha 内部测试; beta 公测版本; Release 稳定版本; GA 正式发布

9. 依赖范围

maven 提供了三种的classpath: 编译、测试、运行
<scope> 用来控制依赖和三种classpath的关系
scope的值:
默认是compile 编译、测试、运行都有效;
provided: 在编译和测试时有效;
runtime: 在测试和运行时有效;
test: 在测试时有效;
system: 在编译和测试时有效,但与本机系统相关联,可移植行差;
import: 导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置;

10. 依赖传递

依赖传递和排除依赖传递

11. 修改JDK的版本(在settings.xml中增加如下配置)

<profile>
      <id>jdk-1.8</id>
      
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>

      <repositories>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compolerVersion>
      </repositories>
    </profile>

12. 依赖冲突(指的是版本冲突)

规则一: 短路优先
A -> B -> C -> X(v1)
A-> D -> X(v2)
规则二:在路径长度相同时,谁先声明,先解析谁。
A -> B -> X(v1)
A-> D -> X(v2)
此时在A的pom中把B声明在D之前,则引用X(v1)

13. 聚合和继承

聚合
假如 对 多个项目执行install命令,可以新建一个项目,按照如下图配置

maven 聚合

继承
假如多个项目中有相同的依赖,可以新建一个项目,按照如下图配置
image.png

通过<parent>引用父pom, 同时Junit不用指定版本和范围。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容