Maven的简单介绍

news2024/9/25 11:20:13

Maven

  1. 构件

    <packaging> : pom、jar、ear、war以及maven-plugin,构建Maven之后所生成的文件类型,Pom本身不产生构件,用来作为依赖库。
    pom类型常用于微服务中作为父Pom,通过 可以将子模块包含进来,共享父Pom的依赖,

  2. GAV坐标

    <groupId> 、<artifactId> 以及<version> 的首字母

    <groupId>:项目或者项目组的全局唯一标识,通常是Java源代码中的全限定Java包名。如io.netty

    <artifactId>:某个项目组的不同构件,如netty-all

    <version>:构件版本

    <type>:构件的类型

    <classifier>:区分相同的pom但是被不同方式构建的构件,如javadoc、sources、jdk16、jdk17

  3. 依赖


<dependencies>
    <dependency>
        <groupId/>
        <artifactId/>
        <version/>
        <!--    type、scope 如果依赖不是compile 或者 jar 的依赖 是必须的-->
        <type/>
        <scope/>
        <!--    指定元素在文件系统中的绝对位置   -->
        <systemPath/>
    </dependency>
    ...
</dependencies>

<scope>

  • compile:编译和执行需要的默认值
  • runtime:只有执行需要
  • optional:不被引用了这个项目所产生的构件的其他项目,视为传递依赖
  • provided:不会被包含在由这个POM产生的WAR文件的WEB_INF/lib中
  • test:只有编译和测试的执行需要
  1. 依赖管理

<dependencyManagement>:可以包含被其他项目使用的<dependency>,可以供POM的子项目进行使用,其他项目可以通过<
scope>的import来导入他们。


<properties>
    <netty.version>4.1.9</netty.version>
</properties>
<dependencyManagement>
<dependencies>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>${netty.version}</version>
    </dependency>
</dependencies>
</dependencyManagement>

  1. 生命周期

三个内置的构建生命周期:clear、default、site,前两个用于清理和分发项目。

构建生命周期的各个阶段的部分清单:

  • validate 检查项目是否正确,所有必须的信息是否已经就绪
  • process-source 处理源代码,
  • compile 编译项目的源代码
  • process-test-resource 复制并处理资源到测试目标目录中
  • test-compile 将测试源代码编译到测试目标目录中
  • test 使用合适的单元测试框架测试编译的源代码
  • package 将编译的代码打包为他的可分发格式
  • integration-test 处理并将软件包部署到一个可以运行集成测试的环境中
  • verify 运行任何的检查以验证软件包是否有效,并符合质量标准
  • install 将软件包安装到本地存储库,在那里其他本地构建的鲜蘑菇可以将他引用为依赖
  • deploy 将最终构建上传到远程存储库,以与其他开发人员和项目共享。
  1. 插件

所有的构建生命周期阶段的执行都通过插件来实现。
在这里插入图片描述


<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
</plugin>
  1. 插件管理

如同dependencyManagement一样,子Pom可以直接继承使用。


<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <!--      maven 提供的插件,所以可以省略groupId          -->
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

子类继承插件


<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

  1. 配置文件

通过<profile>来改变pom的行为,根据JDK版本、操作系统或者目标部署环境来构建参数

  1. 存储库

可以是远程也能是本地的。

  1. 快照和发布

远程库通常包含了快照和发布两个区域,

  • 如果<version> 由SNAPSHOT结尾会被认为该构件尚未发布,可以使用相同Version进行上传,每次哦都会分配一个唯一的时间戳,所以项目拉取的总是最新的构件。

  • 非SNAPSHOT结尾就是发布版本,只允许某个特定Version上传一次。

当构建SNAPSHHOT
依赖的项目是,会检查本地依赖库是否相应的版本,如果没有就会去指定的远程仓库进行检索,这时候就会拉取到最新时间戳的构件;如果本地有这个构件,且当前构建也是这一天中的第一个,那么会尝试更新本地副本。可以通过setting.xml进行设置。

pom的继承和聚合

  1. 继承

包含子项目要继承的信息,当然子项目可以重写

  1. 聚合

聚合器pom会构建一个或者多个子项目。


<modules>
    <module>Server</module>
    <module>Client</module>
</modules>
  1. 案例

