web学习--maven--项目管理工具

写在前面:
这学期搞主攻算法去了,web的知识都快忘了。开始复习学习了。

文章目录

  • maven介绍
    • 功能介绍
    • maven安装
    • jar包搜索
    • 仓库
  • pom文件
    • 项目介绍
    • 父工程
    • 依赖管理
    • 属性控制
    • 可选依赖
    • 构建
  • 依赖管理
    • 依赖的传递
    • 排除依赖
    • 可选依赖
  • maven生命周期
  • 分模块开发
    • 模块聚合
    • 继承
  • 属性管理
  • 资源配置
  • 多环境

maven介绍

功能介绍

maven是一个软件项目管理及自动构建工具。
作用:

  1. 依赖管理
    方便的解决项目依赖,不用在去官方一个个的下载jar包了
    只需要修改配置信息就会自动导入。

  2. 统一的项目结构
    项目结构都是一样的,统一结构。
    在这里插入图片描述

  3. 项目构建
    构建流程一样
    在这里插入图片描述

maven安装

写过了windows下maven更新/安装

jar包搜索

  1. 在idea的pom文件的dependency的artifactId输入需要的jar包名字,可以自动搜索。
  2. 不过上面这种方法第一次使用的jar一般是搜索不到的。去浏览器搜索maven + jar名字,如下面,一般第一个就是,如果不是也可以点进去maven里面搜
    在这里插入图片描述

在这里插入图片描述

仓库

maven对jar包管理,主要就是存放在仓库里面。如在安装文档提到过,修改本地仓库的位置。那个设置的位置就是本地的仓库。我们在idea的pom文件中自动联想主要的就是依靠本地仓库,如果没有就会自动联网到中央仓库(全球唯一)下载到本地来。
私服:由于中央仓库在国外,连接会比较慢,所以需要私服来加快速度。如配置镜像仓库的时候设置的阿里云就是的。

pom文件

pom.xml文件是maven项目的核心配置文件
这里介绍主要使用的标签。

项目介绍

最开始是本次项目的基础介绍

<!-- 表明是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"><!-- 模型版本 --><modelVersion>4.0.0</modelVersion><!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,maven会将该项目打成的jar包放本地路径: --><groupId>c</groupId><!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --><artifactId>project</artifactId><!-- 版本号 --><version>1.0</version><!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型这里补充一点,pom是项目聚合的root模块所使用的jar包括java类资源等等war包括javaweb所需要的应用,包括静态等,可以交给服务器启动如tomcat但是springboot使用jar和war都可以,因为里面内置tomcatear包括多个jar和web程序的集合 --><packaging>jar</packaging><!--项目的名称, Maven产生的文档用 --><name>banseon-maven</name><!--项目主页的URL, Maven产生的文档用 --><url>http://www.baidu.com/banseon</url></project>

父工程

在建springboot项目的时候,其有一个spring-boot-parent的父工程

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-parent</artifactId><version></version><!-- 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项 目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。 --><relativePath />
</parent>

依赖管理

这个是用的最多的。
在dependencies标签中使用dependency代表每一个依赖项目

    <dependencies><dependency><!--依赖的group ID --><groupId>org.springframework.boot</groupId><!--依赖的artifact ID --><artifactId>spring-boot-starter-web</artifactId><!--依赖的版本号。 在Maven 2里, 也可以配置成版本号的范围。 --><version></version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version></version><!-- 依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应,  --><type>jar</type><!--依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。- compile :默认范围,用于编译 log4j- provided:类似于编译,但支持你期待jdk或者容器提供,servlet-api- runtime: 在执行时需要使用 jdbc驱动- test: 用于test任务时使用 junit--><scope></scope><!-- 依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成 JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。 --><classifier></classifier><!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 这里后面会详细讲--><exclusions><exclusion><artifactId></artifactId><groupId></groupId></exclusion></exclusions><!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。这里也会讲,这个和exclusions一样作用于依赖传递 --><optional>true</optional></dependency></dependencies>

属性控制

相当于变量
常见一个name的常数值为value,如下。

    <properties><name>value</name></properties>

这个一般用于版本控制如,取值使用${name}既可以了

    <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><djl.version>0.11.0</djl.version></properties><dependency><groupId>ai.djl.pytorch</groupId><artifactId>pytorch-model-zoo</artifactId><version>${djl.version}</version></dependency><dependency><groupId>ai.djl.pytorch</groupId><artifactId>pytorch-engine</artifactId><version>${djl.version}</version><scope>runtime</scope></dependency>

除了版本控制这里记录一下常见的属性

    <properties><--maven编译版本--><maven.compiler.source>17</maven.compiler.source><--maven发行版本--><maven.compiler.target>17</maven.compiler.target><--编码设置--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>

可选依赖

<!-- 继承自该项目的所有子项目的默认依赖信息。
这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖,
--><dependencyManagement><dependencies><!--参见dependencies/dependency元素 --><dependency></dependency></dependencies></dependencyManagement>

