Maven 简介

Maven 简介

对自己的知识进行一个整理。

Maven

  • 约定优于配置,配置优于代码
  • Maven是一个专注服务于 Java 平台的项目构建和依赖管理的综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
    在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置

构建

  • 构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页
    面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
构建过程环节
  1. 清理:删除以前的编译结果,为重新编译做好准备。
  2. 编译:将 Java 源程序编译为字节码文件。
  3. 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  4. 报告:在每一次测试后以标准的格式记录和展示测试结果。
  5. 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web
    工程对应 war 包。
  6. 安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
  7. 部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

Maven 核心概念

九个概念

①POM
②目录结构
③坐标
④依赖管理
⑤继承
⑥聚合
⑦仓库管理
⑧生命周期
⑨插件和目标

//坐标
<groupId>com.test.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>

//依赖
<dependency>
<groupId>com.test.maven</groupId>
 <artifactId>Hello</artifactId>
 <version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>

//依赖的排除
<dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>HelloFriend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>jar</type>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

//统一声明版本号
<properties>
    <atguigu.spring.version>4.1.1.RELEASE</atguigu.spring.version>
</properties>

//使用版本号
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${atguigu.spring.version}</version>
    </dependency>
……
</dependencies>

//编码
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

//依赖排除
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<exclusions>
    <exclusion>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
    </exclusion>
</exclusions>
</dependency>

这里写图片描述

一. POM

Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。

二. 目录结构
    ProjectName           (工程名字) 
    |---src                       (源码目录)
    |---|---main          (程序目录 )
    |---|---|---java      (主程序Java源文件)
    |---|---|---resources (主程序资源文件)
    |---|---test          (测试程序目录)
    |---|---|---java     (测试程序Java源文件)
    |---|---|---resources (测试程序资源文件)
    |---target            (编译结果)
    |---|---pom.xml       (POM) 
三. 坐标

使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。
[1]groupid:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本 (SNAPSHOT/RELEASE)

四. 依赖

Ⅰ依赖定义
当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖。
Ⅱ 依赖的范围 (scope)
a) compile 部署
b) test 测试 junit
c) provided 编译 servlet
d) runtime 运行市 JDBC驱动实现
e) system 本地 短信接口

[1]从项目结构角度理解 compile 和 test 的区别
maven-compile-test

[2]从开发和运行这两个不同阶段理解 compile 和 provided 的区别

maven-compile-provided

[3] 总结

.TablesAreCool
主程序×
测试程序
参与部署××

Ⅲ 依赖的传递性
A 依赖 B,B 依赖 C,A 能否使用 C 呢?
依赖的传递性

Ⅳ 依赖的排除
如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当
前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时
候将 B 排除。

Ⅴ统一管理所依赖 jar 包的版本
对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提
取出来
[1]统一声明版本号
[2]引用前面声明的版本号

Ⅵ 依赖的原则:解决 jar 包冲突
[1]路径最短者优先
路径最短者优先
[2]路径相同时先声明者优先 (dependency 标签配置的先后顺序)
先声明者优先

五 . 继承

依赖可以给子工程自己的jar包信息,但对于非 compile 范围的依赖信息是不能在“依赖链”中传递的。如JUnit 包会在各个模块重新添加,必将会有版本问题。使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理。

1#. 创建父工程
创建父工程和创建一般的 Java 工程操作一致,唯一需要注意的是:打包方式处要设置为 pom。

2#.在子工程中引用父工程

<parent>
<!-- 父工程坐标 -->
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <relativePath>从当前目录到父项目的 pom.xml 文件的相对路径</relativePath>
</parent>

<parent>
    <groupId>com.test.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- 指定从当前子工程的pom.xml文件出发,查找父工程的pom.xml的路径 -->
    <relativePath>../Parent/pom.xml</relativePath>
</parent>

此时如果子工程的 groupId 和 version 如果和父工程重复则可以删除。

3#.在父工程中管理依赖
将 Parent 项目中的 dependencies 标签,用 dependencyManagement 标签括起来

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在子项目中重新指定需要的依赖,删除范围和版本号

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

继承可以定义父类子类等
继承可以定义父类子类等

六 . 聚合

1#. 为什么要使用聚合?
将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进
行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。

2#. 如何配置聚合?
在总的聚合工程中使用 modules/module 标签组合,指定模块工程的相对路径

<modules>
    <module>../dao</module>
    <module>../contorl</module>
    <module>../Service</module>
</modules>
七 .仓库管理

1#. 分类
[1]本地仓库:为当前本机电脑上的所有 Maven 工程服务。
[2]远程仓库
(1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
私服

(2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
(3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的

2#. 仓库中的文件
[1]Maven 的插件
[2]我们自己开发的项目的模块
[3]第三方框架或工具的 jar 包
※不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。

八.生命周期

生命周期

一. 什么是 Maven 的生命周期?
●Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命
令了。
●Maven 有三套相互独立的生命周期,分别是:
①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
③Site Lifecycle 生成项目报告,站点,发布站点。
它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以
直接运行 mvn clean install site 运行所有这三套生命周期。
每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比
如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。

二. Clean 生命周期
Clean 生命周期一共包含了三个阶段:
①pre-clean 执行一些需要在 clean 之前完成的工作
②clean 移除所有上一次构建生成的文件
③post-clean 执行一些需要在 clean 之后立刻完成的工作

三. Site 生命周期
①pre-site 执行一些需要在生成站点文档之前完成的工作
②site 生成项目的站点文档
③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
④site-deploy 将生成的站点文档部署到特定的服务器上
这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大
的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。

四. Default 生命周期
Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,
只解释一些比较重要和常用的阶段:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

五. 生命周期与自动化构建
运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行 mvn install 的时候,代码会
被编译,测试,打包。这就是 Maven 为什么能够自动执行构建过程的各个环节的原因。此外,Maven 的插
件机制是完全依赖 Maven 的生命周期的,因此理解生命周期至关重要。

六. 插件和目标
●Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
●每个插件都能实现多个功能,每个功能就是一个插件目标。
●Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
例如:compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标。

CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值