在使用 Spring Boot 做项目的时候,经常会使用一些第三方jar包,有些jar包在Maven仓库https://mvnrepository.com/中没有备案,无法在pom中直接引入。
一、${project.basedir}变量介绍
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中使用。
本篇文章来源于微信公众号: 程就人生
微信扫描下方的二维码阅读本文
Comments NOTHING