设为首页收藏本站

安而遇随-随遇而安

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
安而遇随-随遇而安 首页 其他 笔记 查看内容

Maven笔记

2017-10-7 20:01| 发布者: 随便、先森。| 查看: 1401| 评论: 0

摘要: maven介绍及环境搭建Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具Maven官网:http://maven.apache.org/Maven目录结构:1.bin目录是包含mvn的运行脚本2. ...
maven介绍及环境搭建
Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具


Maven目录结构:
1.bin目录是包含mvn的运行脚本
2.boot目录包含一个类加载器的框架,maven使用它加载自己的类库
3.conf配置文件
4.lib包含maven运行时的依赖类库

配置环境变量:
maven环境配置,增加一个环境变量Maven_HOME,值是maven的解压目录
编辑Path变量在最后面添加 ;%Maven_HOME%\bin
在dos界面输入mvn -v 检测maven环境变量是否配好


mvn项目文件夹结构
-src    -> 源代码目录
    -main
        -java
            -package
    -test
        -java
            -package
    -resources

与src同级目录下会生成target文件夹,classes里面有编译好的class文件,reports为生成的测试报告。

pom.xml结构
  <groupId> 是项目的包名
  <artifactId> 是模块名
  <version> 当前项目的版本号version的值固定的是 0.0.1SNAPSHOT

  <dependencies> 依赖哪些包
    <dependency>依赖的包
      <groupId>包名
      <artifactId>模块名
      <version>包版本

pom.xml保存在项目根目录
命令:
编译:mvn compile
运行测试:mvn test
打包项目jar:mvn package


maven常用的构建命令
mvn -v 查看maven版本
         compile  编译项目
         test   测试项目
         package  打包项目
         clean  删除 target
         install 安装jar包到本地仓库中

maven自动建立目录骨架
创建目录的两种方式:
1;mvn archetype:generate 按照提示进行选择
2:mvn archetype: -DgroupId=组织名,公司网址的反写+项目名 -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码所在的包名

maven中的坐标和仓库
坐标
    构件
仓库
    本地仓库和远程仓库
    镜像仓库Maven下的settings.xml 里mirrors
   更改仓库位置Maven下的settings里localRepository

本地仓库和远程仓库
        * 如果maven引用了其他项目的包
        * maven会先在pom.xml中进行查找,找到相应的“坐标”位置
        * 然后去本地maven仓库中查找这个位置下的包
        * 如果在本地maven仓库中找不到这个包,maven会去网络上的中央仓库中寻找这个包
     镜像仓库
        * 国内有与国外中央仓库一样的地址

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

maven的生命周期和插件
maven生命周期:
    clean    清理项目
    default    构建项目
    site    生成项目站点

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

maven中Pom.xml解析
maven的pom.xml各标签所代表的内容:
dependencies:依赖列表
dependency:依赖项
scope:依赖范围
build:配置
plugins:插件列表
artifactId:项目名+模块名
version:一般由三个数字组成
      第一个0表示大版本号;第二个0表示分支版本号;第三个0表示小版本号
      snapshot快照版本  alpha内部测试  beta公测  release稳定  GA正式发布
packaging:打包格式,默认是jar,也可以是war,zip,pom等
name:项目描述名
url:项目地址
description:项目描述
developers:开发人员列表
license:许可证信息
organization:组织信息
parent: 用于子模块中对于父模块的继承
modules: 指定多个模块,然后一起编译

<name>项目的描述名</name>
<url>项目的地址</url>
<description>项目描述</description>
<developers>开发人员信息</developers>
<licenses>许可证信息</licenses>
<!-- 依赖列表 -->
<dependencies>
<!-- 依赖项 -->
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<scope>依赖的范围</scope>
<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>
</build>
<!-- 一般在子模块中指定所继承的父模块 -->
<parent></parent>
<!-- 模块列表 -->
<modules>
<module></module>
</modules>

maven依赖范围
scope---依赖范围
      compile:默认的范围,编译、测试以及运行阶段都有效
      provided:在编译和测试时有效
      runtime:在测试和运行时有效
      test:只在测试范围有效
      system:依赖范围和provided类似,但与本机系统相关联,可移植性差
      import:导入的范围,它只使用在dependencyManagement中,
                      表示从其他的pom中导入dependency的配置


maven依赖传递
假设B项目依赖A项目,C项目又依赖B项目,那么在C项目中运行compile时,在引进B项目的同时,自动就把A项目也引进来了。
如果不想将A项目导入的话,可以使用exclusions下设置exclusion,然后将A项目的坐标添加即可。

maven依赖冲突
针对依赖冲突: 短路优先    声明优先
1.短路优先:谁路径最短、最快,用谁的
2.声明优先: 如果路径相同,谁先声明的, 用谁的

maven聚合和继承
聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要Maven能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。——使用<modules></modules>这个标签。
<modules>
   <module>../hongxin-bege</module>
   <module>../hongxin-nange</module>
   <module>../hongxin-shanji</module>
</modules>

继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的POM.XML然后再继承此POM.XML。
1. packaging 改为pom。
2. dependencyManagement 中并不提取依赖,只进行统一管理。
3. property中定义了junit版本号,之后可以引用。
4. 父类parent中的main和test没有意义,可以删除。

父类pom:
<dependencyManagement>
   <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>${junit.version}</version>
   </dependency>
</dependencies>
</dependencyManagement>
子类pom:
<parent>
<groupId>com.hongxin</groupId>
<artifactId>hongxin-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
   </dependency>
</dependencies>



创建好的web项目目录,其中的jsp报错,是因为没有添加servlet API的原因,需要在pom中添加相关依赖。





鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

  • 解决 Wn10无法连接 蓝牙耳
  • Python之Selenium知识总结
  • 2万字带你了解Selenium全攻
  • 解决网站网页不能复制,不
  • 我对ddos攻击的见解以及ufo
论坛精选
DDOS:NTP、SSDP、DNS、SNMP、RIP 放大反射攻击、扫描脚本
DDOS:NTP、SSDP、D
NTP、SSDP、DNS、SNMP、RIP 放大反射攻击扫描脚本 不懂的 请自行谷歌 声明:本文转
NTP放大反射DDOS攻击扫描教程,放大列表扫描教程
NTP放大反射DDOS攻
NTP放大反射DDOS攻击扫描教程,放大列表扫描教程 图上是国外测的 本文实测 能有二三
返回顶部