Maven 笔记 0x01:maven 简介

12 篇文章 0 订阅
12 篇文章 0 订阅

参考:https://www.bilibili.com/video/BV1Fz4y167p5


Maven 作用

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

Maven 的主要目标是希望开发人员能在最短的时间内理解开发的完整状态。

关键字:项目 & 管理

  • 项目构建
  • 依赖管理
  • 项目信息管理

思想:更科学地管理和构建项目

配置文件:对项目名称、版本号、项目依赖等信息进行描述。

使项目结构更加清晰。

Maven 仓库:该项目依赖的其他第三方组件(jar包),全部放入此仓库中,无需另行去开源网站分别下载,降低软件维护成本。


无论是小型开源项目、大型企业级应用;无论是传统的瀑布式开发,还是流行的敏捷开发,Maven 都能大显身手。

瀑布式开发 vs. 敏捷开发

瀑布式开发:【有明确的需求的项目】按需求进行规划,项目进行过程中要严格地产出文档,按照流程一步一步走下去。

敏捷开发:【需求不太明确,较创新型的项目】先将用户最关注的软件模型做出来并上线,在实际场景中再去对需求中的不足作快速修改再发布。敏捷的实现方式可以提供较小但快速的迭代,直到用户满意为止。


项目构建

构建(build)是每个程序员每天都要做的事情。
早上来到公司,第一件事就是从源代码库中把代码更新到本地,然后做一些单元测试,去启动服务,如果测试失败,还需要找同事去调试、修复代码等。最终才能回到自己的工作上来去编写自己的代码。

所以,除了编写源代码,每天有相当大的一部分时间是花在了编译、运行单元测试、生成文档、打包和部署等繁琐且不起眼的工作上。

生成文档、打包、部署等这类工作称为“构建”。如果每次都需要手动去做,可能每天8小时,有一大半的时间都在做这种构建,成本很高。于是,我们使用软件的方式,将这系列的工作完全自动化,使软件的构建能像全自动的流水线一样,只需要一条简单的命令,就能让这些工作自动地完成。

项目构建工具

Ant 构建

最早的构建工具,基于IDE。2000年最流行的java构建工具。

  • 缺点: 其 XML 脚本编写格式让 XML 文件特别大。
Maven [Java]

Maven本身使用java编写。项目对象模型,通过其描述信息来管理项目的构建、报告和文档。

第一次支持了“从网络上下载的依赖包(jar包)”的功能。

  • 只需要给出对应依赖包的地址,maven 会自动从网上下载这些依赖包到本地。

Maven 专注于依赖管理。依然使用 XML 作为配置文件格式。

Grandle

Grandle本身使用groovy编写。结合了 Ant 与 Maven 的优点,继承了 Ant 的灵活和 Maven 的生命周期管理。目前被 google 作为 android 御用的管理工具。

与 Ant 及 Maven 最大的区别是,Grandle 不使用 XML 而是使用 DSL 作为配置文件格式,使得脚本更加简洁。

Ant:比较老,一般还剩一些比较传统的软件企业还在使用;
Maven:当前大多数互联网公司都在使用,中文文档比较齐全。
Grandle:新型构建工具,有一些初创互联网公司在使用,以后有很大的使用空间。


Maven 特性

1. 依赖管理系统

不需要再分别手动去下载各种依赖的jar包再拷贝进项目中。直接通过配置,将所需要的jar包配置进来。(当存在大量的依赖jar包,不需要手动去下载,也不用担心会下载错版本)。

Maven 为 Java 世界引入了一个新的jar包依赖管理系统。若相应的jar包需要升级,直接修改配置文件即可。

  • 在 Java 世界中,可以用 groupIdartifactIdversion 组成的 Coodination(坐标)唯一标识一个依赖。

坐标属性:groupId、artifactId、version

任何基于 Maven 构建的项目自身也必须定义这三项属性(groupId、artifactId、version),生成的包可以是 jar 包,也可以是 war 包

groupId 和 artifactId 被统称为“坐标”是为了保证项目唯一性而提出的。在 Maven 本地仓库中,要找到一个项目,必须根据这两个ID来定位。

  • groupId:项目组织唯一的识别符。可分为多个段,第一段为域,第二段为公司(组织)名称[,第三段为项目名]—— org.tom[.test1](方括号为可选,很多groupId只有前两段)[实际对应java的包结构,也是main目录里java的目录结构]
  • artifactId项目唯一的标识符。一段或两段都可以,一段就是仅有项目名,两段就是另外还细分了 项目名-xxx,如测试项目(项目名-test)、练习项目(项目名-train)——test1-model(可以理解成:项目名-模块名)[实际对应项目的名称,也是项目根目录的名称]
  • version:当前项目的版本
# 项目目录结构
test1-model
|
|----src/main/java
                |
                |----org.tom
# 依赖包描述示例
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

# 如果你想把servlet的版本改为2.5的,直接改这里的依赖, Maven 就会自动把该版本的 jar 包下载下来.

Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。

参考: https://www.runoob.com/maven/maven-pom.html

# pom.xml示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- project是工程的根标签-->
 
 
    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 模型版本需要设置为 4.0。-->
    
    <!-- 以上每个POM文件的写法基本都一致 -->
    
    
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>project</artifactId>
 
    <!-- 版本号 在 artifact 的仓库中,它用来区分不同的版本-->
    <version>1.0</version>
</project>

2. 多模块构建

由于项目可能很大,所以需要拆分成多个模块。

在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。在该 POM 中可以使用 标签来定义一组子模块。

    <modules>
        <module>ruoyi-admin</module>
        <module>ruoyi-framework</module>
        <module>ruoyi-system</module>
        <module>ruoyi-quartz</module>
        <module>ruoyi-generator</module>
        <module>ruoyi-common</module>
    </modules>

parent POM 不会有什么实际构建产出。而 parent POM 中的 build 配置以及依赖配置都会自动继承给子 module。

3. 一致的 项目结构

以前使用 Eclipse 创建的项目,而现在用 IDEA 创建的项目,两者创建的项目的目录结构是不一样的。也就是说,用 Eclipse 创建的项目在 IDEA 中就没有那么方便,项目导入时可能就会出问题,需要修改很多东西,反之,IDEA 创建的项目导入到 Eclipse 也是如此。

Maven 统一了项目的目录结构,只要是 Maven 项目,不管是在 Eclipse 还是在 IDEA 中创建,目录结构都是一样的。

Maven 设计之初的理念就是 Conversion over configuration (约定大于配置)。其制定了一套 项目目录结构 作为标准的 Java 项目结构,解决不同 IDE 带来的文件目录不一致问题。

4. 一致的 构建模型 和 插件机制

Maven 项目中,我们可能会需要用到 tomcat 服务器,就可以通过 插件机制,把我们所需要的服务器引进来。

如你需要 tomcat,就把 tomcat 相关的插件拷贝进来,要用 jetty 服务器,就把 jetty 拷进来。POM 中使用 来标记插件。

    <plugins>
    
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.1.1.RELEASE</version>
            <configuration>
                <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        
        <plugin>   
            <groupId>org.apache.maven.plugins</groupId>   
            <artifactId>maven-war-plugin</artifactId>   
            <version>3.1.0</version>   
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <warName>${project.artifactId}</warName>
            </configuration>   
       </plugin> 
       
    </plugins>
    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.25</version>
        <configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <contextPath>/test</contextPath>
        </configuration>
    </plugin>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值