构建

    <build><!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 --><sourceDirectory /><!--该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。 --><scriptSourceDirectory /><!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 --><testSourceDirectory /><!--被编译过的应用程序class文件存放的目录。 --><outputDirectory /><!--被编译过的测试class文件存放的目录。 --><testOutputDirectory /><!--使用来自该项目的一系列构建扩展 --><extensions><!--描述使用到的构建扩展。 --><extension><!--构建扩展的groupId --><groupId /><!--构建扩展的artifactId --><artifactId /><!--构建扩展的版本 --><version /></extension></extensions><!--当项目没有规定目标(Maven2 叫做阶段)时的默认值 --><defaultGoal /><!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。 --><resources><!--这个元素描述了项目相关或测试相关的所有资源路径 --><resource><!-- 描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例 子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven /messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。 --><targetPath /><!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 --><filtering /><!--描述存放资源的目录,该路径相对POM路径 --><directory /><!--包含的模式列表,例如**/*.xml. --><includes /><!--排除的模式列表,例如**/*.xml --><excludes /></resource></resources><!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。 --><testResources><!--这个元素描述了测试相关的所有资源路径,参见build/resources/resource元素的说明 --><testResource><targetPath /><filtering /><directory /><includes /><excludes /></testResource></testResources><!--构建产生的所有文件存放的目录 --><directory /><!--产生的构件的文件名,默认值是${artifactId}-${version}。 --><finalName /><!--当filtering开关打开时,使用到的过滤器属性文件列表 --><filters /><!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置 --><pluginManagement><!--使用的插件列表 。 --><plugins><!--plugin元素包含描述插件所需要的信息。 --><plugin></plugin></plugins></pluginManagement><!--使用的插件列表 --><plugins><!--参见build/pluginManagement/plugins/plugin元素 --><plugin><groupId /><artifactId /><version /><extensions /></plugin></plugins></build>

依赖管理

在pom文件的依赖管理介绍的依赖的使用,这里在具体展开聊聊

依赖的传递

如果a依赖于b,b依赖于c,即使在a项目中没有添加c的依赖,也会自动导入进来的。
在idea的显示图可以直观的看到依赖的传递
在这里插入图片描述
在这里插入图片描述

排除依赖

在pom文件中介绍了一个叫exclusions。
就上面的例子如果a不想依赖于b中的c,那么我们可以使用这个属性来排除掉c,断开依赖的传递。
不需要版本,排除所有。

<exclusions><exclusion><artifactId></artifactId><groupId></groupId></exclusion>
</exclusions>

可选依赖

依赖用于该项目是否允许该依赖进行传递,如果设置为true,则不会进行依赖传递

<optional>true</optional>

maven生命周期

在介绍的构建流程里面我们说了maven提供了统一的项目构建的流程。
在idea点击maven打开生命周期可以看到。
在maven生命周期中,在同一个生命周期我们运行后面的阶段前面的也会运行。
生命周期

  • clean
  • default(或 build):项目部署的处理
  • site:项目站点文档创建的处理
    在这里插入图片描述
  1. clean清理
    清理掉maven残留
  2. compile
    执行项目的编译
  3. test
    进行项目所有的单元测试,但是有时候我们需要跳过这个阶段。
    可以在idea中点击跳过
    在这里插入图片描述
    也可以命令行跳过
mvn clean install -DskipTests
mvn clean install -Dmaven.test.skip=true- DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下- Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类
  1. package
    创建JAR/WAR包如在 pom.xml 中定义提及的包
  2. install
    安装打包的项目到本地仓库,以供其他项目使用
  3. deploy
    拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

分模块开发

这个差不多是为每一个maven做一个工作
原理就是做一个就安装到本地上,然后其他模块需要用就去加相关的依赖

模块聚合

新建一个模块用于专门的管理。只包括pom.xml文件
在pom文件的packaging属性的值设置为pom
定义当前模块进行构建操作时候关联的其他模块的名称
modules每一个模块用module代表

<modules><module>../demo1</module><module>../demo2</module><module>../demo3</module>
</modules>

定义好后,每一会根据依赖顺序来进行构建如a->b->c
就会先c->b->a
如果是复杂的就和module定义的顺序有关了

继承

通过继承实现在子工程中使用父工程的配置
类似springboot的继承

<parent>...<relativePath>填写父工程的pom
</parent>

父工程依赖管理

<dependcyManagement/>

子使用的时候就可以使用里面的依赖而不选取版本了

插件也是这样

<pluginManagement/>

继承的不仅仅只是这一点还包括下面的
在这里插入图片描述

属性管理

在pom里面介绍的时候提到过属性控制,主要是自定义属性,这里在来系统的看看。
属性类别

  1. 自定义属性
    讲过了
  2. 内置属性
    maven内置属性如${project.version} project可以省略
  3. setting属性
    maven的setting.xml属性
  4. java系统属性

