Maven学习

Maven

自动化构建项目

构建过程中的几个主要环节

  • 清理:删除以前的编译结果,为重新编译做好准备。
  • 编译:将Java源程序编译为字节码文件。
  • 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  • 报告:将每一次测试后以标准的格式记录和展示测试结果。
  • 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对象war包。
  • 安装:在Maven环境下特指将打包的结果——Jar包或War包安装到本地仓库中。
  • 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。

查看Maven版本(需要配置环境变量)

mvn -v

核心概念

约定的目录结构

Maven要想自动编译,那么他必须知道Java源文件在哪,所以需要约定目录结构。

HelloWorld(根目录)
|---src(原码)
|---|---main(主程序)
|---|---|---java(源文件)
|---|---|---resources(框架或其他工具的配置文件)
|---|---test(测试程序)
|---|---|---java
|---|---|---resourses
|---pom.xml(核心配置文件)

POM

Project Object Model 项目对象模型
核心的配置文件,与构建相关的一切设置都在这个文件中进行配置。

坐标

使用三个向量在仓库中唯一定位一个Maven工程。gav

  • groupid: 公司或组织域名倒序+项目名 — < groupid > com.wxy.maven </ groupid >
  • artifactid: 模块的名称 — < artifactid > HelloMaven </ artifactid>
  • version: 版本 — < version > 3.4.5 </ version >

坐标与仓库路径的关系:

groupid/artifactid/version/artifactid-version.jarp

依赖

项目需要的Maven工程,在仓库中查找。
对于我们自己开发的Maven工程,使用install命令就可以进入仓库。

mvn install

依赖的范围

<scrop>compile </scrop><!-- main + test+ 打包-->
test  <!-- test -->
provided <!-- 只在开发时 -->

