设置Java源文件夹srping springboot maven源文件夹

只有文件夹是源文件夹(及编译得时候会编译到输出文件夹得)才可以用
classloader得相对路径来获取文件得绝对路径
怎么设置呢:
eclipse
在这里插入图片描述

右键config文件夹选择BuildPath中的Use as Source Folder即可!

IDEA设置
在这里插入图片描述
或者
在这里插入图片描述
按快捷键Ctrl+Alt+Shift+S打开Project Structure,点击Moudles,找到刚才创建的文件夹,右键,选择Sources文件夹变成蓝色,设置完成。或者通过点击下图箭头所指的Marks as Sources来设置。当然,有些朋友可能已经看到旁边的快捷键Alt+S了,三种方法效果是一样的。
下面内容摘抄自极客学院的Eclipse 的 Java Web 项目环境搭建

Sources 一般用于标注类似 src 这种可编译目录。有时候我们不单单项目的 src 目录要可编译,还有其他一些特别的目录也要作为可编译的目录,就需要对该目录进行此标注。只有 Sources 这种可编译目录才可以新建 Java 类和包,这一点需要牢记。
Tests 一般用于标注可编译的单元测试目录。在规范的 maven 项目结构中,顶级目录是 src,maven 的 src 我们是不会设置为 Sources 的,而是在其子目录 main 目录下的 java 目录,我们会设置为 Sources。而单元测试的目录是 src - test - java,这里的 java 目录我们就会设置为 Tests,表示该目录是作为可编译的单元测试目录。一般这个和后面几个我们都是在 maven 项目下进行配置的,但是我这里还是会先说说。从这一点我们也可以看出 IntelliJ IDEA 对 maven 项目的支持是比较彻底的。
Resources 一般用于标注资源文件目录。在 maven 项目下,资源目录是单独划分出来的,其目录为:src - main -resources,这里的 resources 目录我们就会设置为 Resources,表示该目录是作为资源目录。资源目录下的文件是会被编译到输出目录下的。
Test Resources 一般用于标注单元测试的资源文件目录。在 maven 项目下,单元测试的资源目录是单独划分出来的,其目录为:src - test -resources,这里的 resources 目录我们就会设置为 Test Resources,表示该目录是作为单元测试的资源目录。资源目录下的文件是会被编译到输出目录下的。
Excluded 一般用于标注排除目录。被排除的目录不会被 IntelliJ IDEA 创建索引,相当于被 IntelliJ IDEA 废弃,该目录下的代码文件是不具备代码检查和智能提示等常规代码功能。
通过上面的介绍,我们知道对于非 maven 项目我们只要会设置 src 即可。

听过上面设置,在源文件夹下面得文件都可以通过classloader来获取绝对路径,这也是spring通过类似与classpath:****.xml这种方式可以获取到文件得输入流得原因
参考srping ResourceUtils

import java.net.URL;

public class Test {
    public static void main(String[] args) {
        ClassLoader cl = getDefaultClassLoader();
        URL url1= cl.getResource("asds.xml");
        URL url2= ClassLoader.getSystemResource("asds.xml");
        URL url = cl != null ? cl.getResource("com/oracle/deploy/update/UpdateCheck.class") : ClassLoader.getSystemResource("com/oracle/deploy/update/UpdateCheck.class");
        System.out.println(url);

    }
    public static ClassLoader getDefaultClassLoader() {
        ClassLoader cl = null;

        try {
            cl = Thread.currentThread().getContextClassLoader();
        } catch (Throwable var3) {
            ;
        }

        if (cl == null) {

            if (cl == null) {
                try {
                    cl = ClassLoader.getSystemClassLoader();
                } catch (Throwable var2) {
                    ;
                }
            }
        }

        return cl;
    }
}

在这里插入图片描述

扩展:

、spring boot默认加载文件的路径:

/META-INF/resources/
/resources/
/static/
/public/
我们也可以从spring boot源码也可以看到:

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
“classpath:/META-INF/resources/”,
“classpath:/resources/”,
“classpath:/static/”,
“classpath:/public/” };
2、Classpath含义

存放各种资源配置文件 eg.init.properties log4j.properties struts.xml
存放模板文件 eg.actionerror.ftl
存放class文件对应的是项目开发时的src目录编译文件
总结:这是一个定位资源的入口
一般java项目中 classpath存在与 WEB-INFO/目录。
当我们需要某个class时,系统会自动在CLASSPATH里面搜索,如果是jar,就自动从jar里面查找,如果是普通的目录,则在目录下面按照package进行查找。
但与PATH不同的是,默认的CLASSPATH是不包含当前目录的,这也是CLASSPATH里面要包含一个点的道理了。

Tomcat下的Web应用有两个预置的classpath : WEB-INF/classes 和WEB-INF/lib启动项目,项目就会加载这两个目录里的数据。这是war包的规范.要改变预置的classpath比较麻烦,在Tomcat的配置文件里没有发现类似的配置,要实现自己的classloader才能达到目的。

一个在tomcat中运行的web应用.它的classpath都包括如下目录:
我知道的有:
%tomcat%/lib
web-inf/lib
web-inf/classes
环境变量里的classpath

总结:classpath这是一个定位资源的入口.classpath下 lib的优先级大于classes;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值