Maven入门到实践:从安装到项目构建与IDEA集成

目录

1. Maven的概念

1.1 什么是Maven

1.2 什么是依赖管理

1.3 什么是项目构建

1.4 Maven的应用场景

1.5 为什么使用Maven

1.6 Maven模型

2.初识Maven

2.1 Maven安装

2.1.1 安装准备

2.1.2 Maven安装目录分析

2.1.3 Maven的环境变量

2.2 Maven的第一个项目

2.2.1 按照约定创建Maven项目目录

2.2.2 在项目Hello根目录建立pom.xml

2.2.3 创建Hello.java文件

2.2.4 创建HelloTest.java文件

2.2.5 进行maven的项目操作

2.3 Maven的第二个项目

2.3.1 按照约定创建Maven项目目录

2.3.2 在项目HelloFriend根目录建立pom.xml

2.3.3 创建HelloFriend.java文件

2.3.4 创建HelloFriendTest.java文件

2.3.5 测试打包HelloFriend项目

2.4 Maven仓库配置

2.4.1 Maven仓库概念

2.4.2  Maven本地仓库配置

2.5 IDEA整合Maven项目

2.5.1  IDEA的Maven全局配置

2.5.2  IDEA创建Maven的Java项目

2.5.3 IDEA创建Maven的Java web项目

2.6 Maven项目视图


1. Maven的概念

1.1 什么是Maven

Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

  • 什么是理想的项目构建?

高度自动化,跨平台,可重用的组件,标准化的流程

  • 什么是依赖?为什么要进行依赖管理?

自动下载,统一依赖管理

A1.0   依托于  B2.0  依托于    C3.0

  • 有哪些项目信息?

项目名称描述等,开发人员信息,开发者信息等

1.2 什么是依赖管理

对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。

对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。

1.3 什么是项目构建

项目构建:是一个从编写源代码到编译、测试、运行、打包、部署的过程。

传统项目和maven项目构建的两种方式:

  • 传统项目:打开Idea编写源代码和配置文件,对源代码进行编译,可以使用Junit进行单元测试,把项目打成war包,部署到Tomcat服务器中运行。
  • maven项目:maven将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。

       清理 --> 编译 --> 测试 --> 报告 --> 打包 --> 部署

好处:可以通过命令完成项目构建。(测试:使用mvn tomcat:run的命令来发布运行项目)

maven对每个构建阶段进行规范,有利于大型团队协作开发。

1.4 Maven的应用场景

maven的应用场景,开发人员只要按着maven标准的目录结构进行开发即可,然后提交代码。在测试服务器上拉取Java源码,然后可以使用maven的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。

1.5 为什么使用Maven

  • IDE?Eclipse?IDEA?

手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成

每个人的IDE配置都不同,很容易就出错出现本地代码换个地方编译

  • Ant?

没有一个约定的目录结构

必须明确让ant做什么,什么时候做,然后编译,打包

没有生命周期,必须定义目标及其实现的任务序列

没有集成依赖管理

  • Maven?

拥有约定,知道你的代码在哪里,放到哪里去

拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情

拥有依赖管理,仓库管理

1.6 Maven模型

Maven模型主要由三部分组成:构建生命周期、POM、dependence。

构建生命周期:就是用来完成标准化构建流程 。当我们需要编译,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用等。

在执行这些构建操作的时候,不同的阶段又会有不同的文件产生,比如编译之后就会有编译之后的字节码文件产生,打包之后,就会有打包之后的jar文件产生。

POM:将我们自己的项目抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:

dependence:使用坐标来描述当前项目依赖哪些第三方jar包 

2.初识Maven

2.1 Maven安装

2.1.1 安装准备

① 安装jdk1.8或以上版本

② 下载Maven

     下载地址:https://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/

      版本:Maven3.6

③ 安装Maven

     解压到相应目录即可(无中文路径)

2.1.2 Maven安装目录分析

bin:含有mvn运行的脚本

boot:含有plexus-classworlds类加载器框架

conf:含有settings.xml配置文件

lib:含有Maven运行时所需要的java类库

LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

2.1.3 Maven的环境变量

① 设置MAVEN_HOME环境变量

    升级时只需要下载最新版本,解压缩重新设置MAVEN_HOME环境变量即可

② 配置用户范围的settings.xml

    %MAVEN_HOME%/conf/settings.xml 全局的

    ~/.m2/settings.xml 单个用户的

    设置MAVEN_HOME环境变量,把maven的解压后的路径添加为变量值

