Maven项目管理工具-初始+环境配置

1. Maven的概念

1.1. 什么是Maven

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

理想的项目构建:高度自动化,跨平台,可重用的组件,标准化的流程

maven能够自动下载依赖,并且对依赖进行统一的管理

1.2. 什么是依赖管理

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

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

maven对于项目所需的依赖,会首先从本地仓库下载,如果本地仓库没有,则会从maven的中央仓库下载

下载之后,如果对该依赖二次使用,则直接从本地仓库获取

1.3. 什么是项目构建

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

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

传统项目:

打开Idea编写源代码和配置文件,对源代码进行编译,可以使用Junit进行单元测试,把项目打成war包,部署到Tomcat服务器中运行。

maven项目:

maven将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。

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

maven进行项目管理的好处:

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

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

maven进行项目构建的过程:

1.4. Maven的应用场景

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

每个人的IDE配置都不同,很容易就出错出现本地代码换个地方编译,程序无法执行的问题,测试人员通过maven就可以避免不同系统环境所带来的程序无法执行的问题

1.5. 为什么使用Maven

  •  拥有约定,知道你的代码在哪里,放到哪里去
  •  拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
  •  只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
  •  拥有依赖管理,仓库管理

1.6. Maven模型

POM项目管理模型: Project Object Model

maven主要是通过pom.xml文件进行项目和依赖管理

2. 初识Maven

2.1. Maven安装

2.1.1. 安装准备

1.安装jdk1.8或以上版本

2.下载maven

 Maven – Download Apache Maven

3.6.0版本下载地址:Index of /dist/maven/maven-3/3.6.0/binaries

3.安装maven

并将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的环境变量

1. 设置MAVEN_HOME环境变量

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

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

设置Path环境变量,把 %MAVEN_HOME%\bin 添加到Path的变量值末尾,与前面的内容用 ; 隔开,如图:

2.设置MAVEN_OPTS环境变量(可忽略)

-Xms128m -Xmx512m

3.配置用户范围的settings.xml

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

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

setting文件中需要配置的内容

需要配置mirrors镜像,如果不配置默认为国外镜像

<mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror> 阿里镜像,通过该镜像联网,进行jar包的上传和下载操作

需要配置本地仓库localRepository

 <localRepository>D:\repository360</localRepository>  其中为本地仓库的地址

4.验证配置是否完成

mvn-version

2.2. Maven的第一个项目

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

java项目的目录结构

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

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

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

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

target —— 项目输出位置 

pom.xml

创建一个Hello项目 项目的结构如下:

 --src

 -----main

 ----------java

 ----------resources

 -----test

 ---------java

 ---------resources

 --pom.xml

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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.tx.maven</groupId><!--项目包的坐标 jar包在本地仓库的存放地址-->
  <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;
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命令能够顺利执行,complie编译项目,产生target文件  说明项目创建成功

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

清理target目录,主要用于清除项目的构建输出

target目录中有jar包和其他附加文件

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

先清理,再编译

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

执行测试代码,产生测试结果

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

项目打包  执行清理,编译,测试,打包命令

6.cmd 中录入 mvn clean install 查看仓库

本地仓库显示

仓库中会产生封装好的jar包

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"> xml约束信息(xml笔记)
  <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包

在文件夹创建的Hello项目可以通过以下两种方式打开

1.选择Open,再选择Hello项目的地址

2.选择Import Project  在选择pom.xml的地址

一直点击下一步,最后打开文件

2.4. Maven仓库配置

2.4.1. Maven仓库概念

何为Maven仓库?

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

Maven仓库布局

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

包名 项目名 版本

groupId/artifactId/version/artifactId-version.packaging

groupId

定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。

作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免命名冲突。它也影响了本地仓库和远程仓库中 Maven 构件的存储路径。

artifactId

定义:artifactId 是 Maven 项目坐标的第二个部分,它表示具体的项目或模块的名字。

作用:artifactId 标识了项目中的一个特定模块或组件。在一个大型项目中,可能会有多个子模块,每个子模块都有自己的 artifactId。

比如针对微服务项目,每个模块都是不一样的名字,而artifactId就是识别各个模块的,每个模块下的pom.xml都是不一样的

version

定义:version 是 Maven 项目坐标的最后一个部分,它表示项目的当前版本号。

作用:version 用于标识项目的不同发布版本。在 Maven 项目中,版本号非常重要,因为它决定了依赖项的精确版本,确保了构建的一致性和可重复性。

