maven Pom.xml 笔记

September 05, 2023 作者: yijianhao 分类: java 浏览: 98 评论: 0

Maven Pom.xml笔记

因为maven我不常使用,做一下简单的笔记以方便回顾

maven 目录结构

maven-project
├── pom.xml                   maven 配置文件
├── src                       源代码目录
│   ├── main                  主业务逻辑代码目录
│   │   ├── java              Java 源文件目录
│   │   └── resources         资源文件目录
│   └── test                  测试代码目录
│       ├── java              测试 Java 源文件目录
│       └── resources         测试资源文件目录
└── target                    编译输出目录,包括打包输出,测试报告

后面的gradle项目目录结构也是一样的,估计已经是某种规范习惯了

pom.xml文件

pom.xml 文件是 maven 项目的核心配置文件,用于描述项目的基本信息,如项目坐标、依赖、构建、组织等。下面是一个简单的示例

<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> <!-- 指定 pom.xml 文件的版本 -->
    <groupId>com.example</groupId> <!-- 指定项目所属的组织或公司的唯一标识符 -->
    <artifactId>hello-maven</artifactId> <!-- 指定项目的唯一标识符,通常与项目名称相同 -->
    <version>1.0-SNAPSHOT</version> <!-- 指定项目的版本号 -->
    <packaging>jar</packaging> <!-- 指定项目的打包方式,如 jar, war, ear 等 -->
    <name>Hello Maven</name> <!-- 指定项目的名称 -->
    <description>A simple Maven project</description> <!-- 指定项目的描述 -->
    <url>http://www.example.com</url> <!-- 指定项目的网址 -->
    <dependencies> <!-- 指定项目所依赖的其他项目或库 -->
        <dependency> <!-- 一个依赖元素,包含 groupId, artifactId, version 等信息 -->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope> <!-- 指定依赖的作用域,如 test, compile, runtime 等 -->
        </dependency>
    </dependencies>
    <build> <!-- 指定项目的构建信息 -->
        <finalName>${project.artifactId}</finalName> <!-- 指定最终生成的文件名 -->
        <plugins> <!-- 指定构建过程中使用的插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source> <!-- 指定源代码的 Java 版本 -->
                    <target>1.8</target> <!-- 指定目标代码的 Java 版本 -->
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

多项目(子项目)配置

Maven项目中可以包含子项目,也称为多模块项目,这样可以将一个大的项目分解为多个小的模块,方便管理和维护。下面是简单的示例, 父项目可以充当版本仲裁的角色,也就是在父项目中规定了依赖的版本号,子项目中就可以不需要定义该版本号,所以我们`spring boot`只需要指定<parent>元素中springboot的版本号,引入springboot管理的依赖就不要自己写版本号,除非你希望自定义。

父项目pom文件

<!-- 父项目 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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>multi-module-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Multi Module Project</name>
    <description>A simple multi module project</description>
    <modules>
        <module>module-a</module>
        <module>module-b</module>
        <module>module-c</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <!-- 统一管理依赖版本 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <!-- 其他依赖 -->
        </dependencies>
    </dependencyManagement>
</project>

子项目pom文件

<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>
    <parent>
        <!-- 指定父项目信息 -->
        <groupId>com.example</groupId>
        <artifactId>multi-module-project</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>module-a</artifactId>
    <packaging>jar</packaging>
    <name>Module A</name>
    <description>A simple module A</description>

    <!-- 不需要指定版本号 -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!-- 可以指定作用域 -->
            <scope>test</scope>
        </dependency>

        <!-- 依赖其他子模块 -->
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>module-b</artifactId>
            <!-- 可以指定版本号 -->
            <!--<version>${project.version}</version>-->
        </dependency>

        <!-- 其他依赖 -->
    </dependencies>

    <!-- 其他配置 -->
</project>

pom中的变量

pom的变量有两种,内置变量和自定义的变量。在<properties>元素中定义变量。

另外,子项目可以使用父项目中定义的变量,只要在子项目的pom.xml中指定父项目的groupId、artifactId和version,就可以继承父项目的pom配置,包括变量。如果子项目中有同名的变量,那么子项目的变量会覆盖父项目的变量

  1. Maven内置变量(属性) - jiduoduo - 博客园 (cnblogs.com)

  2. Maven项目继承和聚合,你学废了吗? - 知乎专栏


评论