设置Path环境变量,把 %MAVEN_HOME%\bin 添加到Path的变量值末尾。

 验证配置是否完成

2.2 Maven的第一个项目

2.2.1 按照约定创建Maven项目目录

src/main/java —— 存放项目的.java文件 

src/main/resources —— 存放项目资源文件,如spring, mybatis配置文件 

src/test/java —— 存放所有测试.java文件,如JUnit测试类 

src/test/resources —— 测试资源文件 

target —— 项目输出位置 (自动生成)

pom.xml

以上文件夹都是我们手动创建的,目的是为了更好地了解java Maven项目的目录结构。但是为了更加直观的看到其目录,我们使用idea打开该项目。

 

2.2.2 在项目Hello根目录建立pom.xml

<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">      xml约束<modelVersion>4.0.0</modelVersion><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><name>Hello</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		</dependencies>
</project>

2.2.3 创建Hello.java文件

在src/main/java/cn/tx/maven目录下新建文件Hello.java

package cn.tx.maven;
public class Hello {public String sayHello(String name){return "Hello "+name+"!";}
}

2.2.4 创建HelloTest.java文件

在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java

package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String results = hello.sayHello("maven");assertEquals("Hello maven!",results);		}
}

2.2.5 进行maven的项目操作

  1. 打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化

mvn compile命令用于将项目的源代码编译成字节码(.class 文件),并将其放置到 target/classes 目录中。

     

      2. cmd 中继续录入mvn clean命令,然后再次查看根目录变化。

mvn clean命令用于清理项目的 target 目录,即删除之前构建时生成的所有文件。

   3. cmd 中录入 mvn clean compile命令, 查看根目录变化

   4. cmd 中录入 mvn clean test命令,查看根目录变化

此命令首先清理项目(删除 target 目录),然后运行项目中的单元测试。

      5. cmd 中录入 mvn clean package命令,查看根目录变化

该命令在执行时会先清空 target 目录,然后编译项目,并将编译好的代码打包成可发布的格式(通常是 .jar 或 .war 文件),放在 target 目录下。

 

     6. cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里

此命令首先执行 clean,然后执行 package,最后将生成的包安装到本地 Maven 仓库,以供其他项目使用。

2.3 Maven的第二个项目

2.3.1 按照约定创建Maven项目目录

HelloFriend

 --src

 -----main

 ----------java

 ----------resources

 -----test

 ---------java

 ---------resources

 --pom.xml

2.3.2 在项目HelloFriend根目录建立pom.xml

在项目HelloFriend根目录建立pom.xml

<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><groupId>cn.tx.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><name>HelloFriend</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		<dependency><groupId>cn.tx.maven</groupId>        //第一个项目的包名<artifactId>Hello</artifactId>        //第一个项目的文件名<version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>		</dependencies>
</project>

2.3.3 创建HelloFriend.java文件

在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java

package cn.tx.maven;
import cn.tx.maven.Hello;
public class HelloFriend {public String sayHelloToFriend(String name){Hello hello = new Hello();String str = hello.sayHello(name)+" I am "+this.getMyName();System.out.println(str);return str;}public String getMyName(){return "John";}
}

2.3.4 创建HelloFriendTest.java文件

在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java

package cn.tx.maven;
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import cn.tx.maven.Hello;public class HelloFriendTest {@Testpublic void tesHelloFriend(){HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("zhangsan");assertEquals("Hello zhangsan! I am John",results);		}
}

2.3.5 测试打包HelloFriend项目

在HelloFriend目录下执行命令mvn package

系统报错提示:Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT,表示无法找到HelloFriend所依赖的Hello 0.0.1-SNAPSHOT.jar

故此我们需要重新构建第一个项目Hello并安装到数据仓库,在命令行Hello根目录下执行mvn clean install

对Hello项目进行清理并安装后,对HelloFriend项目再次进行打包 

可以看到本次打包成功,说明HelloFriend项目已经可以加载Hello项目所打包的jar包。

2.4 Maven仓库配置

2.4.1 Maven仓库概念

  • 何为Maven仓库?

        用来统一存储所有Maven共享构建(jar包)的位置就是仓库

  • Maven仓库布局

        根据Maven坐标定义每个构建在仓库中唯一存储路径

        groupId/artifactId/version/artifactId-version.packaging 

  • 仓库的分类

        ① 本地仓库

        每个用户只有一个本地仓库,自己配置

        默认的:~/.m2/repository/ 可修改

        ② 远程仓库(五个)

        中央仓库:Maven默认的远程仓库   http://repo1.maven.org/maven2
        私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
        阿里、腾讯、华为等

