Java Maven工具

185 阅读3分钟

1、Maven搜索工具

http://mvn.coderead.cn/
或者搜 maven中央仓库

maven仓库:https://mvnrepository.com/

2、Maven

  • Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。
  • 官网:maven.apache.org/
  • 作用:方便依赖管理、统一的项目结构、标准的项目构架流程

3、安装

  • 安装步骤:

    • 1、解压 apache-maven-3.6.1-bin.zip 到指定目录
    • 2、配置本地仓库:修改 conf/settings.xml 中的 <localRepository>D:\TOOL2\apache-maven-3.9.6-bin\repository</localRepository>
    • 3、配置阿里云私服:修改 conf/settings.xml 中的 mirror 标签,为其添加如下子标签:
    •   <mirror>
          <id>aliyunmaven</id>
          <mirrorOf>*</mirrorOf>
          <name>阿里云公共仓库</name>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
      
    • 4、配置环境变量 M_HOME 为maven的解压目录,并配置path环境变量

4、环境变量

配置如下:

  • M2_HOME maven目录下的bin目录
  • MAVEN_HOME maven 的目录
  • 在系统的path中配置 %MAVEN_HOME%\bin

5、IDEA配置Maven环境

  • 点击 IDEA 中的 File > Settings > Build,Execution,Deployment > Build Tool > Maven
  • 设置 Idea 中使用本地安装的 Maven,并修改配置文件及本地仓库路径
  • image-20240813231712856.png

6、配置Maven全局环境

File > close Project > Customize > All settings > Build,Execution,Deployment > Build Tool > Maven

然后重复以上配置。

7、Pom.xml

生成Maven项目之后,项目目录下会有一个 Pom.xml 文件,用来管理项目依赖。

8、Maven 坐标

  • Maven中的坐标是资源(jar)的唯一标识,通过该坐标可以定位唯一的资源位置
  • 使用坐标来定义项目或引入项目中需要的依赖

Maven坐标组成:

  • groupId:定义当前Maven项目隶属组织名称(通常是公司域名反写,com.xxx)

  • artifactId:定义当前Maven项目名称(通常是模块名称,例如order-service)

  • version:定义当前项目版本号. SNAPSHOT中文是快照的意思,指的是正在开发的版本

  • 示例:

    •   <groupId>com.example</groupId>
        <artifactId>JUC</artifactId>
        <version>1.0-SNAPSHOT</version>
      

9、依赖管理

依赖配置、依赖范围、声明周期

依赖配置:

  • 指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。

  • 配置:

    • 1、在 pom.xml 中编写 <dependencies> 标签
    • 2、在 <dependencies> 标签内使用 <dependency> 引入坐标
    • 3、定义坐标的 groupId, artifactId, version
    • 4、idea右上角的Maven,点击刷新,引入最新加入的坐标(下载)

依赖传递: 依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,则当前项目间接依赖其他资源

排除依赖:

  • 指主动断开依赖的资源,被排除的依赖无需指定版本。
  •   <dependencies>
              <dependency>
                  <groupId>org.dom4j</groupId>   // 假设这个是引入其他的项目
                  <artifactId>dom4j</artifactId>
                  <version>2.1.3</version>
      ​
                  <!-- 排除依赖的标签 -->
                  <exclusions>
                      <exclusion>
                          <groupId>junit</groupId>   // 这个就是排除其他项目资源里的 junit
                          <artifactId>junit</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
          </dependencies>
    

依赖范围:

依赖的jar包,默认情况下,可以在任何地方使用(main和test)。可以通过 <scope>...</scope>设置其作用范围。

作用范围:

  • 主程序范围 mian文件夹范围内
  • 测试程序范围 test文件夹范围内
  • 是否参与打包运行 package指令范围内

8886fde29aac1139a5de420093999b7.png

Maven生命周期:

简单包含这几个:

  • clean:移除上一次构建生成的文件
  • compile:编译项目源码
  • test:使用合适的单元测试框架试运行测试(junit)
  • package:将编译后的文件打包,如:jar,war等
  • install:安装项目到本地仓库

image-20240818140031070.png

10、构建默认编码

在 pom.xml 文件中

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

11、导出失效问题

maven由于它的约定大于配置,之后可能遇到我们写的配置文件,无法被导出或者生效的问题

比如:我们写的资源文件 xx.properties 不在resources目录下,导致无法被构建。

解决方案:

    <!--在build中配置resources,来防止我们资源导出失败的问题 -->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>**/*.properties</exclude>
                    <exclude>**/*.xml</exclude>
                </excludes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>***/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>