我已经寻找了一段时间的实际示例,以了解Maven获取资源的相对路径最佳实践,但我感到困惑,希望您能支持我了解什么是获取资源的最佳实践,以及如何应用于具体示例:
具体示例:
结构假设我有以下结构,并试图从文件夹规划中的类中获取资源(位于资源中),所以基本上我试图创建一个与maven执行一致的相对路径的字符串:
├───.settings
├───images
├───src
│ ├───main
│ │ ├───java
│ │ │ └───com
│ │ │ └───moga
│ │ │ ├───planning --->Trying to get a resource from here
│ │ │ ├───population
│ │ │ │ ├───chromossome
│ │ │ │ ├───gene
│ │ │ │ └───initialpopulation
│ │ │ └───utils
│ │ └───resources
│ │ └───com
│ │ └───moga
│ │ └───planning
│ │ └───sample
│ └───test
│ ├───java
│ │ └───com
│ │ └───moga
│ │ ├───planning
│ │ └───population
│ │ ├───chromossome
│ │ └───gene
│ └───resources
│ └───com
│ └───moga
│ └───planning <-- Resource that I want to get is here
│ └───sample
└───target
├───classes
│ └───com
│ └───moga
│ ├───planning
│ │ └───sample
│ ├───population
│ │ ├───chromossome
│ │ ├───gene
│ │ └───initialpopulation
│ └───utils
├───generated-sources
│ └───annotations
├───generated-test-sources
│ └───test-annotations
├───maven-archiver
├───maven-status
│ └───maven-compiler-plugin
│ ├───compile
│ │ └───default-compile
│ └───testCompile
│ └───default-testCompile
├───surefire-reports
└───test-classes
└───com
└───moga
├───planning
│ └───sample
└───population
├───chromossome
└───gene
类RunCapacityPlanning,它获取我当前使用的以下快速修复程序的资源
Path pathCapacityPlanningGeneral = Paths.get(System.getProperty("user.dir"),
"src","test","resources","com","moga","planning","paramsGeneral.txt");
File file = new File(pathCapacityPlanningGeneral.toString());
if (!file.exists()) {
System.out.println("File Do not exist");
System.out.println(pathCapacityPlanningGeneral.toString());
}
上面的代码是用mvn包构建的,并且文件存在(不要打印消息)。
POM
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
...
方法我发现了一些潜在的方法:
File file = new File( path );
if ( !file.isAbsolute() )
{
file = new File( project.getBasedir(), file );
}
为了测试这种方法,我尝试了以下方法:
由此我明白我应该把它添加到我的POM中。
<properties>
<project.basedir>somepath</project.basedir>
...
</properties>
public static void main(String[] args) throws IOException {
// 1) Approach 1
// $ cannot be resolved to a variable,
// project cannot be resolved
System.out.println(${project.baseDir});
URL pathCapacityPlanningGeneral =
RunCapacityPlanning.class.getResource("paramsGeneral.txt");
File file = new File(pathCapacityPlanningGeneral.toString());
if (!file.exists()) {
System.out.println("File Do not exist");
System.out.println(pathCapacityPlanningGeneral.toString());
}
以上 mvn 软件包后 java -cp 目标/容量计划-1.0-SNAPSHOT.jar com.moga.planning.RunCapacityPlanning 抛出:
File Do not exist
jar:file:/C:/Users/.../capacityplan/target/capacityplan-1.0-SNAPSHOT.jar!/com/moga/planning/paramsGeneral.txt
有人知道我在这个方法中做错了什么吗?
非常感谢。
这里的视点栏目是:
资源是使用类路径解析的,而不是沿着您的项目目录布局。这意味着资源解析从下面开始src/[main|test]/[java|资源]/
解析资源的最佳方式是通过
new File(getClass()
.getResource("the resource relative path")
.toURI())
这样,资源位于普通目录或jar中并不重要。
“资源相对路径”可以以< code>/开头。在这种情况下,它相对于类路径根进行解析。如果它不是以< code>/开头,则相对于当前包进行解析。
在您的示例中,文件夹planning
就是您想要的,您可以使用
// from package "planning" one level up
new File(getClass()
.getResource("../plannung")
.toURI())
或者
// from CLASSPATH root decending
new File(getClass()
.getResource("/com/moga/plannung")
.toURI())
总是在路径名中使用正斜杠(/
)。Java在窗口上也能正确处理它们。
问题内容: 如果使用绝对路径,则无法将整个目录移动到新位置。如果使用相对路径,则无法将单个文件移动到新位置。 这里有什么解决方案?您是否设置了一个包含根路径并从那里开始的配置文件?还是您有类似的规则:永不移动文件? 我在某些项目中看到人们使用dirname( FILE )。我的意思是,为什么不简单地将其删除,因为目录名还是相对的(取决于文件所在的位置)? 问题答案: 您应该使用一个配置文件,该配置
最佳路径,是求解网络中两点之间阻抗最小的路经,必须按照结点的选择顺序访问网络中的结点。“阻抗最小”有多种理解,如基于单因素考虑的时间最短、费用最低、风景最好、路况最佳、过桥最少、收费站最少、经过乡村最多等。 下面以长春数据为例,计算地图中将要行走的地点间的最佳路径。其接口使用方法如下: 设置最佳路径分析参数 findPathParameter,包括交通网络分析通用参数、途径站点等; //设置网络分
主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字
在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《 Linux文件系统的层次结构》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。 指明一个文件存放的位置,有 2 种方法,分别是使用 绝对路径和 相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根
位置路径指定XML文档中节点的位置。路径可以是绝对路径或相对路径。 如果位置路径以选择的节点开始,则它是相对路径。 以下是使用相对路径定位元素的几个示例。 - 选择与节点相关的名字。 示例 在这个例子中,我们创建了一个示例XML文档students.xml,及其样式表文档students.xsl,它使用了XPath表达式。 以下是使用的示例XML。文件:students.xml - 文件:stud
问题内容: 我在应用程序中使用Log4j。放置在classpath中的Jar中。该配置文件正在使用中,并且在大多数情况下都可以正常工作。 但是有时,生成的日志记录语句与配置文件不同。 我的理解是,这是因为属性文件是从类路径中获取的。不管第一个属性文件是什么,都由log4j获取和使用。因此,有时我们得到的日志记录语句与属性文件中配置的语句不同。 如果上述原因属实,那么我认为,我们需要通过以下方式之一