2.4.2  Maven本地仓库配置

  1. 全局本地仓库(所有操作系统用户均影响)

%MAVEN_HOME%\conf\settings.xml文件,修改该文件会影响所有使用该Maven的用户的本地仓库,例如:

    2. 用户本地仓库(仅影响使用该配置文件的用户或程序)

该文件可以在任意目录,例如:

     3. 修改配置文件设置Maven本地仓库(以全局设置为例)

编辑D:\TOOLS\maven\apache-maven-3.5.4\conf\settings.xml文件,找到如下位置:

修改为:

保存退出即可

以上配置表示所有使用该Maven的程序或用户,如未单独配置,则默认加载以上目录的本地库文件;

2.5 IDEA整合Maven项目

2.5.1  IDEA的Maven全局配置

启动IDEA后找到Settings

 以上设置完成表示在本idea上,所有项目如未对Maven的配置进行单独配置,则默认均使用该Maven版本和本地库设置;

2.5.2  IDEA创建Maven的Java项目

2.5.3 IDEA创建Maven的Java web项目

见 idea项目搭建的四种方式: 一(以idea2017为例)-CSDN博客

2.6 Maven项目视图

Maven项目视图主要用于查看该maven项目的各项属性,同时也可以进行一些常见的maven的操作,比如打包,清理,测试等等;

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

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

相关文章

古埃及象形文字在线字典

我在个人网站“小孔的埃及学站点”上推出了在线的象形文字字典&#xff0c;总共收罗了将近700条的象形文字&#xff08;词&#xff09;。在线字典的使用方法很简单&#xff0c;在网站各大版块首页的右上方会有如下图所示的查询入口。 点击文本框&#xff0c;输入中文或英文关键…

公交IC卡收单管理系统 assets 信息泄露

0x01 产品描述&#xff1a; 公交IC卡系统是公交一卡通系统核心建设部分&#xff0c;是高时尚、高科技的管理系统&#xff0c;大大提升了公交行业的服务&#xff0c;能让公交企业信息化和电子化打下一个良好的硬件基础和软件基0x02 漏洞描述&#xff1a; 公交IC卡系统在/assets/…

FRIDA-JSAPI:Instruction使用

官方API文档介绍 Instruction.parse(target) 解析内存中 target 地址处的指令。 返回的对象具有的字段&#xff1a; address: 此指令的地址&#xff08;EIP&#xff09;&#xff0c;类型为 NativePointernext: 指向下一条指令的指针&#xff0c;您可以使用 parse() 解析它size…

详解如何使用WGCLOUD监测日志文件

WGCLOUD可以监控日志文件&#xff0c;包括.log、.txt、.out等类型的文件 WGCLOUD既可以监测文件夹下按天生成的日志文件&#xff0c;也可以监控指定的日志文件&#xff0c;非常灵活 我们只需要设置好日志中出现什么关键字符&#xff0c;那么WGCLOUD就可以自动进行这些监控工作…

【react 和 vue】 ---- 实现组件的递归渲染

1. 需求场景 今天遇到了一个需求&#xff0c;就是 HTML 的递归渲染。问题就是商品的可用时间&#xff0c;使用规则等数据是后端配置&#xff0c;然后配置规则则是可以无限递归的往下配置&#xff0c;可以存在很多级。后端实现后&#xff0c;数据返回前端&#xff0c;就需要前端…

一招教你解决Facebook广告账号问题

这段时间&#xff0c;我们写了很多文章来探讨Facebook的广告账户问题&#xff1a;《Facebook被封号该怎么办》《Facebook二不限、三不限账号是什么》《Facebook海外户&#xff08;三不限&#xff09;和账单户该如何选择》《如何区分真假Facebook三不限海外户》相信看过这些文章…

【传知代码】智能推荐与隐私保护的融合(论文复现)

本文将深入探讨这样一种系统的设计理念、关键技术以及其在实际应用中的潜力和优势。通过探索如何在保证个性化推荐效果的同时&#xff0c;有效保护用户隐私&#xff0c;我们将揭示出一种新兴的技术趋势&#xff0c;为未来智能化应用的发展开辟新的可能性。 目录 概述 项目设计…