不同的依赖或者插件都拥有其自己的版本号,不同的版本号会有不一样的内容,团队项目中必须保证每一个人的版本必须一致

name

定义:name 是一个描述性的字段,它用于给项目一个易于理解的名字。

作用:name 并不是 Maven 坐标的一部分,但它会在某些地方显示,比如在生成的文档中,或者作为项目的描述性标签。它有助于提高项目的可读性和可识别性。

仓库的分类(两大类)

本地仓库

• ~/.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项目 MavenJava项目

至此Maven的Java项目创建完成

测试Maven的jar包引入

通常选择自动导入

以上,在IDEA上使用Maven进行Java项目的创建及测试已完成!

2.5.3. IDEA创建Maven的Java web项目 MavenJavaWeb项目

配置完毕后会进行web项目的初始化,初始化过程取决于本地库是否已生成及网络情况,推荐使用课程提供的Maven本地库

如果创建项目速度非常慢,并且在Generating project in Batch mode卡住,则进行全局设置如下:

-DarchetypeCatalog=local从本地检索下载

以上web项目则创建成功,接下来需要进行一些配置来确定web项目可以正常运行

添加war包的方法:

配置web服务器

添加本地tomcat配置

测试项目运行

至此,在IDEA上使用Maven配置的Java web工程已经完成配置

2.5.4. IDEA导入既有Maven项目

以导入刚才的Maven项目的例子做示范:

导入引入依赖Hello项目的HelloFriend项目,可以看到Hello项目已经被打成jar包引用到HelloFriend的Maven依赖中

2.6. Maven项目视图

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

maven视图的两种打开方式

第一种

第二种

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

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

相关文章

Mybatis-plus-入门

Mybatis-plus-入门 1&#xff1a;介绍 mybatis-plus的官网&#xff1a;MyBatis-Plus &#x1f680; 为简化开发而生 2: 快速入门 步骤&#xff1a; 1&#xff1a;引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>my…

STM32使用硬件I2C读写AT24C02 EEPROM(一)

文章目录 一、软件准备配置I2C接口&#xff1a;生成工程代码&#xff1a; 二、编写驱动程序初始化I2C接口&#xff1a;编写读写函数&#xff1a; 三、调试与测试 前面讲到使用软件模拟i2c读写AT24C02&#xff0c;这篇文章使用stm32 提供的硬件i2c读写&#xff0c;看看怎么回事 …

gin入门教程(3):创建第一个 HTTP 服务器

首先设置golang github代理&#xff0c;可解决拉取git包的时候&#xff0c;无法拉取的问题&#xff1a; export GOPROXYhttps://goproxy.io再查看自己的go版本&#xff1a; go version我这里的版本是&#xff1a;go1.23.2 linux/arm64 准备工作做好之后就可以进行开发了 3.…

【AscendC算子开发】笔记1 算子开发哲学

重看这门课&#xff0c;有很多内容的认识更深了&#xff0c;做一些记录。 为什么不能将网络节点融合 这个问题关联到另一个问题&#xff1a;为什么我们需要激活函数&#xff1f; 使用线性的神经元堆叠得到的方程最后也是线性方程&#xff0c;无法表征非线性的信息&#xff0c…

软考(网工)——网络安全

文章目录 &#x1f550;网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 &#x1f551;现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552;Hash …

Node.js:深入探秘 CommonJS 模块化的奥秘

在Node.js出现之前&#xff0c;服务端JavaScript基本上处于一片荒芜的境况&#xff0c;而当时也没有出现ES6的模块化规范。因此&#xff0c;Node.js采用了当时比较先进的一种模块化规范来实现服务端JavaScript的模块化机制&#xff0c;它就是CommonJS&#xff0c;有时也简称为C…

react18中使用redux管理公共数据仓库实现数据immutable更新

Immutable.js出自Facebook&#xff0c;是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构&#xff0c;使用结构共享。所有的更新操作都会返回新的值&#xff0c;但是在内部结构是共享的&#xff0c;来减少内存占用。Immutablejs官网 在上一篇介绍redux的文章&…

数字IC后端实现 | Innovus各个阶段常用命令汇总

应各位读者要求&#xff0c;小编最近按照Innovus流程顺序整理出数字IC后端项目中常用的命令汇总。限于篇幅&#xff0c;这次只更新到powerplan阶段。有了这份Innovus常用命令汇总&#xff0c;学习数字IC后端从此不再迷路&#xff01;如果大家觉得这个专题还不错&#xff0c;想继…

