Maven

Maven

命令方式构建项目

mvn compile:编译项目,生成target文件(不编译测试代码)
mvn package:打包项目,生成jar或war文件(不指定默认jar包)
mvn clean:清理编译或打包后的项目结构
mvn install:打包后上传到maven本地仓库
mvn deploy:打包后上传到私服仓库
mvn site:生成站点
mvn test:执行测试源码

这些命令都是利用maven插件进行操作的,因此如果哪个命令出问题,可以更改插件解决
例如,war包打包插件和jdk版本不匹配,在pom.xml中添加如下代码:

<build><plugins><plugin><groupId>org. apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin></plugins>
</build>

下载依赖失败怎么办

原因

  1. 网络问题
  2. 本地Maven仓库或缓存被污染或损坏,导致mavne无法正确使用现有的依赖项
  3. 版本不存在

解决方法

  1. 进入本地仓库删除对应文件夹,重新进行下载尝试
  2. 去mvnrepository查询

编译周期

每个命令都有一个周期,执行顺序为
compile——>test——>package——>install——>deploy
执行某个动作前会先执行他之前的动作
例如执行package,会先执行compile和test

依赖范围

一般来说,使用mvnrepository的scope就行,不需要修改
通过设置坐标的依赖范围(scope),可以设置对应jar包的作用范围:编译环境(写代码)、测试环境(test)、运行环境(jar/war包)
compile:缺省值,在上述三种classpath均会生效
test:只在测试classpath生效,编译用不了,jar/war的lib下也没有依赖
provided:只对编译和测试classpath有效
由于jar/war放在服务器上,比如tomcat,它本身提供相关包,部署到服务器上时,使用的是tomcat的lib包,所以不需要再运行环境使用该依赖。只是在编码(给出代码提示)和测试(提供测试环境)时需要使用这个依赖,最终运行版本由服务器决定
典型pom包为servlet-api,给出的scope为provided
runtime:只对测试、运行classpath有效。
如JDBC驱动实现依赖(SPI实现),编译时使用的JDK提供的JDBC接口,不需要JDBC驱动实现,但测试和运行时需要提供,这样才能找到JDBC驱动实现,否则会报错
system:和provided作用范围相同,不推荐使用
import:导入依赖范围,只能与dependencyManagement元素配合使用,可以将目标pom.xml中dependencyManagement的配置导入到当前pom.xml的dependencyManagement中

Build构建配置

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
默认情况下,构建不需要额外配置,都有对应的缺省配置。可以定制一些配置,以达到修改默认构建的行为和产物
比如

  1. 指定构建打包文件的名称
<build><finalName>xxx-版本号.jar/war</finalName>
</build>
  1. 打包时指定包含文件格式和排除文件
    场景
    java下只允许存在java类
    resources下只允许存在资源类
    但是mybatis的mapper一般放在java下
    解决方法
