当我在eclipse中创建Maven项目时,我看到创建了两个嵌套目录:src / main / java和src / main / resources。我知道Maven是为src / main / resources设计的,用于非代码文件,但问题是:
java如何知道查看资源文件夹而不是java文件夹以查找this.getClass().getResourceAsStream("...")
的任意文件查找?我可以把一个文件放在java目录中,但是找不到它。是否还有一些东西,而不仅仅是-classpath
用于指示文件的位置?似乎必须存在,否则我可以将任意文件放在java或资源中。
答案 0 :(得分:2)
这是一个关于Maven如何工作的问题,而不是关于Java如何查找文件的问题,但我也会对此进行介绍。
Java $(document).ready(function(){
$('#create-list > button').click(function(){
let toAdd = $('#create-list > div > input[type="text"]').val();
$('ol').append('<li>' + toAdd + '</li>');
});
});
使用CLASSPATH查找类和资源,对于部署的代码,它通常是一组ClassLoader
个文件。类加载器按类路径中列出的顺序搜索.jar
文件,直到找到类/资源。
Maven在.jar
和src/main/java
中拥有源文件的默认设置纯粹是Maven thing,与Java的类/资源加载无关
在构建期间,Maven将编译src/main/resources
中找到的.java
源文件,并将已编译的src/main/java
文件放在.class
中。然后,它会将target/classes
个文件与.class
中找到的所有文件一起打包到src/main/resources
文件中。
生成的.jar
文件包含所有.jar
个文件和资源文件,以及Java将在其中找到它们。
请注意,Maven构建过程会忽略.class
中的非.java
个文件。
如果您进行Maven构建并查看文件,您将自行查看所有这些内容。
答案 1 :(得分:0)
Java从“环境”加载资源,在许多情况下,它使用Classpath中的所有jar来检索资源。 java中的资源加载称为位置无关,因为它与运行代码的地方无关,只需要正确的环境来查找资源。
给定Classpath中的所有jar和路径,java将相对搜索每个音调以查找您指定的资源。您可以使用资源名称指定资源。
ClassLoader 和 Class 以不同方式应用资源名称
ClassLoader中的方法使用给定的String作为名称 没有应用任何绝对/相对转换的资源(参见 类中的方法。名称不应该有前导“/”。 阅读http://www.thinkplexx.com/learn/howto/java/system/java-resource-loading-explained-absolute-and-relative-names-difference-between-classloader-and-class-resource-loading
的更多内容似乎必须有,否则我可以放入任意文件 无论是java还是资源。
是的,您可以将任何位置放在项目中,但是您应该仔细阅读maven标准目录布局的结构,以便将文件放在以下规则中:
https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html