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 {
    @Test
   	public 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 {
    	@Test
    	public 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的操作,比如打包,清理,测试等等;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习Pytorch-Tensor函数

深度学习Pytorch-Tensor函数 Tensor的三角函数Tensor中其他的数学函数Tensor中统计学相关的函数&#xff08;维度&#xff0c;对于二维数据&#xff1a;dim0 按列&#xff0c;dim1 按行&#xff0c;默认 dim1&#xff09;Tensor的torch.distributions(分布函数)Tensor中的随机抽…

图论day62|拓扑排序理论基础、117.软件构建(卡码网)、最短路径之dijkstra理论基、47.参加科学大会(卡码网 第六期模拟笔试)

图论day62|拓扑排序理论基础、117.软件构建&#xff08;卡码网&#xff09;、最短路径之dijkstra理论基、47.参加科学大会&#xff08;卡码网 第六期模拟笔试&#xff09; 拓扑排序理论基础117.软件构建&#xff08;卡码网&#xff09;最短路径之dijkstra理论基础47.参加科学大…

IDEA 安装热部署 JRebel -新版-亲测有效

由于采用直接从idea 下载的插件会出现版本不适配&#xff0c;激活不成功 下载地址&#xff1a;https://note.youdao.com/web/#/file/recent/note/WEB0e3010b4015162dc6a11d6c0ab11f750/ 导入刚才下载的插件 其中&#xff0c;Team URL可以使用在线GUID地址在线生成GUID 拿到GUID…

Node.js 模块化

1. 介绍 1.1 什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为 模块化其中拆分出的 每个文件就是一个模块 &#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他模块使用 1.2 什…

蓝桥杯注意事项

蓝桥杯注意事项 比赛注意事项 能暴力枚举就暴力枚举&#xff0c;能用简单的思路做就尽量用简单的思路做。认真审核题目的题意和输入输出的要求&#xff0c;避免因为误解题意而导致题目错误。对于提供多组测试样例或者需要对一个过程重复进行循环的代码&#xff0c;要时刻记住…

第四范式发布AI Data Foundry,加速大模型训练及应用

产品上新 Product Release 今日&#xff0c;第四范式发布AI Data Foundry&#xff0c;提供基于AI技术&#xff0c;融合人类专家反馈的高质量、丰富可扩展、多样化的数据集&#xff0c;大幅提升模型效果。同时&#xff0c;通过模型评估系统及工具&#xff0c;对模型效果进行有效…

w外链如何跳转微信小程序

要创建外链跳转微信小程序&#xff0c;主要有以下几种方法&#xff1a; 使用第三方工具生成跳转链接&#xff1a; 注册并登录第三方外链平台&#xff1a;例如 “W外链” 等工具。前往该平台的官方网站&#xff0c;使用手机号、邮箱等方式进行注册并登录账号。选择创建小程序外…

windows SVN 忘记账号密码

一、本地登录过且记录未清空 1、打开C:\Users\用户名\AppData\Roaming\Subversion\auth\svn.simple目录 2、下载SvnPwd.exe文件 链接地址&#xff1a;TortoiseSVN Password Decrypter 复制SvnPwd.exe到 C:\Users\用户名\AppData\Roaming\Subversion\auth\svn.simple目录下 3、运…

Web组态-仪器间的相互通信(WebSocket技术)

Web组态&#xff0c;通过Vue3TypeScriptWebSocket技术实现平台仪器间的相互通信&#xff0c;用于设计工业化虚拟仿真。 界面图如下&#xff08;之前文章有详细教学&#xff09; 如下是通信设备虚拟仿真的三个仪器&#xff0c;设计初衷是想三个仪器能够数据互通&#xff0c;实现…

【Thymeleaf】spring boot模板引擎thymeleaf用法详解

快速入门Thymeleaf 1️⃣ 什么是Thymeleaf&#xff1f;1️⃣ 模板入门2️⃣ 创建测试工程2️⃣ 配置文件2️⃣ 创建controller2️⃣ 写一个html页面2️⃣ 启动测试 1️⃣ Thymeleaf基础2️⃣ 实体类2️⃣ 增加接口2️⃣ $符号使用2️⃣ *符号的使用2️⃣ 符号的使用2️⃣ #符号…

一文掌握异步web框架FastAPI(五)-- 中间件(测试环境、访问速率限制、请求体解析、自定义认证、重试机制、请求频率统计、路径重写)

接上篇:一文掌握异步web框架FastAPI(四)-CSDN博客 目录 七、中间件 15、测试环境中间件 16、访问速率限制中间件,即限制每个IP特定时间内的请求数(基于内存,生产上要使用数据库) 1)限制单ip访问速率 2)增加限制单ip并发(跟上面的一样,也是限制每个IP特定时间内的请…

??? 命令行形式的简单功能的计算器的Shell脚本

文章目录 需求编码Way1Way2&#xff1a; 测试 需求 需求分析&#xff1a; 支持浮点型&#xff1a;使用let命令 编码 Way1 用下循环吧&#xff01; #!/bin/bash # Author: # Date: # Description:# functions defines: input_check_to_startup() {num1$1num2$2isNum_statu…

Node版本管理nvm

公司项目比较多&#xff0c;且有历史包袱&#xff0c;没时间升级&#xff0c;高版本的node无法在低版本项目中打包编译&#xff1b; 下载地址 gitHub地址 nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 nvm-setup.exe 常用指令 // 查看版本信息 nvm -v // 查看能安装…

《线下学习受局限,知识付费小程序开启新篇》

在知识大爆炸的时代&#xff0c;人们对知识的渴望从未如此强烈。然而&#xff0c;传统的线下学习方式却逐渐显露出诸多局限。 线下学习往往受到时间和空间的严格限制。为了参加一场培训课程或者讲座&#xff0c;你可能需要在特定的时间赶到特定的地点&#xff0c;这对于忙碌的…

大数据-188 Elasticsearch - ELK 家族 Logstash Output 插件

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的编解码

目录 前言 1.下载官方协议包 2.解压 3.自定义主题 4.重写解码方法 5.以下是我解析后接收到的数据 前言 最近这段时间&#xff0c;一直在用开源的Jetlinks物联网平台在学习&#xff0c;偶尔有一次机会接触到物联网设备对接&#xff0c;在协议对接的时候&#xff0c;遇到了…

400行程序写一个实时操作系统(十):用面向对象思想构建抢占式内核

前言 通过前几章的学习&#xff0c;我们学会了如何为RTOS设计一个合理的内存管理算法。现在&#xff0c;是时候学习设计RTOS内核了。 关于RTOS内核的文章也有很多&#xff0c;但都有一点先射箭再化靶子的意味。要么是代码连篇解释却寥寥无几&#xff0c;要么是要先怎么样再怎么…

【星闪开发连载】WS63E模块连接华为IoT云

目录 引言 WS63E对MQTT的支持 程序修改 测试结果 结语 引言 在上一篇博文中已经介绍了WiFi的使用。今天介绍一下如何使用MQTT协议连接到华为云上。 WS63E对MQTT的支持 WS63E的代码参考直接提供了MQTT的支持&#xff0c;文档介绍见docs/board/WS63V100 MQTT 开发指南.pd…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN&#xff1f;2.2 CMSIS-NN是什么&#xff1f;2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM…

如何在Windows平台下基于Whisper来训练自己的数据

0. 简介 最近快到1024程序员节了&#xff0c;再给大家上点干活。Whisper是openai开源的一个语音转文字模型。也是现在识别效果最好的离线数据模型&#xff0c;但是我们发现我们在完成一些中英文或者专业术语对话的时候。这时候表现的效果就比较差了。而这一步就得用微调的方式…