当前位置: 首页 > article >正文

Maven架构项目管理工具

1.1什么是Maven

  • 翻译为“专家”,“内行”
  • Maven是跨平台项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
  • 什么是理想的项目构建
    • 高度自动化,跨平台,可重用的组件,标准化的
  • 什么是依赖?为什么要进行依赖管理?
    • 自动下载,统一依赖管理
    • A1.0   依托于  B 2.0  依托于    C3.0
  • 有哪些项目信息
    • 项目名称描述等,开发人员信息,开发者信息等
依赖管理

依赖管理是Maven的核心功能之一。Maven可以自动下载并管理项目所需的第三方依赖包,比如JAR文件。同时,它也支持对自己开发的模块进行管理,类似于引入第三方依赖包一样引用自己的模块。

举个例子,一个项目A依赖于B,而B又依赖于C,那么通过Maven的依赖管理,C将被自动下载,并且能够在项目构建时自动解决依赖关系。

项目信息

Maven不仅仅管理代码,还能帮助存储与项目相关的各种信息。

1.2 什么是依赖管理

依赖管理指的是Maven如何管理项目所需的外部依赖。通过Maven,开发者不需要手动下载和配置这些依赖,它能够自动从远程仓库下载并在本地存储。对于自己开发的模块,Maven也提供了类似的依赖管理功能,可以轻松地引用自己模块的版本。

1.3 什么是项目构建

项目构建是指从编写源代码到编译、测试、打包、部署的整个过程。在传统的项目构建中,开发者需要手动完成这些步骤,这既繁琐又容易出错。

传统项目构建

Maven项目构建

Maven将项目构建过程标准化,可以通过简单的命令完成所有步骤。Maven的构建过程包括:

这种标准化的构建过程对于团队协作非常有益,避免了每个开发者不同的配置和操作方式带来的问题。

1.4 Maven的应用场景

Maven在大型团队和复杂项目中发挥着重要作用。开发人员只需按Maven的标准目录结构进行开发,并提交代码。在测试服务器上,Maven会自动拉取代码并进行构建,完成项目的清理、编译、测试、打包和部署等工作。

1.5 为什么使用Maven

  • IDE?Eclipse?IDEA?
    • 手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
    • 每个人的IDE配置都不同,很容易就出错出现本地代码换个地方编译
  • Ant?
    • 没有一个约定的目录结构
    • 必须明确让ant做什么,什么时候做,然后编译,打包
    • 没有生命周期,必须定义目标及其实现的任务序列
    • 没有集成依赖管理
  • Maven?
    • 拥有约定,知道你的代码在哪里,放到哪里去
    • 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
    • 只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
    • 拥有依赖管理,仓库管理

1.6 Maven模型

Maven项目基于**POM(Project Object Model)**模型,它通过一个名为pom.xml的配置文件来定义项目的基本信息、依赖、插件等。这个文件可以看作是Maven项目的核心,所有的构建和依赖关系都通过它进行管理。

2. 初识Maven

2.1 Maven安装

2.1.1 安装准备

2.1.2 Maven安装目录分析

解压Maven后,目录结构如下:

2.1.3 设置Maven环境变量
  • 设置MAVEN_HOME环境变量
  • 升级时只需要下载最新版本,解压缩重新设置MAVEN_HOME环境变量即可
  • 设置MAVEN_OPTS环境变量
  • -Xms128m -Xmx512m
  • 配置用户范围的settings.xml
  • %MAVEN_HOME%/conf/settings.xml 全局的
  • ~/.m2/settings.xml 单个用户的

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

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

配置MAVEN_OPTS运行环境变量大小,(解决大型项目内存溢出的问题)

(找到命令改参数治标不治本)

-Xms128m  -Xmx512m

验证配置是否完成

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

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>
    <artifactId>Hello</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
2.2.3 编写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 编写单元测试

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命令,查看根目录变化
  2. cmd 中继续录入mvn clean命令,然后再次查看根目录变化
  1. cmd 中录入 mvn clean compile命令, 查看根目录变化
  1. cmd 中录入 mvn clean test命令,查看根目录变化
  1. cmd 中录入 mvn clean package命令,查看根目录变化
  1. cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里

2.3 Maven的第二个项目

通过创建第二个项目HelloFriend,了解如何引用其他项目的依赖。

2.3.1 创建项目目录

创建HelloFriend项目,并按照标准Maven目录结构进行组织。

2.3.2 创建pom.xml

HelloFriend的根目录创建pom.xml,并引用Hello项目作为依赖:

<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 编写Java代码

HelloFriend项目中,引用Hello类进行构建:

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共享构建的位置就是仓库

         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的程序或用户,如未单独配置,则默认加载以上目录的本地库文件;

Ps:课程提供本地库文件为shoprapository.zip,如果遇到打包不成功,jar包无法下载等情况,优先进行本地库配置,避免因网络导致的maven依赖包问题.

2.5. IDEA整合Maven项目


2.5.1. IDEA的Maven全局配置


启动IDEA后找到Settings

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

2.5.2. IDEA创建Maven的Java项目


至此Maven的Java项目创建完成

测试Maven的jar包引入

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

        2.5.3 IDEA创建Maven的Java web项目


        配置完毕后会进行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的操作,比如打包,清理,测试等等;


http://www.kler.cn/a/533863.html

相关文章:

  • Linux之安装MySQL
  • PyQt6/PySide6 的 QLineEdit 类
  • 动态图推理问答算法
  • 跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)
  • 【数据结构】栈与队列
  • 深入解析 clone():高效的进程与线程创建方法(中英双语)
  • Mysql——SQL语句
  • KES数据库实践指南:探索KES数据库的事务隔离级别
  • linux 进程状态学习
  • SQL Server配置管理器无法连接到 WMI 提供程序
  • 设计模式---观察者模式
  • 用Argo的netCDF文件计算海洋混合层和障碍层深度并通过M_Map工具包画出全球海洋MLD和BL的分布图
  • Zabbix SQL注入漏洞CVE-2024-42327修复建议
  • Hackmyvm friendly2
  • 使用java调用deepseek,调用大模型,处理问题。ollama
  • Unity3D RVO动态避障技术方案详解
  • 春节娱乐大餐,智能家居互联互通,极空间虚拟机安装小米官方 HA 集成组件
  • excel里面的数据怎样批量地处理,把数据竖排便成横排?
  • 第五天 初步了解ArkTS和ArkUI
  • 拍照对比,X70 PRO与X90 PRO+的细节差异
  • Linux 零拷贝技术
  • C#结合html2canvas生成切割图片并导出到PDF
  • DeepSeek R1技术报告关键解析(9/10):强化学习也不是万能的
  • 2021.3.1的android studio版本就很好用
  • 备考蓝桥杯8——EEPROM读写
  • 深度探索 C 语言操作符:从基础到实战应用