基于SSM+小程序的就业管理系统(就业1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 学生实习与就业管理系统的设计与实现管理员、辅导员管理、企业管理、工作管理人、用户管理5个角色。 1、管理员实现了基础数据管理、辅导员管理、企业管理、工作管理人管理、公告信息管理…

js 填充数组

let arr Array.from({ length: 10 }, (_, index) > index)console.log(arr) 人工智能学习网站 https://chat.xutongbao.top

如何用示波器检测次级点火系统(一)

写在最前面&#xff1a; 单看标题可能会让你觉得这篇文章的主题是关于检测线圈&#xff0c;火花塞和火花塞插头电线。但我们指的是分析燃烧室内电子的行为。目标是看燃料混合物&#xff0c;阀座&#xff0c;压缩&#xff0c;积碳和其它影响这种特性的症状。最终目的是要学会分…

FIR数字滤波器在MATLAB中的实现

摘要 数字滤波器是由数字乘法器、加法器和延时单元组成的一种装置。数字滤波器的功能是对输入离散信号的数字代码进行运算处理&#xff0c;以达到改变信号频谱的目的。近年来数字滤波在通信、图像编码、语言编码、雷达等许多领域中有着十分广泛的应用。 本文首先介绍了数字滤波…

为什么诺贝尔物理学奖颁给了 AI 大神

瑞典皇家科学院刚宣布&#xff0c;科学家约翰霍普菲尔德&#xff08;John J. Hopfield) 和杰弗里辛顿 (Geoffrey E. Hinton) 荣膺 2024年诺贝尔物理学奖&#xff0c;以表彰他们通过人工神经网络 (ANN) 实现机器学习而作出的基础性发现和发明 (for foundational discoveries and…

程序员:代码世界的探险家与日常“救火队员”

在这个被数字与代码编织的时代&#xff0c;程序员&#xff0c;这一群看似平凡却又不凡的“数字工匠”&#xff0c;正用他们的智慧与汗水&#xff0c;构建着我们生活的每一个角落。值此1024程序员节之际&#xff0c;让我们以轻松幽默的方式&#xff0c;一同走进程序员的世界&…

8轴/4轴的EtherCAT轴模块EIO24088G-V2及EIO16084G的使用(一):TwinCAT总线配置与使用

上节课给大家介绍了 EIO24088-V2及EIO16084结合RTSys进行总线配置与使用&#xff0c;详情请点击→8轴/4轴的EtherCAT轴模块EIO24088-V2及EIO16084的使用&#xff08;一&#xff09;&#xff1a;RTSys总线配置与使用。 今天正运动给大家分享一下EIO24088G-V2及EIO16084G如何用T…

DNS安全概述

一、DNS的解析过程 1.递归解析 递归解析是一种由DNS客户端&#xff08;通常是用户的应用程序&#xff0c;如一个浏览器&#xff09;向本地DNS解析器发出解析请求&#xff0c;然后本地DNS解析器负责查询最终结果并将结果返回给客户端&#xff0c;而中间的所有查询请求都由本地D…

Unity之如何在物体空间中制作马赛克

文章目录 前言屏幕空间马赛克着色器对象空间中的马赛克着色器最后前言 GrabPass 允许您创建应用马赛克叠加的着色器。如果你想在屏幕空间中应用马赛克,你可以通过使用片段着色器对其进行离散化来实现,但我在尝试将其应用到对象空间时遇到了问题,所以这是一个记录。 ▼ 原图…

proteus中没有STM32F103C8(已解决)

想在proteus找一个和开发板相同的芯片型号STM32F103C8T6&#xff0c;亲测proteus的7.8、8.6、8.9版本都没有STM32F103C8&#xff0c;然后在proteus8.15中找到了&#xff0c;M4内核的芯片也有。 M3内核&#xff1a; M4内核&#xff1a;

新脉集团携手中宏大数据 共推县域乡村振兴与数据资产化

2024年10月23日&#xff0c;数字生态赋能平台新脉集团与中宏大数据产业有限责任公司正式宣布达成战略合作。新脉集团创始人兼CEO李晶、新脉集团联合创始人兼CSO梁钟、新脉集团首席城市战略顾问邓详达、新脉中医健康教育学院院长王庆辉以及中宏大数据产业有限责任公司总裁张春宝…

053_python基于深度学习的短视频内容理解与推荐系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

ZYNQ PS_GPIO中断

REVIEW zynq PS端 GPIO_zynq modem signal-CSDN博客 C基础与SDK调试方法_csdk-CSDN博客 AXI_GPIO_axigpio-CSDN博客 对于GPIO&#xff0c;前面只用了简单读写&#xff0c;今天搞一下中断 1. 今日摸鱼任务 了解中断原理&#xff0c;实现PS_GPIO中断。 MIIO: #define PS_KEY 47#…