依赖的传递性
非compile的依赖不能传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87y1q9st-1594973905747)(file://C:/Users/ASUS/Documents/Gridea/post-images/1594965645678.png)]
依赖的排除
在dependency标签中加入如下(会影响后续的项目):

<exclusions>
    <exclusion>
        <groupId>需要排除依赖的groupId</groupId>
        <artifactId>需要排除依赖的artifactId</artifactId>
    </exclusion>
</exclusions>

依赖的原则
解决模块工程之间jar包冲突问题:

  • 当有同名不同版本jar包被传递依赖时,路径最短者优先
  • 路径相同时,先声明者(dependency标签的声明顺序)优先

统一管理依赖的版本
1.使用properties标签,在其内部使用自定义标签同一声明版本号
2.在需要统一版本的位置,使用${自定义标签名}应用声明的版本号
3.使用properties标签不止能配置版本号,凡是需要同一声明再引用的场合都可以用

仓库

分类
本地仓库(当前电脑上部署的仓库目录)
远程仓库(私服【局域网】+中央仓库【Internet】+中央仓库镜像【分担中央仓库流量、提高访问速度】)
保存的内容
Maven工程:

  • 自身所需要的插件
  • 第三方框架或工具的jar包
  • 我们自己开发的Maven工程

生命周期、插件、目标

生命周期:

  • 各个构建环节的执行顺序
  • 核心程序定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的
  • 包含三个(clean–default–site)
  • 为了更好的实现自动化构建,不论现在要执行哪一个阶段,都是从这一个生命周期最开始的位置执行

插件和目标:

  • 生命周期的各个阶段仅仅定义了要执行的任务是什么
  • 各个阶段的插件和目标是对应的
  • 相似的目标有特定的插件来完成
  • 可以将目标看做“调用插件的命令”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x6gudOrd-1594973905750)(file://C:/Users/ASUS/Documents/Gridea/post-images/1594637621546.png)]

继承

由于test范围的依赖不能继承,所以会分散在各个模块中,很容易造成版本不一致。
为了同一管理各个模块工程中,对test范围的依赖版本。
可以将test范围依赖统一提取到“父”工程中,在子工程中声明test范围依赖不指定版本,以父工程统一设定为准,同时也便于修改。

聚合

一键安装各个模块工程.

常用Maven命令

执行与构建过程(编译、测试、打包等)相关的Maven命令,必须进入pom.xml所在的目录

  • mvn clean:清理
  • mvn compile:编译(主程序)
  • mvn test-compile:编译(测试程序)
  • mvn test:执行测试
  • mvn package:打包
  • mvn install:安装
  • mvn site:生成站点
  • mvn deploy:部署

关于联网的问题

Maven的核心程序中仅仅定义了抽象的声明周期,但是具体的工作必须由特定的插件来完成。而插件本身不包含在Maven核心程序中。但我们执行Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。

修改远程仓库(添加镜像)

<mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

在eclipse中使用Maven

现在的eclipse都内置了Maven插件,在修改设置后可以直接使用:window-Preference-Maven

  • Installations:Maven安装路径,不建议使用eclipse自带的版本 ,不稳定
  • User settings:指定conf/setting.xml的位置,进而获取本地仓库的位置

eclipse中的Maven工程默认是JDK1.5,修改默认配置可在setting.xml内插入如下:

<profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activate>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
</profile>

在eclipse中执行Maven命令
pom.xml右键 Run As,选择命令。
eclipse导入Maven工程
Import–Maven

继承

由于test范围的依赖不能继承,所以会分散在各个模块中,很容易造成版本不一致。
为了同一管理各个模块工程中,对test范围的依赖版本。
可以将test范围依赖统一提取到“父”工程中,在子工程中声明test范围依赖不指定版本,以父工程统一设定为准,同时也便于修改。

操作步骤:

  • 创建一个Maven工程作为父工程,pom.xml中插入一下:(注意:打包方式为Pom)
<groupId>com.xxx.xxx</groupId>
<artifactId>xxxx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
  • 在子工程中声明对父工程的引用
<!-- 子工程中声明父工程 -->
<parent>
    <groupId>com.xxx.xxx</groupId>
    <artifactId>xxxx</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
    <relativePath>../xxxx/pom.xml</relativePath>
</parent>
  • 将子工程的坐标中与父工程坐标中重复的内容删除
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TUp37Fld-1594973905753)(file://C:/Users/ASUS/Documents/Gridea/post-images/1594973307447.png)]
  • 在父工程中统一管理test范围的依赖,加入如下:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 在子工程中删除test范围依赖的版本号部分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PbB82Rcc-1594973905757)(file://C:/Users/ASUS/Documents/Gridea/post-images/1594973519106.png)]

配置完成后,执行安装命令要先安装父工程

聚合

一键安装各个模块工程.
在一个“总的聚合工程”中配置各个参与聚合的模块,然后对聚合工程的pom.xml执行maven install即可一键安装。

<modules>
    <!-- 相对路径 -->
    <module>../x</module>
    <module>../xx</module>
    <module>../xxx</module>
</modules>

Web的自动部署

在pom.xml文件中添加如下:
然后执行 mvn deploy

  <!--配置当前工程构建过程中的特殊设置   -->
  <build>
    <finalName>AtguiguWeb</finalName>
    <!-- 配置构建过程中需要使用的插件 -->
    <plugins>
        <plugin>
            <!-- cargo是一家专门从事启动Servlet容器的组织 -->
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.2.3</version>
            <!-- 针对插件进行的配置 -->
            <configuration>
                <!-- 配置当前系统中容器的位置 -->
                <container>
                    <containerId>tomcat6x</containerId>
                    <home>D:\DevInstall\apache-tomcat-6.0.39</home>
                </container>
                <configuration>
                    <type>existing</type>
                    <home>D:\DevInstall\apache-tomcat-6.0.39</home>
                    <!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
                    <properties>
                        <cargo.servlet.port>8989</cargo.servlet.port>
                    </properties>
                </configuration>
            </configuration>
            <!-- 配置插件在什么情况下执行 -->
            <executions>  
                <execution>  
                    <id>cargo-run</id>
                    <!-- 生命周期的阶段 -->  
                    <phase>install</phase>  
                    <goals>
                        <!-- 插件的目标 -->  
                        <goal>run</goal>  
                    </goals>  
                </execution>  
            </executions>
        </plugin>
     </plugins>
    </build>

查找依赖信息的网站

http://mvnrepository.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值