maven学习历程

# Maven
## maven下载及配置
maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具
下载:maven.apache.org   直接点击下载
解压下载的压缩文件,包含四个文件夹:
bin:包含mvn运行的脚本  m2.conf:配置文件
boot:包含一个类加载器的框架
conf:控制文件  settings.xml以后会常用到
lib:包含了maven运行时所用到的类库,自己的和第三方的


配置环境变量:


WIN下:右键此电脑,属性,环境变量,系统还是用户自己选择,新建M2_HOME,变量值为maven的安装目录(例C:\apache-maven-3.3.3),点击确定,然后需要修改环境变量中path的属性,点击path,编辑,在变量值末尾加上分号(英文下的分号),然后加上M2_HOME%\bin,然后点击确定即可
MAC下:将解压好的maven放到某一目录下,例如/usr/local/maven,然后打开终端,输入以下命令:
vim ~/.bash_profile,打开.bash_profile文件,在此文件下添加设置环境变量的命令
export M2_HOME=/usr/local/maven/apache-maven-3.3.3
export PATH=$PATH:$M2_HOME/bin
然后按 control+X,保存并退出编辑,按Y确认,然后回车即可
然后执行以下命令是配置生效:
source ~/.bash_profile


验证是否配置成功,打开命令提示符(MAC下打开终端),输入mvn -version,出现以下结果即说明配置成功了,会出现maven的安装地址以及jdk的一些信息




## maven目录结构
src //源代码
-main
-java
-test
-java
-package
resources


## maven构建命令
mvn -v 查看maven版本
-compile 编译
-test 测试
-package 打包
-clean 删除target
-install 将架包安装到本地仓库
首先运用compile编译源代码,如果在编译过程中,程序运用到其他的支持包,它会去pom.xml文件中查找是否引入该依赖包的坐标,即<dependency></dependency>中的内容,如果引入了,就会去本地仓库中查找,将该架包加入项目的classpath;如果没有该架包,就会去网上maven的中央仓库查找并且下载,并将其放到本地仓库中,供项目进行使用。


## 创建目录骨架 archetype
mvn  archetype:generate
依次输入groupId、artifactId、version、package
artifactId为当前目录下第一级文件夹名称,packageId为main和test文件夹下的java文件夹下的package名称及路径(设什么就是什么)


一次性生成:
archetype:generate -DgourpId=组织名,公司网址的反写+项目名称
    -DartifactId=项目名-模块名
    -Dversion=版本号
    -Dpackage=代码所在的包名


