在使用 Spring Boot 做项目的时候,经常会使用一些第三方jar包,有些jar包在Maven仓库https://mvnrepository.com/中没有备案,无法在pom中直接引入。

这个时候,我们就需要把jar包导入到项目中,放在某个文件夹下,比如lib文件下,然后再在pom中引入。在pom中引入的时候,需要增加一个属性系统路径:<systemPath>${project.basedir}/lib/xxx.jar</systemPath>,来指明架包位置。
在系统路径中的变量${project.basedir},它是什么意思呢?

一、${project.basedir}变量介绍

在 Spring Boot 项目的POM文件中,${project.basedir}是Maven内置的一个属性,而不是用户定义的属性。它是由Maven自动提供的,用于指向当前项目的基目录。具体来说,${project.basedir}指向的是包含pom.xml文件的目录。
假设有一个项目目录结构如下:
my-project├───pom.xml│├───lib│└───src    └───main        ├───java        └───resources

在这个结构中:my-project是项目的根目录。pom.xml是Maven项目的核心配置文件,位于项目的根目录下。lib目录用于存放项目的库文件,例如第三方jar包等。src目录是源代码的根目录。src/main/java目录用于存放项目的java源代码。src/main/resources目录用于存放项目的资源文件,如配置文件、图片等。

这是一个典型的Spring Boot项目的目录结构,它遵循Maven的标准目录布局规范。在实际开发中,可能还会有其他目录,如src/test/java用于存放测试代码,src/main/webapp用于存放Web应用资源等。

在pom.xml中,${project.basedir}的值就是/my-project。我们可以在pom.xml文件中通过以下方式使用它。

二、${project.basedir}应用示例

1. 配置构建输出目录

可以使用${project.basedir}来指定构建输出目录的路径。

<build>    <directory>${project.basedir}/target</directory>    <outputDirectory>${project.basedir}/target/classes</outputDirectory></build>

2. 引用外部资源

在一些插件配置中,可以使用${project.basedir}来引用项目根目录下的资源或脚本文件。例如,使用Maven的exec-maven-plugin执行根目录下的脚本:

<build>    <plugins>        <plugin>            <groupId>org.codehaus.mojo</groupId>            <artifactId>exec-maven-plugin</artifactId>            <version>3.0.0</version>            <executions>                <execution>                    <goals>                        <goal>exec</goal>                    </goals>                </execution>            </executions>            <configuration>                <executable>${project.basedir}/scripts/my-script.sh</executable>            </configuration>        </plugin>    </plugins></build>

引用本地jar包:

<!-- 串口jar start -->        <dependency>            <groupId>gnu.io</groupId>            <artifactId>RXTXcomm</artifactId>            <version>2.2</version>            <scope>system</scope>            <systemPath>${project.basedir}/lib/RXTXcomm.jar</systemPath>        </dependency>        <!-- 串口jar end -->

3. 资源过滤

使用Maven资源插件时,可以配置资源过滤并使用${project.basedir}来指定资源文件的位置。

<build>    <resources>        <resource>            <directory>${project.basedir}/src/main/resources</directory>            <filtering>true</filtering>        </resource>    </resources></build>

4. 配置测试资源目录

类似地,可以配置测试资源的目录路径。

<build>    <testResources>        <testResource>            <directory>${project.basedir}/src/test/resources</directory>            <filtering>false</filtering>        </testResource>    </testResources></build>

5. 作为系统属性

在一些插件中,可以将${project.basedir}作为系统属性传递给应用程序。例如,在Surefire插件中设置系统属性:

<build>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-surefire-plugin</artifactId>            <version>2.22.2</version>            <configuration>                <systemPropertyVariables>                    <basedir>${project.basedir}</basedir>                </systemPropertyVariables>            </configuration>        </plugin>    </plugins></build>

6. 定义自定义脚本

在Maven插件中执行自定义脚本或命令时,使用${project.basedir}来指定脚本的位置。

<build>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-antrun-plugin</artifactId>            <version>1.8</version>            <executions>                <execution>                    <phase>package</phase>                    <goals>                        <goal>run</goal>                    </goals>                    <configuration>                        <target>                            <exec executable="${project.basedir}/scripts/deploy.sh">                                <arg value="${project.version}"/>                            </exec>                        </target>                    </configuration>                </execution>            </executions>        </plugin>    </plugins></build>

三、Maven中的其他内置属性

除了${project.basedir},Maven还提供了一些其他常用的内置属性:

  • ${project.version}:项目的版本

  • ${project.artifactId}:项目的artifactId

  • ${project.groupId}:项目的groupId

  • ${project.build.directory}:构建目录,通常为target

这些属性都是由Maven根据pom.xml中的配置和项目结构自动生成和管理的。

四、最后总结

通过以上的了解,可以发现${project.basedir}在Maven的pom.xml中非常有用,可以灵活地引用项目根目录下的各种资源和文件,简化配置,增强可读性和可维护性。

总的来说,${project.basedir}是Maven自动提供的一个指向项目根目录的内置属性,不需要显式定义,可直接在pom.xml中使用。

本篇文章来源于微信公众号: 程就人生



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2024-08-01