java如何区分java和资源目录?

时间:2017-02-17 06:42:27

标签: java maven

当我在eclipse中创建Maven项目时,我看到创建了两个嵌套目录:src / main / java和src / main / resources。我知道Maven是为src / main / resources设计的,用于非代码文件,但问题是:

java如何知道查看资源文件夹而不是java文件夹以查找this.getClass().getResourceAsStream("...")的任意文件查找?我可以把一个文件放在java目录中,但是找不到它。是否还有一些东西,而不仅仅是-classpath用于指示文件的位置?似乎必须存在,否则我可以将任意文件放在java或资源中。

2 个答案:

答案 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在.jarsrc/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