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

news2025/1/20 3:45:26
写在前面:
这学期搞主攻算法去了,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都可以,因为里面内置tomcat
	ear包括多个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.coloradmin.cn/o/719062.html

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

相关文章

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(三)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践&#xff0c;帮助开发组织减少发布的软件中的漏洞数量&#xff0c;减少利用未检测到或未解决的漏洞的潜在影响&#xff0c;从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

【Nginx05】Nginx学习:HTTP核心模块(二)Server

Nginx学习&#xff1a;HTTP核心模块&#xff08;二&#xff09;Server 第一个重要的子模块就是这个 Server 相关的模块。Server 代表服务的意思&#xff0c;其实就是这个 Nginx 的 HTTP 服务端所能提供的服务。或者更直白点说&#xff0c;就是虚拟主机的配置。通过 Server &…

SpringBoot操作Excel实现导入和导出功能(详细讲解+Gitee源码)

前言&#xff1a;在日常的开发中&#xff0c;避免不了操作Excel&#xff0c;比如从系统当中导出一个报表&#xff0c;或者通过解析客户上传的Excel文件进行批量解析数据入库等等&#xff0c;本篇博客主要汇总日常开发中如何使用开源的Apache提供的POI流操作Excel进行导入导出功…

el-dialog 层级问题混乱

使用 element -UI 的弹窗时&#xff0c;一般来说弹窗的层级应该比较高&#xff0c;背景置灰。 下边这个弹窗是正常情况下的&#xff1a; 有时候出现这样的情况&#xff1a; 解决问题&#xff1a; 只需要 在标签里边添加 append-to-body 属性问题就解决了。

WPF TextBox 添加范围验证

WPF TextBox 添加范围验证 添加范围验证&#xff0c;若出现范围错误添加信息捕捉 使用到技术&#xff1a;使用ValidationRules实现范围验证&#xff0c;当范围出现错误时&#xff0c;可以通过触发器Validation.HasErrorTrue设置自定义错误样式。 使用Behavior技术捕捉所有验证…

1-Nginx介绍及安装(源码安装)

1.Nginx介绍 Nginx&#xff08;engine x&#xff09;是一个轻量级、高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP服务器。 Nginx特点&#xff1a; ->占用内存少 ->并发能力强(3W/S) 2.Nginx安装 2.1.环境 [rootcentos79-3 ~]# cat /etc/redha…

未来网站开发必备:14个让你惊艳的JavaScript Web API!

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

进制(数制)及进制之间的转换汇总(超详细)

进制是一种表示数字的方法&#xff0c;它决定了数字在数值系统中的位置和权值。常见的进制包括十进制、二进制、八进制和十六进制。 1. 十进制&#xff08;decimal&#xff09;&#xff1a; 十进制是我们日常生活中最常用的进制&#xff0c;使用0-9这10个数字来表示。每一位的…

小研报 - 神奇的 SD 图(InsCode Stable Diffusion 美图活动一期)

一、 Stable Diffusion 模型 在线使用地址&#xff1a;https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置 Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 2391134711, Size: 512x512, Model hash: 74c61c3a52, Model: GuoFeng3, Version: v1.2…

【应用笔记】CW32 电容式触摸按键设计指南

前言 CW32 电容式触摸按键设计指南向客户提供一种利用 CW32 内部资源结合软件编程实现电容式触摸按键有效 触摸检测的方法。本指南的内容重点在于工作原理、软件检测过程以及调试指引。 利用芯源半导体的 CW32 系列小规模 MCU 的 IO、比较器、定时器、高速高精度内置 RC 时钟…

C++ 实现跳表

目录 1.什么是跳表-skiplist 2.skiplist的效率如何保证&#xff1f; 3.skiplist的实现 4.skiplist跟平衡搜索树和哈希表的对比 1.什么是跳表-skiplist skiplist 本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样…

计算机毕业论文内容参考|基于C的空中战机游戏设计与实现

文章目录 导文文章重点摘要前言绪论1课题背景2国内外现状与趋势3课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于C的空中战机游戏设计与实现 文章重点 摘要 本文将介绍基于C编程语言的空中战机…

【电影推荐系统】数据加载

目录 数据集 解释 movie.csv ratings.csv tag.csv 数据预处理 mongodb 将数据按照csv文件里的分割符进行分割&#xff0c;转换为DF Moive Rating Tag es 将mongo集合tag 根据mid tag > mid tags(tag1|tag2|tag3...) moive 添加一列 tags 导入后数据库信息 mong…

python爬虫_正则表达式获取天气预报并用echarts折线图显示

文章目录 ⭐前言⭐python re库&#x1f496; re.match函数&#x1f496; re.search函数&#x1f496; re.compile 函数 ⭐正则获取天气预报&#x1f496; 正则实现页面内容提取&#x1f496; echarts的天气折现图 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分…

SpringBoot使用EasyExcel批量导出500万数据

SpringBoot使用EasyExcel批量导出500万数据 说明excel版本比较EasyExcel介绍项目目录mysql对应表建表语句pom.xmlapplication.yml配置类启动类代码OrderInfo 实体类OrderInfoExcel excel模版标题类(EasyExcel需要使用这个)TestController控制层接口层TestServiceTestServiceImp…

L298N模块驱动2项4线步进电机的多种方法及其优缺点

摘要&#xff1a;本文将详细介绍L298N模块驱动2项4线步进电机的多种方法&#xff0c;并分析各种方法的优缺点。在实例程序中&#xff0c;将展示不同方法的代码示例&#xff0c;帮助读者理解并实际应用。 引言&#xff1a; 步进电机作为一种常用的电机类型&#xff0c;在许多嵌入…

估值 2 个月从 11 亿美元降到 3 亿美元,投资人清仓跑路,国产大模型创业遇冷...

图片来源&#xff1a;由无界 AI生成 创业未半&#xff0c;而中道崩殂。 6 月 29 日&#xff0c;美团发布公告以 20.65 亿元全资收购光年之外全部权益&#xff0c;距离光年之外正式营业刚过去 84 天。 这是目前中国大模型创业领域最大的收购案&#xff0c;光年之外也在 4 个月时…

HTML5 游戏开发实战 | 黑白棋

黑白棋&#xff0c;又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋、翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子&#xff0c;最后以棋盘上谁的棋子多来判断胜负。黑白棋的棋盘是一个有88方格的棋盘。开始时在棋盘正中有两白两黑四个棋子交叉放置&#xff0…

观察级水下机器人第一次使用总结2023年6月

最近有个科研项目需要用到ROV&#xff0c;其合同三年之前就签订了&#xff0c;由于疫情的影响&#xff0c;一直没有执行。刚好我们的ROV也验收了&#xff0c;正好派上用场。因为属于ROV使用的菜鸟级&#xff0c;我们邀请厂家无锡智海张工和陈工&#xff0c;中海辉固ROV操作经验…

纵向越权-业务安全测试实操(32)

纵向越权 某办公系统普通用户权限越权提升为系统权限 服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在 Cookie中, 并发送至客户端存储。攻击者通过尝试修改Cookie中的身份标识为管理员,欺骗服务器分 配管理员权限,达到垂直越权的目的,如图所示。 某办公系…