Maven使用教程

Maven是啥

Maven是一个项目管理工具,用于构建和管理项目的依赖。它通过插件来扩展其功能,并提供了一种标准化的项目结构和构建方式。一个常见的用途是通过Maven来构建Java项目,它可以管理项目的依赖库、编译代码、运行测试、打包项目等。

如今我们构建一个项目需要用到很多第三方的类库,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。

Maven规定的目录结构

  • main/java 存放项目源代码
  • resources 存放项目资源文件
  •  test/java 存放单元测试源代码
  • test/resources 存放单元测试资源文件
  • pom.xml maven项目的配置文件
  • target 存放构建后的文件和目录,jar包,war包,编译后的class文件,都是maven构建时生成的

Maven基本命令

1.mvn -v 有信息,说明maven安装成功

2.compile 编译 将Java源代码编译成class文件

3.test 测试项目 执行test下的目录用例

4.package 打包 将项目打成jar包

5.clean 删除target文件夹

在Maven项目中,target目录是用来存放项目构建后的文件和目录,包括编译后的class文件、生成的jar包、war包等。这个目录是由Maven构建工具在项目构建过程中自动生成的。

6.install 安装 将当前项目放到maven本地仓库中,供其他项目使用

Maven仓库

Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库 和远程仓库。

本地仓库:自己计算机上的一个目录
中央仓库: Maven官方提供的远程仓库。

远程仓库(私服):   一般由公司团队搭建的私有仓库。
当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。

什么是“坐标”?

在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。

  • groupId:所需Jar包的项目名
  • artifactId:所需Jar包的模块名
  • version:所需Jar包的版本号
  • scope :依赖范围

传递依赖 与 排除依赖

传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。


排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)

依赖范围scope

用于控制依赖项在不同构建环境下的可见性和使用方式。依赖范围可以帮助你管理项目中的依赖项,并确保它们在正确的环境中使用。

compile 编译 :默认依赖范围,所有阶段

provided 提供:依赖项由jdk或服务器提供,无需在编译或运行时包含在项目中

runtime 运行时:在运行时需要,但在编译时不需要。

如,数据库驱动程序就是一个运行时依赖项,因为在编译时你只需要数据库相关的接口,而不需要具体的驱动程序。

test 测试:仅在测试代码中需要使用,不会被打包到最终的构建结果中。

如,JUnit就是一个测试依赖项,因为它只在运行测试时需要。

system 系统:类似于provided,但是需要明确指定依赖项的路径。通常用于引入本地系统的jar文件,而不是从maven仓库中获取。

通过正确设置依赖范围,你可以确保项目在不同的构建环境中正常工作,并减少不必要的依赖项。这样可以提高构建效率并减少构建结果的大小。

依赖冲突

当多个依赖项引入了相同的类或资源时,就会发生依赖冲突。但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。

1.短路优先
本项目——>A.jar——>B.jar——>X.jar
本项目——>C.jar——>X.jar

若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。

在此时,Maven只会引用引用路径最短的Jar。

2.声明优先

若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。

聚合

1.什么是聚合

将多个项目同时运行就称为聚合。

2.如何实现聚合?

只需在pom中作如下配置即可实现聚合:

<modules>
    <module>web-connection-pool</module>
    <module>web-java-crawler</module>
</modules>

继承

1.什么是继承?

在聚合多个项目时,如果这些被聚合的项目中需要引入相同的jar,那么可以将这些jar写入父pom中,各个子项目继承该pom即可。

2.如何实现继承?

  • 父pom配置:将需要继承的Jar包的坐标放入标签即可。

    <dependencyManagement>
        <dependencies>
              <dependency>
                <groupId>cn.missbe.web.search</groupId>
                <artifactId>resource-search</artifactId>
                <packaging>pom</packaging>
                <version>1.0-SNAPSHOT</version>
              </dependency> 
        </dependencies>
    </dependencyManagement>

  • 子pom配置:
<parent>
      <groupId>父pom所在项目的groupId</groupId>
      <artifactId>父pom所在项目的artifactId</artifactId>
      <version>父pom所在项目的版本号</version>
</parent>
 
<parent>
      <groupId>cn.missbe.web.search</groupId>
      <artifactId>resource-search</artifactId>
      <version>1.0-SNAPSHOT</version>
</parent>

pom.xml详解

pom.xml是Maven项目的核心配置文件,它使用XML格式描述了项目的基本信息、依赖关系、构建配置等。

1.项目基本信息:包括项目的名称、版本、描述、开发者信息

<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version> //版本
<name>My Project</name>  //项目名称
<description>This is a sample Maven project</description> //描述
<developers> //开发者信息
  <developer>
    <name>John Doe</name>
    <email>john.doe@example.com</email>
  </developer>
</developers>

2.项目依赖:声明项目所依赖的外部库,插件等。依赖可以通过groupId、artifactId和version来指定。

<dependencies>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
  </dependency>
</dependencies>

3.构建配置:包括项目的构建方式,插件配置等。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

4.仓库配置:指定maven远程仓库地址,用于下载项目依赖。

<repositories>
  <repository>
    <id>central</id>
    <url>https://repo.maven.apache.org/maven2</url>
  </repository>
</repositories>

5.插件管理:用于管理项目中使用的插件版本。

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
    </plugin>
  </plugins>
</pluginManagement>

原文链接:原文链接

### 关于 Maven使用教程 #### 下载与安装 Maven 的官方网站提供了详细的下载指导,当前最新的版本为 3.9.9[^1]。访问官方网址可以获取适用于不同操作系统的安装包。 #### 基础概念理解 Maven 不仅仅是一个简单的编译工具;实际上,这是一个旨在提升开发效率并促进良好实践的应用程序构建框架。通过标准化项目结构和流程,Maven 力求简化日常任务的同时也提高了团队协作的质量[^2]。 #### 初始化新项目 创建一个新的 Maven 工程非常简单,只需执行命令 `mvn archetype:generate` 即可在交互式提示下完成基本设置。此过程会引导用户输入必要的参数如组ID、工件ID等信息来初始化POM文件(Project Object Model),它是整个工程配置的核心描述符。 #### 构建生命周期管理 Maven 定义了一系列标准阶段构成完整的构建周期,包括清理(clean)、默认(build) 和站点(site)。这些阶段由特定的目标组成,比如 compile(编译), test (运行单元测试),package (打包成JAR/WAR等形式),install (部署至本地仓库) 或 deploy (上传远程服务器) 等。 #### 依赖关系解析 借助中央存储库中的元数据记录,Maven 能够自动处理第三方库之间的相互依存性问题。当声明了一个外部组件作为依赖项之后,Maven 将负责检索相应的jar 文件及其所需的其他资源,并将其加入classpath 中去。 #### 使用 Maven Wrapper 为了确保跨环境一致性,推荐采用 Maven Wrapper 方案。这允许开发者无需预先全局安装任何版本的 Maven ,而是随同具体应用一起携带指定版本号的包装器脚本(`mvnw`) 及其关联配置文件 (`maven-wrapper.properties`). 这样一来,在任意机器上都能轻松重现相同的构建条件[^3]. ```bash ./mvnw clean install ``` 上述命令展示了如何利用 Maven Wrapper 来触发一次完整的清理加安装动作。 #### 插件机制支持 除了内置的功能外,Maven 生态系统还拥有丰富的插件扩展能力。例如 ProGuard Maven Plugin 就是用来优化 Java 字节码大小并混淆最终产物的安全性的有效手段之一。这类插件往往遵循统一的标准布局方式存放源代码及相关资料[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值