首页 > 其他分享 >浅谈对Maven的理解

浅谈对Maven的理解

时间:2024-08-23 08:56:32浏览次数:12  
标签:maven 依赖 浅谈 项目 jar Maven 理解 mvn

一、基本介绍

Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队交流,每天都有数以万计的开发者在访问中央仓库以获取他们需要的依赖。

项目开发可能遇到的问题:

1、 开发人员将功能开发完成,编译、打包、运行正常,而后提交svn,测试人员从 svn获取代码后编译、打包、运行报错。

2、一个项目工程中时间长了开发人员也搞不清楚项目中的某些jar的作用,用在哪些模块,不得不每过一段时间每个jar 包梳理一遍。


3 项目使用的第三方框架要升级,从第三方框架官方网站下载jar 包,加入工程,运行后报错,原来是第三方框架依赖的jar版本冲突了。


4、项目组编写了一个通用的工具类,其它项目组将类拷贝过去使用,工具类发现.bug 修改后,通过邮件将工具类发送给各各项目组,这不是一个好的分发机制,太多的环节可能导致出现bug。


5、项目的模块很多,每次启动项目需要从svn获取全部模块的项目代码编译运行,由于工程大项目启动慢,工作效率低下。

二、主要特点

依赖管理:Maven 能够自动处理项目中各个模块的依赖关系,包括依赖的传递性,大大简化了依赖管理的复杂性。

项目构建:Maven 提供了一套标准化的构建生命周期,例如编译、测试、打包、部署等阶段。

跨平台项目信息管理:Maven 能够统一管理项目的描述信息,包括项目名称、版本、开发者信息等。

可扩展性:Maven 允许通过插件和皮肤来扩展构建过程和项目站点的生成。

社区支持:Maven 拥有一个活跃的社区,提供了大量的插件和丰富的文档资源。

三、核心概念

  • POM:项目对象模型,是 Maven 项目的核心配置文件,定义了项目的构建流程、依赖关系等。

  • 坐标:每个 Maven 项目都有一个唯一的坐标,包括 groupId(组织唯一标识)、artifactId(项目唯一标识)和 version(项目版本)。

  • 仓库:Maven 项目会从远程仓库下载依赖,并存储在本地仓库中,方便后续项目使用。

  • 依赖范围:定义了依赖在项目中的使用范围,如 compile、test、runtime 等。

四、使用场景

  • 多模块项目:在包含多个模块的大型项目中,Maven 可以很好地管理模块间的依赖关系。

  • 快速启动新项目:利用 Maven 的 archetypes(原型),可以快速生成项目的基础结构。

  • 持续集成:Maven 的标准化构建流程可以很好地集成到持续集成系统中。

五、安装和配置

下载和安装:从 Apache Maven 的官方网站下载并安装 Maven。

配置环境变量:将 Maven 的 bin 目录添加到系统 PATH 环境变量中。

配置本地仓库:设置 Maven 的本地仓库路径,用于存储下载的依赖。

配置镜像:为了加速依赖的下载,可以配置 Maven 使用国内的镜像仓库。

六、Maven 的命令

  • mvn clean:清理项目,删除生成的编译产物。
  • mvn compile:编译项目源代码。
  • mvn test:运行测试用例。
  • mvn package:打包项目,生成可部署的包(如 JAR 或 WAR 文件)。
  • mvn install:将打包的项目安装到本地仓库,供其他项目使用。
  • mvn deploy:将项目部署到远程仓库。

七、简单示例

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
 
    <name>my-app</name>
    <url>http://maven.apache.org</url>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

这个简单的Maven示例定义了一个Java项目,包括项目的组ID、构件ID、版本和打包方式。它还包括了项目的名称和URL,以及项目的属性和依赖关系。在<build>部分,它配置了两个插件:maven-jar-plugin 和 maven-compiler-plugin。这个例子展示了如何使用Maven来定义一个简单的Java项目。

标签:maven,依赖,浅谈,项目,jar,Maven,理解,mvn
From: https://blog.csdn.net/a876106354/article/details/141449950