<project>
    <modelVersion>4.0.0</modelVersion>
    <!--  声明当前pom的父pom  -->
    <parent>
        <groupId>nia</groupId>
        <artifactId>nia-samples-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!--  当前pom的gav  -->
    <artifactId>chapter2</artifactId>
    <packaging>pom</packaging>
    <name>2. Echo Client and Server</name>
    <!--  声明了父pom下的目录,其中包含了将由这个pom来构建的maven项目  -->
    <modules>
        <module>Client</module>
        <module>Server</module>
    </modules>
    <!--  可以通过命令行进行重写。默认子项目会继承这些属性  -->
    <properties>
        <echo-server.hostname>localhost</echo-server.hostname>
        <echo-server.port>9999</echo-server.port>
    </properties>
    <!-- 父Pom的依赖子项目可以继承  -->
    <dependencies>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
    </dependencies>
    <build>
        <!--    父Pom的插件可以由子项目继承    -->
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

<project>
    <!--  指明父pom  -->
    <parent>
        <groupId>nia</groupId>
        <artifactId>chapter2</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>echo-server</artifactId>


    <build>
        <!--    exec-maven-plugin 插件可以执行Maven 命令行的任意命令 ;在这里,我们用它来执行Echo服务    -->
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>run-server</id>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>nia.echo.EchoServer</mainClass>
                    <arguments>
                        <argument>${echo-server.port}</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

  1. Mvn 语法
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据库与事务系列】多数据源切换

分库分表 不光是管理多个数据源&#xff0c;是对sql的优化、改写、归并等一系列操作的解决方案。关注的是sql语句。以shardingSphere为例&#xff0c;虽然也支持跟sql无关的hint策略提供路由功能&#xff0c;但是在sql改写以及归并过程中&#xff0c;依旧对sql有限制。 多数据…

页面转变为灰色,如此简单

页面转变为灰色 网站变灰色 html标签 一、通过浏览器操作 在网页端按下 F12&#xff0c;打开开发者模式&#xff0c;用元素选择器定位到 HTML 标签上&#xff0c;在「样式」的面板中往下翻&#xff0c;就可以看到这样一段代码。 在html标签添加filter: grayscale(100%); 效…

LAS、CTC、RNN-T、NT、MoChA

LAS LAS是一个做语音识别的经典seq2seq模型&#xff0c;主要分为三个部分Listen、Attention、Spell Listen Listen部分就是一个encoder。 输入声学特征向量&#xff0c;提取信息、消除噪声&#xff0c;输出向量。 encoder可以是RNN 也可以是CNN。比较常见的是先用CNN&…

多元宇宙算法求解电力系统多目标优化问题(Matlab实现)【电气期刊论文复现与算例创新】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

Shiro-SpringBoot (一)

前不久负责项目中刚好也使用了Shiro做权限控制&#xff0c;趁着空闲期想把之前做的整理一下。在日常项目开发中&#xff0c;权限认证是不可少的模块。比较常用的有Spring Security&#xff0c;或是轻量级的Apache Shiro。相对来说Shiro提供了认证、授权、加密、会话管理、与Web…

华为机试 - 羊、狼、农夫过河

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 羊、狼、农夫都在岸边&#xff0c;当羊的数量小于狼的数量时&#xff0c;狼会攻击羊&#xff0c;农夫则会损失羊。农夫有一艘容量固定的船&#xff0c;能够承载固定数量的动物。 要求求出不损失羊情况…

体验Vue3的SSR框架 - Nuxt3

SSR 与 Nuxt SSR 是 Server-Side Rendering&#xff0c;即服务端渲染的英文缩写。 Vue.js 是一个用于构建客户端应用的框架。默认情况下&#xff0c;Vue 组件的职责是在浏览器中生成和操作 DOM。在客户端是单页应用 (SPA) 。 也可以将 vue 程序在服务端渲染&#xff0c;渲染…

【GD-1开发板】CH340驱动安装方法

CH340驱动安装方法正常情况异常情况CH340驱动安装步骤现在国产ARM替代STM32的arm芯片运动正如火如荼进行中&#xff0c;我也录制了一套完整的”ARM嵌入式开发入门教程“&#xff0c;并配套了一个GD32F103C8T6的开发板。 但有小伙伴拿到板子后&#xff0c;说下载程序的时候&…

实验七:定时/计数器8253、8254

