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

news2024/11/23 4:44:44

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视图的两种打开方式

第一种

第二种

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

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

相关文章

Maven 不同环境灵活构建

需求: 使用 Maven根据不同的构建环境&#xff08;如开发、测试、生产&#xff09;来定义不同的配置&#xff0c;实现灵活的构建管理。 需要Demo项目的可以参考&#xff1a;我的demo项目 一、项目分层 一般的初创项目不会有特别多的配置文件&#xff0c;所以使用 spring.profile…

Android调用系统相机录像并设置参数

最近要做一个 Android上的录像功能&#xff0c;由于之前做拍照功能完全是用自定义方式&#xff0c;太麻烦。故这次决定直接调用系统相机来录像。 一、添加权限 首先&#xff0c;添加必要的权限 <!-- 授予该程序使用摄像头的权限 --><uses-permission android:name&q…

K8s中TSL证书如何续期

TSL是什么 K8s中的作用是什么&#xff1f; 在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;TSL 指的是 Transport Layer Security&#xff0c;也就是传输层安全协议。它是用来保护在网络上传输的数据的安全性和隐私性。 TSL 在 Kubernetes 中的作用包括&#xff1a;…

B+树(B树的改进)

目录 一、什么是B树&#xff1f; 二、B树的性质 1.B树被广泛作为数据库索引的索引结构 2.m个分支的结点有m个元素 3.每个元素对应子结点最大值 4.多级索引结构 5.叶子结点层包含所有元素 三、B树和B树的区别 四、B树的查找 1.顺序查找 2.随机查找 3.范围查找 一、什…

JVM机制

文章目录 JVM 简介JVM内存划分堆&#xff08;线程共享&#xff09;Java虚拟机栈&#xff08;线程私有&#xff09;本地方法栈&#xff08;线程私有&#xff09;程序计数器&#xff08;线程私有&#xff09;方法区&#xff08;线程共享&#xff09; JVM类加载机制类加载过程双亲…

校园表白墙源码修复版

此校园表白墙源码基于thinkphp&#xff0c;因为时代久远有不少bug&#xff0c;经本人修复已去除大部分bug&#xff0c;添加了美化元素。 https://pan.quark.cn/s/1f9b3564c84b https://pan.baidu.com/s/1bb9vu9VV2jJoo9-GF6W3xw?pwd7293 https://caiyun.139.com/m/i?2hoTc…

群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作

安装与仓库已经调整完毕&#xff0c;现在开发业务架构逻辑&#xff0c;其次再开发功能逻辑。业务架构逻辑开发与功能逻辑开发不是一回事&#xff0c;一定要明白。业务架构指的是做某一件事或是某一种类型的事的逻辑&#xff0c;在互联网web应用中通常指一套系统的外在逻辑&…

js 的宏任务和微任务

宏任务 (macro-task) 与微任务 (micro-task) 在 JavaScript 中&#xff0c;宏任务&#xff08;macro-task&#xff09;和微任务&#xff08;micro-task&#xff09;是任务队列&#xff08;task queue&#xff09;中两个不同的任务类型&#xff0c;它们是 JavaScript 异步编程机…

DBeaver查看已保存连接的密码

打开Dbeaver窗口菜单-首选项-工作空间&#xff0c;找到工作空间路径 在文件管理器中打开工作空间路径\General.dbeaver&#xff0c;找到credentials-config.json。 在Linux下&#xff0c;使用如下命令对credentials-config.json文件进行解密 openssl aes-128-cbc -d -K babb4…

13 实战:使用Python和Pygame实现视频运动估计播放器

首先看运行效果: 在多媒体处理领域,视频的运动估计是一个重要的课题。在本文中,我们将详细介绍如何使用Python结合Pygame、OpenCV等库,实现一个支持运动估计的视频播放器。本项目旨在展示如何在Python中处理视频帧,实现块匹配算法进行运动估计,并将结果以可视化的方式呈现…

kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的顺序消费?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的…

TypeScript基础简介

TypeScript是Javascript的一个超集。 TypeScript在原有的基础之上又添加了编译器类型检查的功能&#xff0c;意味着如果使用ts进行开发&#xff0c;会对变量的类型进行较为严格的验证&#xff0c;防止程序员写出可能出错的代码&#xff0c;规范变成习惯&#xff0c;适合大项目开…

2024年MathorCup妈杯大数据竞赛选题人数发布

经过24个小时&#xff0c;各个平台的相关选题投票、相关文章阅读量等各项数据进行统计&#xff0c;利用之前的评估办法&#xff08;详见注释&#xff09;。在开赛后24小时&#xff0c;我们基本确定各个赛题选题人数&#xff0c;以帮助大家更好地分析赛题局势。 题目人数A46B72 …

【Vulnhub靶场】DC-4

DC-4靶场下载地址https://www.five86.com/downloads/DC-4.zip 本机IP&#xff1a;192.168.118.128 靶机IP&#xff1a;192.168.118.0/24 信息收集 扫描主机存活&#xff0c;扫描端口&#xff0c;扫描服务 第一步扫描出主机ip为192.168.118.141 nmap -sP 192.168.118.0/24 nm…

Java后端面试题:Java基础篇

目录 Java基础 1.请你说说Java中基本数据类型的bit长度&#xff1f; 2.switch支持哪些数据类型&#xff1f;支持long么&#xff1f; 3.讲一下常见编码方式&#xff1f; 4.char能不能存储中文&#xff1f; 5.为什么数组索引从0开始呢&#xff1f;假如从1开始不行吗&#xf…

Java篇图书管理系统

目录 前言 一. 图书管理系统的核心 二. 图书管理系统基本框架 2.1 book包 2.1.1 Book&#xff08;书籍类&#xff09; 2.1.2 Booklist (书架类&#xff09; 2.2 user包 2.2.1 User类 2.2.2 Administrator(管理员类) 2.2.3 Visitor&#xff08;用户类&#xff09; 2.…

数据结构 - 散列表,初探

今天我们继续学习新的数据结构-散列表。 01定义 我们先来了解一些常见概念名词解释。 散列&#xff1a;散列表的实现叫做散列&#xff0c;是一种实现以常数级时间复杂度执行查找、插入和删除的技术&#xff1b; 散列值&#xff1a;通过散列函数对输入值&#xff08;key&…

【c++篇】:从基础到实践--c++内存管理技巧与模版编程基础

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 前言一.c/c内存分布二.c/c的动态内存管理方式2.1.c语言的动态内存管…

JavaEE初阶---多线程(五)---定时器/线程池介绍

文章目录 1.定时器的介绍2.线程池2.1为什么需要使用线程池2.2如何进行线程池的创建2.3普通的构造方法的局限性2.4该种对象创建的方法的特点2.5线程池的模拟实现的逻辑 3.ThreadPoolExecutor类的介绍3.1构造方法3.2四种拒绝的策略 1.定时器的介绍 下面的这个就是我们的这个定时…

基于JSP的高校食堂食材选购管理系统【附源码】

基于JSP的高校食堂食材选购管理系统 效果如下&#xff1a; 系统首页界面 用户登录页面 食材信息页面 论坛交流界面 管理员登录界面 管理员功能主界面 食材信息管理界面 订单配送管理界面 用户功能主界面 商家功能主界面 司机功能主界面 研究背景 近年来互联网技术的发展使得…