<build><resources><resource><!---设置资源所在目录--><directory>src/main/java</directory><includes><!--设置包含的资源类型--><include>**/*.xml</include></includes></resource></resources>
</build>

作用
将java下任意的xml文件作为资源文件打包

  1. 打包插件版本过低,配置更高版本插件

插件本质是本地仓库的jar包

<build><plugins><plugin><groupId>org. apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!--configuration是给tomcat进行配置--><configuration><port>8090</port><path>/</path><uriEncoding>UTF-8</uriEncoding><server>tomcat7</server></configuration></plugin></plugins>
</build>

在这里插入图片描述
添加后会出现tomcat相关plugin
这样就无需再进行复杂操作,直接通过插件运行java项目即可

依赖传递

A——>B,B——>C,A能否依赖C取决于B依赖C时使用的依赖范围及配置
B——>C
compile:可以传递
test、provided:不能传递
设置<option>为true:不能传递(终止传递)

依赖冲突

!](https://i-blog.csdnimg.cn/direct/aac082529ed24efebe472b8f52e336fb.png)

自动选择原则

  • 短路优先原则
    • 在依赖同一个不同版本的jar包时优先选择依赖链短的
    • A——>B——>C——>D(1.x)
    • A——>D(2.x)
    • 此时依赖的是2.x,短
  • 长度相同时,优先声明原则(第二原则)
    • 相同时依赖先依赖的
    • A——>D(1.0)
    • A——>D(2.0)
    • 因为在pom中先定义的1.0,所以依赖的是1.0

手动选择

不想使用maven的自动选择原则,可以手动选择需要的包

实例前提:pom中依赖了maven_B和maven_C,而且B和C都依赖了druid
想使用maven_C中的druid包

<dependencies><dependency><groupId>com.atguigu.maven</groupId><artifactId>maven_B</artifactId><version>1.0</version><exclusions><exclusion><groupId>com.alibaba</groupId><artifactId>druid</artifactId></exclusion></exclusions></dependency>
</dependencies>

其实使用<option>阻止B的依赖传递也可以,但是这是B是自己的项目时可以干的,一般依赖的包时不允许修改的

Maven工程继承和聚合关系

继承

在Maven项目中,让一个项目从另一个项目中继承配置信息的机制,可以在多个项目中共享同一配置信息,简化项目的管理和维护工作

作用

在父工程中统一管理项目的依赖信息
背景

  • 对大型项目进行模块拆分
  • 一个project下创建了很多个module
  • 每一个module都需要自己的依赖信息

语法

父工程(删除src和test,只保留pom.xml)

		<groupId>com.atguigu.maven</groupId><artifactId>maven_parent</artifactId><version>1.0</version><packaging>pom</packaging>

子工程

		<parent><artifactId>maven_parent</artifactId><!--groupId和父工程保持一致--><groupId>com.atguigu.maven</groupId><!--version和父工程保持一致--><version>1.0</version></parent><!--artifactId(模块名)自己的名字--><artifactId>maven_son</artifactId>

如果在父工程中直接使用dependencies,在父工程中的依赖会传递给子工程
而使用dependencyManagement,子工程需要手动选择需要继承的依赖,但会和普通依赖不太一样(不需要版本号)

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId>
</dependency>

聚合

将多个项目组织到一个父级项目中,以便一起构建和管理的机制,可以更好的管理一组相关的子项目,同时简化构建和部署的过程。
简单来说,就是父工程执行什么操作,子工程就跟着进行什么操作
在父工程中,包含子工程的路径(就是文件的相对路径)
聚合无需手动操作,IDEA会自动创建

<modules><module>maven_son</module>
</modules>

父工程在执行操作时,会带着将modules下的子工程一并执行

Maven私服(Nexus)

一般是公司内部使用,所以一般设置在局域网中,不绝对,但公司一般为了安全性都会设置在公司网内

本地——>私服——>中央

在这里插入图片描述maven-central:设置中央仓库连接
maven-public:存储中央仓库下载的包
maven-releases:私服包正式版
maven-snapshots:私服包快照版

将jar包部署到Nexus

<distributionManagement><snapshotRepository><!--setting.xml中的nexus server的id--><id>nexus-mine</id><!--随便取--><name>Nexus Snapshot</name><!--私服地址 注意是正式版还是快照版--><url>http://localhost:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>

下载私服的jar包

<repositories><repository><id>nexus-mine</id><name>nexus-mine</name><url>http://localhost:8081/repository/maven-snapshots/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></repository>
</repositories>

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

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

相关文章

leetcode 173.二叉搜索树迭代器

1.题目要求: 2.题目代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nu…

vue插件清除 所有console.log()

一、作用 1、提升性能console.log() 语句会消耗一定的性能&#xff0c;尤其是在频繁调用的情况下。在生产环境中移除这些语句可以提高应用的运行效率。 2、减少信息泄露console.log() 可以输出敏感信息&#xff08;如用户数据、API 响应等&#xff09;。在生产环境中&#xf…

Day102漏洞发现-漏扫项目篇Poc开发Yaml语法插件一键生成匹配结果交互提取

知识点&#xff1a; 1、Nuclei-Poc开发-环境配置&编写流程 2、Nuclei-Poc开发-Yaml语法&匹配提取 3、Nuclei-Poc开发-BurpSuite一键生成插件 Nuclei-Poc开发-环境配置&编写流程 1、开发环境&#xff1a;VscodeYaml插件 Visual Studio Code - Code Editing. R…

【IEEE出版】第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024,12月06-08)

第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议&#xff08;ITCA 2024) 2024 6th International Conference on Information Technology and Computer Application 会议官网&#xff1a;itca2024.iaecst.org 会议时间&#xff1a;2024年12月06-08日 截稿时…

聊一聊Spring中的@Scheduled注解

一、样例 1.1 demo代码 package com.lazy.snail;import org.springframework.stereotype.Component; import org.springframework.scheduling.annotation.Scheduled;/*** ClassName MyTask* Description TODO* Author lazysnail* Date 2024/10/29 17:56* Version 1.0*/ Compo…

如何高效集成每刻与金蝶云星空的报销单数据

每刻报销单集成到金蝶云星空的技术实现 在企业日常运营中&#xff0c;费用报销和付款申请是两个至关重要的环节。为了提升数据处理效率和准确性&#xff0c;我们采用了轻易云数据集成平台&#xff0c;将每刻系统中的报销单数据无缝对接到金蝶云星空的付款申请单中。本案例将详…

使用量化分析微信小程序工具“梦想兔企业智能风险分析助手”日常操作日记-3-预制菜-惠发食品(603536)

使用量化分析微信小程序工具“梦想兔企业智能风险分析助手”日常操作日记-预制菜。 直接看截图&#xff1a; 1.第一步&#xff1a; 查看产业链&#xff0c;选择查看“中国预制菜行业”&#xff0c;政策支持&#xff0c;热点 查看预制菜产业链 这里我选择了中游-生产商 到行业…