目录 例实验目的实验内容报告要求例 已知8253的两个计数器CLK0=1MHZ,CLK1=1KHZ,现系统要求8253的OUT1产生0.1s的定时方波信号。 (1):应如何实现? (2):说明两个计数器的工作方式并计算计数初值 (3):编写初始化程序(8253的端口地址80H-83H,均采用二进制计数) C…

详解torch.nn.functional.grid_sample函数(通俗易懂):可实现对特征图的水平/垂直翻转

一、函数介绍 Pytorch中grid_sample函数的接口声明如下&#xff0c;具体网址可以点这里 torch.nn.functional.grid_sample(input, grid, mode‘bilinear’, padding_mode‘zeros’, align_cornersNone) 为了简单起见&#xff0c;以下讨论都是基于如下参数进行实验及讲解的&…

BSN开放联盟链“中移链”浏览器2.0正式发布!

由中国移动信息技术中心自主研发的中移链EOS区块链浏览器2.0版本&#xff0c;已在区块链服务网络&#xff08;BSN&#xff09;官网和BSN-DDC网络官网正式发布。 中移链浏览器2.0 无论是从政策导向还是从业务需求方面来说&#xff0c;区块链技术的发展已经是一种不可逆的趋势&a…

查找-二叉排序树

问题引入 【问题描述】 输入若干个整数建立二叉排序树,以0结束输入,在二叉排序树上查找关键字,删除指定关键字结点。 【输入形式】 (1)第一行,输入若干个整数,输入0结束输入; 如输入关键字 45 24 53 12 28 90 0 可建立如下二叉排序树 (2)第二行,输入两个整数,一…

GameOff2022参与有感

GameOff2022参与有感以及年度总结 厚颜无耻的用我们美术的立绘 GameOff— Redemption 很高兴在一个月的时间里面和大家一起完成了《Redemption》 比赛链接&#xff1a;Itch.io 百度云盘链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ylK0QRr2lmkqi4JF1wsXtA 提…

【servelt原理_6_servlet核心接口和类】

servlet核心接口和类 在Servlet体系中&#xff0c;除了实现servlet接口,还可以通过继承GenericServlet或HttpServlet类实现编写1.Servlet接口 servlet接口是整个servlet的核心。它是所有Servlet类必须直接或者间接实现的一个接口&#xff0c;其内部需要实现的5个方法分别关乎…

基于flv.js的视频自动播放

1: html <video class"video-content" id"video">您的浏览器不支持 HTML5 video&#xff01; </video> 2: 创建flv实例并播放 let videoPlayer document.getElementById(video); //获取html if (flvJs.isSupported()) {//创建flv实例this.P…

音视频开发——FFmpeg技术点 【进阶一览】

概述 Fmpeg是一套领先的音视频多媒体处理开源框架&#xff0c;采用LGPL或GPL许可证。它提供了对音视频的采集、编码、解码、转码、音视频分离、合并、流化、过滤器等丰富的功能&#xff0c;包含了非常先进的音频/视频编解码库libavcodec&#xff0c;具有非常高的可移植性和编解…

[附源码]计算机毕业设计中小学课后延时服务管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Git 之 已有项目创建 git 仓库

Git 之 已有项目创建 git 仓库前言一、现在 github/gitee 中创建仓库二、在项目的文件夹当中 git bash here1.git init2. git remote add origin 仓库地址3. git pull origin master4. git add . git commit -m git push -u origin master前言 项目已经开始写了,但是还没有…

干货 | 数字经济创新创业——如何造就成功的职业生涯

下文整理自清华大学大数据能力提升项目能力提升模块课程“Innovation & Entrepreneurship for Digital Economy”&#xff08;数字经济创新创业课程)的精彩内容。主讲嘉宾&#xff1a;Kris Singh: CEO at SRII, Palo Alto, CaliforniaVisiting Professor of Tsinghua Unive…

第一天:Python元学习——通用人工智能的实现

文章目录0 封面1 第一章&#xff1a;元学习简介1.1 元学习与少样本学习1.2 元学习的类型——学习度量空间1.3 学习初始化1.4 学习优化器1.5 通过梯度下降来学习如何通过梯度下降来学习2 第二章&#xff1a;使用孪生网络进行人脸识别与音频视频2.1 什么是孪生神经网络孪生神经网…