相关文章

  • 浅谈Redis(一)
    浅谈Redis(一)文章目录浅谈Redis(一)Redis的特点Redis线程模型Redis单线程为什么快Redis持久化方案Redis缓存淘汰策略Redis缓存穿透、击穿和雪崩区别和解决方案Redis是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,比如str......
  • 浅谈Kafka(一)
    浅谈Kafka(一)文章目录浅谈Kafka(一)Kafa的设计是什么样的数据传输的事务定义消息队列的应用场景Kafka怎么样判断节点是否存活Kafka的消息是采用pull模式还是push模式Kafka在磁盘上的消息格式Kafka高效文件存储设计特点Kafka与传统消息系统之间的区别Kafka的分区数据怎样保......
  • 深入理解 Java 中 ArrayList 的底层原理
    在这篇博客中,我们将深入探讨ArrayList的底层实现原理,并通过逐步剖析ArrayList的源码来理解其内部工作机制。我们将重点关注ArrayList的创建、元素添加、扩容机制等关键点。创建ArrayList集合对象ArrayList<String>list=newArrayList<>();使用空参构造器创建ArrayList集合......
  • 一起学Java(3)-Java项目构建工具Gradle和Maven场景定位和优缺点对比
    在第一步创建的项目(java-all-in-one)项目里,我们提到了使用Gradle作为项目构建工具。看到这里,不知道你是否有疑惑,什么是项目构建工具。Java项目常用构建工具有哪些?都有什么特点?带着疑惑,本文对Java的构建工具进行一些梳理,以同步理解。从而使大家对我们项目中使用到的技术栈和技术......
  • 队列操作(深入理解FreeRTOS队列之队列实战)
    文章目录一、队列的操作二、学习总结在FreeRTOS中,队列的本质是环形缓冲区。一、队列的操作1、创建队列2、写队列3、读队列详细可看此篇博客:FreeRTOS——队列(基于百问网DshanMCU-F103实现挡球板游戏改造)-CSDN博客基于链表解析队列的使用:代码示例:#include"......
  • 深入理解Elasticsearch:让搜索性能飞起来!
    Elasticsearch 概述Elasticsearch是一个基于lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。ELK技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。而Elasticsearch是一个开源的高扩展的分布式全文搜索引擎,是整个ELK技术栈的......
  • 深入理解Android MTP之存储映射分析
    深入理解AndroidMTP之UsbService启动分析 分析了MTP的服务端的启动,本文来分析切换MTP模式后,存储中的数据(文件、目录)是如何映射到PC端的。首先你得知道如何切换MTP模式。当手机通过usb连接电脑时,会出现一个关于usb的通知,点击通知后,会出现一个类似如下的界面这个FileTransfe......
  • 浅谈TCP和UDP协议的区别
    **传输模式**TCP协议:数据流(DataStream)--没有消息边界,比如服务端给客户端发来2048字节大小的数据,而客户端设置的一次最大接收大小为1024,这时候就意味着还有1024没能接收过来,要再接收一次。所以容易出现粘包的情况。所谓粘包,就是数据都粘在一起了。UDP协议:数据报(Da......
  • 深入理解 TCP 协议与网络通信
    1.什么是TCP网络分层?TCP网络分层是指将计算机网络的通信过程分为不同的层次,每一层都承担特定的功能。通常,网络分为四个主要层次:应用层、传输层、网络层和链路层。这种分层结构使得网络协议的设计和实现更加清晰,便于维护和扩展。生活案例帮助记忆想象一下,网络就像一个快......
  • 深入理解 Vue 2 的双向绑定原理与实现
    在Vue2中,双向绑定是Vue的核心功能之一,它通过数据响应式系统使得数据的变化自动反映在视图上,同时用户在视图上做的更改也能够同步回数据模型。这种双向绑定是通过数据劫持(DataHijacking)和发布-订阅模式(Publish-SubscribePattern)实现的。以下是双向绑定原理及实现方式......