【MAVEN学习 | 第2篇】Maven工程创建及核心功能

news2025/1/19 11:07:03

在这里插入图片描述

文章目录

    • 一. 基于IDEA的Maven工程创建
      • 1.1 Maven工程GAVP属性
        • (1)GroupID 格式
        • (2)ArtifactID 格式
        • (3)Version版本号格式
        • (4)Packaging定义规则
      • 1.2 IDEA构建Maven JavaSE工程
      • 1.3 IDEA构建Maven JavaEE工程
        • (1)手动创建
        • (2)插件方式创建(推荐)
    • 二. Maven 核心功能:功能依赖和构建管理
      • 2.1 依赖管理和配置
      • 2.2 依赖冲突
      • 2.3 依赖导入失败解决方法
      • 2.4 构建管理和插件配置
        • (1)构建
        • (2)构建生命周期

一. 基于IDEA的Maven工程创建

1.1 Maven工程GAVP属性

Maven工程有一组gavp属性,gav需要在创建项目的时指定,p有默认值,后期可通过配置文件修改。

G:GroupId
A:ArtifactId
V:Version
P:Packaging
前三个是必要的,而 Packaging 属性为可选项。

(1)GroupID 格式

com.{公司/BU }.业务线.[子业务线],最多 4 级

	例:com.taobao.tddl 或 com.alibaba.sourcing.multilang 
(2)ArtifactID 格式

产品线名-模块名。语义不重复不遗漏,先到仓库中心去查证一下。

	例:tc-client / uic-api / tair-tool / bookstore
(3)Version版本号格式

主版本号.次版本号.修订号 1.0.0

	主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能。

    次版本号:当做了向下兼容的功能性新增(新增类、接口等)。

    修订号:修复 bug,没有修改方法签名的功能加强,保持 API 兼容性。

    例: 初始→1.0.0  修改bug → 1.0.1  功能调整 → 1.1.1等
(4)Packaging定义规则

指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型!

 packaging 属性为 jar(默认值),代表普通的Java工程,打包以后是.jar结尾的文件。

  packaging 属性为 war,代表Java的web工程,打包以后.war结尾的文件。

  packaging 属性为 pom,代表不会打包,用来做继承的父工程。

1.2 IDEA构建Maven JavaSE工程

在这里插入图片描述
注:此处version是一个默认值1.0-SNAPSHOT,自己后期可以在项目中修改!

1.3 IDEA构建Maven JavaEE工程