java

System.getProperties()

里面的属性就可以了
或者命令行

mvn help:system
  1. 环境变量属性

资源配置

这部分功能我,我觉得不是很重要,因为配置中心会比这个更好用,而且这个用起来比较繁琐
pom文件中定义属性value,也就是maven中定义属性的地方
在pom设定配置文件路径

<resoureces><resource><diretory>配置文件的路径</><filtering>true</></resource>
</resoureces>

使用就在配置文件中用${属性}

多环境

每一个profile就是一个环境,环境配置包括

 <profiles><profile><!--不同环境Profile的唯一id--><id>dev</id><properties><!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个--><profiles.active>dev</profiles.active><!--默认配置--><activation><activeByDefault>true</activeByDefault>
</activation></properties></profile><profile></></profiles>

多环境启动

mvn clean package -P然后是环境的id

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

debian linux安装配置企业私有网盘

一、适用环境 1、中小型企业的某些部门之间经常要进行数据的交换与共享时&#xff0c;则可使用企业内部专业的服务器&#xff0c;把剩余的硬盘存储容量配置成为共享网盘的形式&#xff0c;供部门之间进行数据交换。 2、可将多个硬盘通过debian Linux系统组成软阵列的1个逻辑盘…

【Matlab】神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值

目前关于神经网络遗传算法函数极值寻优——非线性函数求极值的博客资源已经不少了&#xff0c;我看了下来源&#xff0c;最初的应该是来自于Matlab中文论坛&#xff0c;论坛出版的《MATLAB神经网络30个案例分析》第4章就是《神经网络遗传算法函数极值寻优——非线性函数极值寻优…

一次源码编译安装PostgreSql失败

需要perl&#xff1b;之前博文已提到&#xff1b;之前有一种编程语言叫perl&#xff0c;此perl应该不是那个&#xff1b;可到其官网下载&#xff0c;Perl Download - www.perl.org 安装时添加到环境变量&#xff1b; 可能是一个东西&#xff1b;有编程语言和工具&#xff1b;大…

Python爬虫使用代理IP的实现

使用爬虫时&#xff0c;如果目标网站对访问的速度或次数要求较高&#xff0c;那么你的 IP 就很容易被封掉&#xff0c;也就意味着在一段时间内无法再进行下一步的工作。这时候代理 IP 能够给我们带来很大的便利&#xff0c;不管网站怎么封&#xff0c;只要能找到一个新的代理 I…

在 TypeScript 中有效地使用 keyof 和 typeof 来表示类型

在本文中&#xff0c;我们将学习如何通过组合类型运算符和枚举来提取和声明常量类型typeof&#xff0c;以使您的代码库得到优化。keyof 先决条件 为了获得更好的编码体验&#xff0c;您应该在 IDE 中安装 TypeScript&#xff0c;例如VSCode。它将为您提供许多基本功能&#xff…

MySQL的基本语法

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于MySQL的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.数据库&#xff08;建立&#xff0c;查…

备战秋招002(20230704)

文章目录 前言一、今天学习了什么&#xff1f;二、关于问题的答案1.线程池2.synchronized关键字3、volatile 总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. …

【网络原理】TCP/IP协议五层模型

&#x1f94a;作者&#xff1a;一只爱打拳的程序猿&#xff0c;Java领域新星创作者&#xff0c;CSDN、阿里云社区优质创作者。 &#x1f93c;专栏收录于&#xff1a;计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …

浏览器绘制图表的 N 种方法 | 可视化

前言 DORAVIS 可视化大屏编辑器&#xff0c;是植根于浏览器的可视化平台。我们不难发现&#xff0c;DORAVIS 的众多图表中&#xff0c;有多种实现方案。如&#xff0c;基于 ECharts 二次开发的 BI 图表&#xff0c;有基于 Mapbox/leaflet 等实现的地理图表&#xff0c;以及根据…

【Flutter 组件】005-基础组件:单选、开关和复选框

【Flutter 组件】005-基础组件&#xff1a;单选、开关和复选框 文章目录 【Flutter 组件】005-基础组件&#xff1a;单选、开关和复选框一、概述二、基本使用1、开关代码示例运行结果 2、复选框代码示例运行结果 3、多个选项单选代码示例运行结果 4、多个选项多选代码示例运行结…

易微联2.4G通断器添加到手机步骤

蓝牙款无WIFI&#xff0c;不用扫码&#xff0c;按住通断器上的按钮&#xff0c;会先闪一下&#xff0c;再闪两下。闪一下的时候连手机&#xff0c;闪两下清码。 手机上打开易微联app&#xff0c;依次点击加号/轻智能遥控器/单按键遥控器/添加完成。 返回打开刚才添加的开关&a…

图像处理--边缘检测算子

算子推导过程 1、知识引入&#xff1a; 在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率&#xff0c;根据导数的定义有&#xff1a; 在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数&#xff0c;根据定义有&#xff1a; …