实验:使用Oxygen发布大型手册到Word格式

此前&#xff0c;我曾发表过一篇文章《结构化文档发布的故事和性能调优》&#xff0c;文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日&#xff0c;有朋友咨询&#xff0c;若将同样的大型手册输出为MS Word格式&#xff0c;是否也会面临…

MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询

一、生成学生信息脚本 利用该脚本可以生成任意个学生信息&#xff0c;包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息&#xff0c;此处生成2万名学生&#xff0c;学生所有信息都是给定范围后随机生成。 生成学生信息后&#xff0c;再来对学生信息进行简单查询。…

Java 开发——(上篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus

一、概述 记录时间 [2024-10-23] 本文是一个基于 Spring Boot 3 MybatisPlus 的项目实战开发&#xff0c;主要涵盖以下几个方面&#xff1a; 从零开始的项目创建IDEA 中开发环境的热部署Maven、Swagger3、MybatisPlus 等的配置路由映射知识静态资源访问文件上传功能实现拦截器…

探寻闲鱼libsgmain加解密算法(4) ——JNI入口跳转

关注我的人都知道我一直在学习阿里的加密和算法&#xff0c;除了研究逆向问题&#xff0c;还会把学来的阿里技术用在自己的应用上。 为什么&#xff1f;因为学习大厂的应用&#xff0c;是进步最快的方法。而大厂在安全和加密方面的技术&#xff0c;个人觉得阿里做的是最好的。 …

个体能量的勇气层级是否容易达到?

没有勇气面对现实&#xff0c;没有勇气改变自我&#xff0c;没有勇气改变环境&#xff0c;没有勇气创新创造。 这是常态。 如何找寻高质量免费机器人工程资源自学提升-CSDN博客 个人能力的提升&#xff0c;也包括个体能量的提升。 个体能量是个人能力的一个非常重要的衡量指…

Spring Boot整合Stripe订阅支付指南

在当今的在线支付市场中&#xff0c;Stripe 作为一款一体化的全球支付平台&#xff0c;因其易用性和广泛的支付方式支持&#xff0c;得到了许多企业的青睐。本文将详细介绍如何在 Spring Boot 项目中整合 Stripe 实现订阅支付功能。 1.Stripe简介 Stripe 是一家为个人或公司提…

C语言实现Go的defer功能

之前笔者写了一篇博文C实现Go的defer功能&#xff0c;介绍了如何在C语言中实现Go的defer功能&#xff0c;那在C语言中是否也可以实现这样的功能呢&#xff1f;本文就将介绍一下如何在C语言中实现Go的defer功能。 我们还是使用C实现Go的defer功能中的示例&#xff1a; void te…

【每日一题】LeetCode - 判断回文数

今天我们来看一道经典的回文数题目&#xff0c;给定一个整数 x &#xff0c;判断它是否是回文整数。如果 x 是一个回文数&#xff0c;则返回 true&#xff0c;否则返回 false。 回文数 是指从左往右读和从右往左读都相同的整数。例如&#xff0c;121 是回文&#xff0c;而 123 …

nuxt3项目创建

安装 npx nuxilatest init <project-name> 此时会出现报错&#xff0c;需要在host文件中加入 185.199.108.133 raw.githubusercontent.com 再次执行命令&#xff0c;进入安装 此处选择npm&#xff0c;出现下图表示安装成功 启动项目 执行npm run dev&#xff0c;访…

《皮革制作与环保科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《皮革制作与环保科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《皮革制作与环保科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国轻工业联合会 …

深度学习-循环神经网络-LSTM对序列数据进行预测

项目简介: 使用LSTM模型, 对文本数据进行预测, 每次截取字符20, 对第二十一个字符进行预测, LSTM层: units100, activationrelu Dense层: units输入的文本中的字符种类, 比如我使用的文本有644个不同的字符, 那么units64 激活函数: 因为是多分类, 使用softmax 因为这是最…

已解决 django.db.utils.OperationalError: (1051, “Unknown table

报错信息&#xff1a; django.db.utils.OperationalError: (1051, "Unknown table bjybolg.tool_submission")python manage.py migrate --fake 命令用于告诉 Django 假装已经应用某个迁移&#xff0c;而不实际执行该迁移的操作。这通常在以下情况下非常有用&#x…