Elasticsearch:如何把 OpenAI 的代码修改为 Azure OpenAI

我们知道除了 OpenAI 提供数据嵌入及 Chat Completion 功能之外&#xff0c;Azure 也提供 OpenAI 类似的服务。这两个都是经常需要的平台。在我们的 Elasticsearh labs 里有很多代码是使用 OpenAI 来完成的&#xff0c;那么我们该如何把它们修改为使用 Azure 所提供的 OpenAI 呢…

软件体系结构

第一章 构件 具有某种功能的 可复用的软件结构单元,为组装服务,可部署,具有规范的接口规约和显式的语境依赖 构件模型 构件模型是对构件本质特征的抽象描述&#xff0c;可以把它想象成一个类的组合&#xff0c;它封装了多个类&#xff0c;并具有一个或多个服务而提供了简单…

基于AI深度学习的中医针灸实训室腹针穴位智能辅助定位系统开发

在中医针灸的传统治疗中&#xff0c;穴位取穴的精确度对于治疗效果至关重要。然而&#xff0c;传统的定位方法&#xff0c;如体表标志法、骨度折量法和指寸法&#xff0c;由于观察角度、个体差异&#xff08;如人体姿态和皮肤纹理&#xff09;以及环境因素的干扰&#xff0c;往…

华硕推出Intel Xeon 6/ Gaudi 3服务器 加速企业AI布局!

(10月23日&#xff0c;台北讯) 华硕服务器新品接力强势助攻&#xff0c;今再推出多款搭载Intel Xeon 6处理器的服务器&#xff0c;包括&#xff1a;多节点的ASUS RS920Q-E12&#xff0c;其兼容适用HPC运算的Intel Xeon 6900系列处理器&#xff1b;以及ASUS RS720Q-E12、RS720-E…

[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引

目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…

人工智能基础-opencv-图像处理篇

一.图像预处理 图像翻转 cv2.flip 是 OpenCV 库中的一个函数&#xff0c;用于翻转图像。翻转可以是水平翻转、垂直翻转或同时水平和垂直翻转。这个函数接受两个参数&#xff1a;要翻转的图像和一个指定翻转类型的标志。 img cv2.imread(../images/car2.png) #翻转 0&#xf…

【机器学习】嘿马机器学习(科学计算库)第4篇:Matplotlib,学习目标【附代码文档】

本教程的知识点为&#xff1a;机器学习&#xff08;常用科学计算库的使用&#xff09;基础定位 机器学习概述 机器学习概述 1.5 机器学习算法分类 1 监督学习 机器学习概述 1.7 Azure机器学习模型搭建实验 Azure平台简介 Matplotlib 3.2 基础绘图功能 — 以折线图为例 1 完善原…

平衡二叉树(递归)

给定一个二叉树&#xff0c;判断它是否是 平衡二叉树.平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4…

Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)

案例背景 虽然在效果上&#xff0c;传统的逻辑回归模型通常不如现代的机器学习模型&#xff0c;但在风控领域&#xff0c;解释性至关重要。逻辑回归的解释性是这些“黑箱”模型所无法比拟的&#xff0c;因此&#xff0c;研究传统的评分卡模型依然是有意义的。 传统的评分卡模型…

Weblogic漏洞复现(Vulhub)

0x00前言 1.docker 安装 Docker的安装_docker安装-CSDN博客 2.docker的镜像 1.可以在阿里云上的容器服务找到镜像源。 2.也可以使用下面的镜像源&#xff0c;时快时慢不稳定。 {"registry-mirrors":["https://docker.registry.cyou","https://d…

【Python环境配置-Step1】PyCharm 2024最新官网下载、安装教程

背景&#xff1a; 1、 步骤&#xff1a; 1、PyCharm 官网下载地址&#xff1a;https://www.jetbrains.com/pycharm/ 2、查看下图红框选中&#xff0c;下载社区版&#xff08;免费&#xff09; 3、&#xff08;查看下图红框选中&#xff09;这里选其他版本 4、这里我下载的…

用vite创建项目

一. vite vue2 1. 全局安装 create-vite npm install -g create-vite 2. 创建项目 进入你想要创建项目的文件夹下 打开 CMD 用 JavaScript create-vite my-vue2-project --template vue 若用 TypeScript 则 create-vite my-vue2-project --template vue-ts 这里的 …

FBX福币交易所A股三大指数小幅低开 稀土永磁板块回调

查查配分析11月5日电 周二,A股三大指数小幅低开。沪指开盘跌0.10%报3306.81点,深证成指开盘跌0.09%报10653.20点,创业板指开盘跌0.05%报2184.90点。 FBX福币凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 来源:同花顺iFinD 盘面…