一、什么是相对路径?
首先在介绍如何使用maven设置相对路径之前,我们需要先清楚什么是相对路径。相对路径是相对于当前文件路径的表示,即在不同的目录下我们可以使用相对路径来访问同一份文件。 比如我们有一个项目结构如下:
|
|--- src/
| |--- main/
| | |--- java/
| | |--- resources/
| | | |--- properties/
| | | | |--- db.properties
| | |--- webapp/
| | |--- WEB-INF/
| | |--- jsp/
| | |--- login.jsp
| | |--- index.jsp
我们在login.jsp中想要引用db.properties文件,如果我们使用绝对路径,就需要写成:
<%@ page import="java.util.Properties" %>
<%@ page import="java.io.FileInputStream" %>
<%
String path = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/properties/db.properties");
Properties props = new Properties();
FileInputStream in = new FileInputStream(path);
props.load(in);
String url = props.getProperty("url");
String username = props.getProperty("username");
String password = props.getProperty("password");
in.close();
%>
但是如果我们使用相对路径,就可以写成:
<%@ page import="java.util.Properties" %>
<%@ page import="java.io.FileInputStream" %>
<%
String path = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/properties/db.properties");
Properties props = new Properties();
FileInputStream in = new FileInputStream(path);
props.load(in);
String url = props.getProperty("url");
String username = props.getProperty("username");
String password = props.getProperty("password");
in.close();
%>
二、如何使用maven设置相对路径?
Maven是Java开发中使用最广泛的自动化构建工具之一。在使用Maven构建项目时,我们可以使用${project.basedir}
来表示项目的根目录,这样就可以避免手动指定绝对路径的麻烦。以下是一些示例。
三、使用相对路径指定src文件夹下文件的位置
在Maven项目开发中,除了在webapp目录下的文件,我们还可能会在src/main/java、src/main/resources或者src/test/java中需要调用其他资源文件,这时使用相对路径就很方便。
1. 设置log4j.properties位置
假如我们的log4j.properties文件在src/main/resources目录下,它的内容如下:
# 日志输出级别
log4j.rootLogger=INFO, stdout
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n
在pom.xml文件中,我们可以添加以下配置:
<project>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>log4j.properties</include>
</includes>
<targetPath>../classes</targetPath>
</resource>
</resources>
</build>
</project>
使用Maven命令来构建项目:mvn clean package
,在target目录下会生成一个classes文件夹。其中log4j.properties文件就会出现在classes下了。
2. 使用相对路径设置dubbo.properties位置
同样道理,我们还可以使用相对路径来设置dubbo.properties文件的位置。
<project>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>dubbo.properties</include>
</includes>
<targetPath>../classes</targetPath>
</resource>
</resources>
</build>
</project>
这样一来,在src/main/resources目录下创建dubbo.properties文件就可以被正常引用了。
四、使用相对路径指定webapp下文件的位置
1. 使用相对路径指定jsp文件的位置
在web应用中,最常用的就是jsp文件了。假如我们的index.jsp和login.jsp都在webapp/jsp目录下,而我们的css文件都在webapp/css文件夹下。
|
|--- src/
| |--- main/
| |--- webapp/
| | |--- css/
| | | |--- style.css
| | |--- jsp/
| | |--- login.jsp
| | |--- index.jsp
在index.jsp中想要使用css文件,我们可以这样写:
<link rel="stylesheet" type="text/css" href="../css/style.css">
这里的../
表示返回上一级目录,也就是从webapp/jsp返回到webapp下。
另外,在我们的login.jsp中想要引用某些js库的话,可以这样写:
<script src="../js/jquery.min.js"></script>
2. 使用相对路径指定web.xml文件的位置
我们知道,web.xml是web应用的配置文件,我们可以配置拦截器、servlet、监听器等等。在web.xml中,我们有时需要引用其他文件,这时候使用相对路径就可以避免绝对路径的麻烦。 例如,我们要在web.xml中引用spring配置文件,可以这样写:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:../spring/applicationContext.xml
classpath:../spring/spring-mybatis.xml
</param-value>
</context-param>
总结
相对路径在项目中应用广泛,而maven的出现为我们的开发过程提供了便利。在使用Maven构建项目时,我们可以使用${project.basedir}
来避免手动指定绝对路径的麻烦,使用相对路径既方便又实用。