一、什么是相对路径?
首先在介绍如何使用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}来避免手动指定绝对路径的麻烦,使用相对路径既方便又实用。