(1)手动创建
  • 根据上面的步骤创建一个 Maven JavaSE 工程

  • 手动添加Web项目结构文件(结构和命名固定
    在这里插入图片描述

  • 修改pom.xml文件打包方式

    <!-- 在pom.xml文件中修改 <packaging> -->
    <packaging>war</packaging>
    
  • 刷新和校验
    在这里插入图片描述
    项目的webapp文件夹出现小蓝点,代表成功!!

(2)插件方式创建(推荐)
  • 安装插件JBLJavaToWeb
    在这里插入图片描述
    在这里插入图片描述若没有 install 则点击安装

  • 创建一个 Maven JavaSE 工程

  • 右键、使用插件补全web项目
    在这里插入图片描述

二. Maven 核心功能:功能依赖和构建管理

2.1 依赖管理和配置

定义 POM 文件,Maven 能够自动解析项目的依赖关系,并通过 Maven 仓库自动下载和管理依赖,从而避免了手动下载可能引发的版本冲突问题。

  • maven项目信息属性配置和读取:GAVP属性
  • 依赖管理和添加:
    <dependencies>
    <!-- 引入具体的依赖包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <!--
            生效范围
            - compile :main目录 test目录  
            - provided:main目录 test目录 
            - runtime: 打包运行          
            - test:    test目录          
         -->
        <scope>runtime</scope>
    </dependency>
    </dependencies>
    
  • 依赖版本提取和维护:
    <!--声明版本-->
    <properties>
      <!--内部制定版本号-->
      <junit.version>4.11</junit.version>
    </properties>
    
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <!--引用properties声明版本 -->
        <version>${junit.version}</version>
      </dependency>
    </dependencies>
    

2.2 依赖冲突

当直接引用或者间接引用出现了相同的jar包! 这时呢,一个项目就会出现相同的重复jar包,这就算作冲突!

在这里插入图片描述

  • 解决依赖冲突方式:
    • 短路优先原则(第一原则)

        A—>B—>C—>D—>E—>X(version 0.0.1)
      
        A—>F—>X(version 0.0.2)
      
        则A依赖于X(version 0.0.2)。
      
    • 依赖路径长度相同情况下,则“先声明优先”(第二原则)

        A—>E—>X(version 0.0.1)
      
        A—>F—>X(version 0.0.2)
      
        在<depencies></depencies>中,先声明的,路径相同,会优先选择!
      

2.3 依赖导入失败解决方法

(1)检查网络连接和 Maven 仓库服务器状态。
(2)确保依赖项的版本号与项目对应的版本号匹配,并检查 POM 文件中的依赖项是否正确。
(3)清除本地 Maven 仓库缓存(lastUpdated 文件),因为只要存在lastupdated缓存文件,刷新也不会重新下载。 ——》 直接在本地仓库中搜索以 .lastUpdated 结尾的文件,删除即可!

2.4 构建管理和插件配置

(1)构建
  • 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程
(2)构建生命周期
打包: mvn clean package
重新编译: mvn clean compile
本地部署: mvn clean install 

最终进行构建的是插件,插件配置

<build>
   <!-- jdk17 和 war包版本插件不匹配 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>

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

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

相关文章

大模型培训 AUTOWEBGLM:自动网页导航智能体

大语言模型&#xff08;LLMs&#xff09;在智能代理任务中发挥着重要作用&#xff0c;尤其是在网络导航方面。然而&#xff0c;现有的代理在真实世界的网页上表现不佳&#xff0c;主要原因网络导航代理面临着三大挑战&#xff1a;网页上行动的多样性、HTML文本的处理限制以及开…

数据结构6---树

一、定义 树(Tree)是n(n>0)个结点的有限集。当n0时成为空树,在任意一棵非空树中: 1、有且仅有一个特定的称为根(Root)的结点; 2、当n>1时,其余结点可分为m(m>日)个互不相交的有限集T1、T2、...、 Tm&#xff0c;其中每一个集合本身又是一棵树&#xff0c;并且称为根的…

模块化沙箱

模块化沙箱是什么&#xff1f;模块化沙箱有什么作用&#xff1f; 模块化沙箱是一种高灵活性和高扩展性的数据安全产品&#xff0c;通过选择不同的沙箱模块&#xff0c;满足不同的安全需求。 同时&#xff0c;模块化沙箱也是零信任的重要一环&#xff0c;根据企事业单位各类国…

11、鸿蒙学习—UDID获取方法

一、手机的UDID获取方法如下&#xff1a; 1、打开“设置 > 关于手机”&#xff0c;多次点击版本号&#xff0c;打开开发者模式。 2、打开“设置 > 系统和更新”&#xff0c;在最下方找到“开发人员选项”&#xff0c;打开“USB调试”开关。 3、使用PC连接手机后&#…

网红和主播们是用的什么美颜工具?深入剖析美颜sdk与美颜Api

在现代社交媒体和直播平台的兴起中&#xff0c;网红和主播们依靠精美的外表吸引大量观众&#xff0c;获得高人气和收益已成为常态。这其中&#xff0c;美颜工具起到了至关重要的作用。这篇文章将深入剖析网红和主播们常用的美颜工具&#xff0c;特别是美颜SDK和美颜API的原理和…

想要成为程序员,首先你需要掌握这这三种编程语言!

作为程序员&#xff0c;掌握多种编程语言是非常有价值的&#xff0c;因为不同的编程语言有不同的优势和适用场景。然而&#xff0c;要指定“必须掌握”的三种编程语言是相当主观的&#xff0c;因为这取决于个人的职业目标、所在行业的需求以及技术趋势。不过&#xff0c;以下三…

NodeJs实现对本地 mysql 数据库的增删改查

写在前面 今天我们接着写nodejs对数据库的操作&#xff0c;今天实现简单的增删改查&#xff0c;读之前请先移步到这里NodeJs 连接本地 mySql 数据库获取数据,避免后续一些代码出险阅读断层。 安装 nodemon npm install nodemon因为 nodejs 的服务是本地启动&#xff0c;避免后…

数据治理工程师CDGA备考心得、时间安排、题库资源

1.写在前面 之前做一些数据质量控制、元数据、主数据相关工作&#xff0c;一直忙于工作&#xff0c;没有去往考证的方面想&#xff0c;去年年底心血来潮就决定考一考&#xff0c;证多不压身嘛&#xff08;也有部分学生向我咨询&#xff09;&#xff0c;资源在文章结尾&#xff…

图说SpringCloudStream消息驱动

SpringCloud Stream消息驱动实现原理 通过定义Binder绑定器作为中间层&#xff0c;实现了应用程序和消息中间件之间实现细节的隔离。通过向应用程序暴露统一的Channel通道&#xff0c;可以让应用程序不再需要考虑各种不同的消息中间件实现的兼容性问题。当需要升级消息中间件&a…

【软件测试入门】测试用例经典设计方法 — 因果图法

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、因果图设计测试用例的步骤 1、分析需求 阅读需求文档&#xff0c;如果User Case很复杂&am…

光大证券-放量恰是入市时:成交量择时初探

核心算法 1. 在熊市中&#xff0c;各成交量时序排名出现的频次基本随排名变小而单调增大&#xff1b;在牛市中&#xff0c;各成交量时序排名出现的频次基本随排名变小而单调减少&#xff1b;而在震荡市中&#xff0c;各成交量时序排名出现的频次两头大&#xff0c;中间小&…

C语言----C语言内存函数

1.memcpy--内存拷贝--使用和模拟实现 //memcpy基本格式&#xff1a; // 目标空间地址 原空间地址 被拷贝的字节个数 //void *memcpy(void * destination, const void * source,size_t num); //因为内存拷贝拷贝的数据有&#xff1a;整型数据、结构…

三丰云免费虚拟主机和免费云服务器评测

今天我要向大家推荐一款非常优秀的云服务提供商&#xff0c;那就是三丰云。三丰云提供了免费虚拟主机和免费云服务器&#xff0c;为用户提供了便捷高效的云计算服务。首先&#xff0c;让我们来看看三丰云的免费虚拟主机服务。三丰云的免费虚拟主机提供了稳定可靠的服务器资源&a…

【ClickHouse】副本、分片集群 (六)

副本 副本的目的主要是保障数据的高可用性&#xff0c;即使一台ClickHouse节点宕机&#xff0c;那么也可以从其他服务器获得相同的数据。 https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ 副本写入流程 写入流程如图-18所示: 图-18 写…

信息系统项目管理师 | 信息系统安全技术

关注WX&#xff1a;CodingTechWork 信息安全概念 安全属性 秘密性&#xff1a;信息不被未授权者知晓。完整性&#xff1a;信息是正确的、真实的、未被篡改的、完整无缺。可用性&#xff1a;信息可以随时正常使用。 安全分层 设备安全 设备的稳定性&#xff1a;在一定时间…

Ascend C Add算子样例代码详解

核函数定义 核函数&#xff08;Kernel Function&#xff09;是Ascend C算子设备侧实现的入口。在核函数中&#xff0c;需要为在一个核上执行的代码规定要进行的数据访问和计算操作&#xff0c;当核函数被调用时&#xff0c;多个核都执行相同的核函数代码&#xff0c;具有相同的…

千年古城的味蕾传奇-平凉锅盔

在甘肃平凉这片古老而神秘的土地上&#xff0c;有一种美食历经岁月的洗礼&#xff0c;依然散发着独特的魅力&#xff0c;那便是平凉锅盔。平凉锅盔&#xff0c;那可是甘肃平凉的一张美食名片。它外表金黄&#xff0c;厚实饱满&#xff0c;就像一轮散发着诱人香气的金黄月亮。甘…

基于语音识别的智能电子病历(五)电子病历编辑器

前言 首先我们要明确一个概念&#xff1a;很多电子病历的编辑器&#xff0c;在输入文字的地方&#xff0c;有个麦克风按钮&#xff0c;点击一下&#xff0c;可以进行录音&#xff0c;然后识别的文字会自动输入到电子病历中&#xff0c;这种方式其实不能称为“基于语音识别的智…

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时&#xff0c;不加控制&#xff0c;会带来一些问题。 比如下面这种场景&#xff1a; 有一个tickets表&#xff0c;这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候&#xff0c;将票出售了&#x…

Aidlux 1.4 部署Nextcloud 2024.6实录 没成功

Aidux阉割版Debain10&#xff0c;坑很多&#xff0c;比如找不到实际的系统日志&#xff0c;有知道的大神吗&#xff1f; 1 Apache2安装 # 测试Apache2 sudo apt update && sudo apt upgrade sudo apt install apache2 -y80端口疑似被禁止只能换端口 rootlocalhost:/…