## maven种的坐标和仓库
坐标
构件
仓库
本地仓库和远程仓库:如果本地仓库找不到相应构件就会去中央仓库查找
镜像仓库
中央仓库地址:[Central Repository:](https://repo.maven.apache.org/maven2/
[Maven Repository: spring](http://mvnrepository.com/search?q=spring
更改仓库位置: settings.xml中的<localRepository>/path/to/local/repo</localRepository>
group Id和artifactId以及version都可以作为坐标,在创建maven项目时Java的包名应该和artifactId以及groupId相吻合,这样更加清晰符合逻辑。


## 在eclipse安装maven插件以及创建项目


## maven的生命周期和插件
完整的项目构建过程包括:清理、编译、测试、打包、集成测试、验证、部署
maven生命周期:(一下一次顺序执行)三套相互独立的生命周期,每个生命周期里包含一些阶段
clean 清理项目
default 构建项目
site 生成项目站点
clean、compile、test、package、install。
运行package时,compile和test会自动执行,然后打包。
clean分为三个阶段:pre-clean自行清理前的工作;clean清理上一次构建生成的所有文件;post-clean执行清理后的文件。
default构件项目(最核心):compile、test、package、install都属于default。
site(根据pom信息自动生成站点):pre-site在生成项目站点前要完成的工作;site生成项目的站点文件;post-site在生成项目站点后要完成的工作;site-deploy发布生成的站点到服务器上。


## pom.xml常用元素介绍
pom(核心管理文件):项目描述,组织管理,依赖管理,构件信息管理。
project:根元素,包含了pom的一些约束信息
modelVersion:制定了当前pom的版本(固定版本)
groupId:主项目标识,用来定义当前maven属于哪个实际的项目,和为项目创建的包一样,一般是反写的网址加项目名构成。
artifactId:模块标识,实际项目中的一个模块,一般由项目名+模块名构成。
version:标识当前项目的版本号,一般由三个数字组成,第一个0,标识大版本号,第二个0,表示分支版本号,第三个0,表示小版本号。一般形式 :0.0.1SNAPSHOT、alpha(内测)、beta(公测)、Release(稳定)、GA(正式发布)。
package:表示maven默认打包方式,不指定默认是jar,可以是war,zip,pom。
name:项目描述名,一半在产生项目文档时才会用。
url:项目的地址。
discription:项目描述。
developers:开发人员信息。
licenses;许可证信息。
organization:组织信息。
重要:
<project> —项目
<dependencies> —依赖
    <dependency>
      <groupId></groupId> —坐标
    <artifactId></artifactId> —坐标
    <version></version> —版本
<type></type>
<scope></scope> —依赖范围
<optional></optional> —设置依赖是否可选,true或false,默认是false
<exclusions><exclusion></exclusion></exclusions> —排除依赖传递列表
  </dependency>
  </dependencies>
<dependencyManagement> —依赖管理
<dependencies> —声明依赖列表,不会被运行,不会引用到实际依赖中,一般定义在父模块中,供子模块继承
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<build> —为构建行为提供相应支持
<plugins> —插件列表
<plugin>
<groupId></groupId> —坐标,要在plugin中指定
    <artifactId></artifactId> —坐标,要在plugin中指定
    <version></version> —版本,要在plugin中指定
</plugin>
<plugins>
</build>
<parent> —子模块中对父模块pom的继承
</parent>
<modules> —用来聚合多个模块项目
<module>
</module>
</modules>
</project>


## 依赖范围
依赖范围用来控制依赖与三种classpath关系。 <scope></scope>
要是用某框架,就要将该框架的架包引入到项目的classpath路径中,这样就能使用该框架为我们封装好的方法。
maven提供三种classpath:编译、测试、运行。
dependency scope;compile默认的范围,编译测试运行都有效;
provided在编译和测试时有效,最后运行时不会加入;
runtime在测试和运行时有效;test只在测试时有效;
system与本季系统相关联,可移植性差;
import导入的范围,它只使用在dependencyManagement中,表示从其它的pom中导入dependency的配置。


## 依赖传递
依赖要将依赖的框架的group Id和artifactId以及version加入到pom.xml中的<dependency></dependency>中,要是依赖生效,应该先将所依赖的框架打包安装(compile,clean install)。
依赖传递感觉相当于Java中类的继承,具有传递性,子类不止继承父类的特性,还会继承父类的父类的特性,如不想继承某父类的特性,只需将不需继承的框架的groupId和artifactId放入<dependency> <exclusions><exclusion></exclusion></exclusions></dependency>中。


## 依赖冲突
1、短路优先:commons-io离哪个近则哪个优先。
2、先声明先优先:如果路径长度相同,则谁先声明,先解析谁。<dependency></dependency>中谁先声明则先解析谁。


## 聚合和继承
### 聚合:将架包由jar改成pom,新建
<modules>
  <module>../hongxing-bGe</module> —中间依次加入
  <module>../hongxing-nanGe</module>
  <module>../hongxing-shanji</module>
  </modules>
然后run as :clean install


### 继承:新建一个作为父类的maven项目,在<properties></properties>中加入<junit.version>3.8.1</junit.version>如下:
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>3.8.1</junit.version>
  </properties>
再将以下中version中改成${junit.version},如下:
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
       <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
最后在子项目中的pom.xml文件中加<parent></parent>标签,在其中加入父类的坐标即可,如下:
<parent>
  <groupId>com.hongxing</groupId>
  <artifactId>hongxing-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</parent>


### PS:父类的maven项目中的src/main/java和src/test/java目录都可以删除。


## 使用maven构建web项目
详细见视频,在<dependency></dependency>中加入servlet.api,在maven中央仓库中查找,如下:
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
    <!-- 只在编译和测试时运行 -->
</dependency>
想在打包时直接运行jetty或tomcat,则在<build><plugins><plugin></plugin></plugins></build>中加入以下内容,上maven中央仓库中jetty maven plugin或tomcat官网的mavenplugin查找,粘贴如下:
<plugins>
    <plugin>
    <!-- <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.4.10.v20180503</version> -->
    <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
    <executions>
    <execution>
    <!-- 在打包成功后运行jetty服务 -->
    <phase>package</phase>
    <goals>
    <goal>run</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
    </plugins>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值