当前位置: 首页 > 知识库问答 >
问题:

从jar内部的类路径加载资源

闻枫
2023-03-14

我正在尝试将资源csv文件传递到我的Sprint Boot应用程序使用的jar中。尽管方法获取的资源参数=ReactiveWebContext资源[src/main/Resources/file.csv],但我总是得到该文件不存在的响应

>

  • 在我的项目中,文件位于src/main/resources/file中。csv
  • 正在应用中。属性,我定义:

    file.csv.path=classpath*:file.csv
    

    在config类中:

    @Configuration
    @PropertySources({
    @PropertySource(value = "classpath:application.properties", ignoreResourceNotFound = 
     true)
    })
    public class BookConfiguration {
    }
    

    在内部jar:Config类中:

    @Configuration
    @Import({BoleroConfiguration.class})
    public class BoleroTestingInfraConfiguration {
    
    @Bean
    @ConditionalOnMissingBean
    public FileProvider fileProvider(@Value("${file.csv.path}") Resource fileResource) throws 
    IOException {
        return new TestingProvider(fileResource);
    }
    

    TestingProvider.class

    public class TestingProvider {
    
     private final Map<String, Set<Book>> idToBook;
    
     public TestingProvider(Resource fileResource) throws IOException {
       idToBook = getBooks(fileResource);
     }
    
     public Map<String, Set<Book>> getBooks(Resource fileResource) {
        if (fileResource == null || !fileResource.exists() ||
            !fileResource.getFile().exists() || !fileResource.getFile().isFile()) {
        return Optional.empty();
        }
    
     ....
     }
    }
    

    多谢你的帮忙

  • 共有1个答案

    颛孙英才
    2023-03-14

    1) 指定的路径不正确。它不应该是classpath*:文件。csv,但类路径:file。csv。

    2) 通常在JAR中没有src/main/resources/file。csv。文件src/main/resources/file。csv仅存在于源代码中。路径src/main/resources对应于JAR的根级别。因此,文件文件。csv将位于JAR的根级别。

     类似资料:
    • 问题内容: 在Java中,您可以使用相同的API,但使用不同的URL协议来加载各种资源: 这很好地将资源的实际加载与需要资源的应用程序分离开来,并且由于URL只是一个字符串,因此资源加载也很容易配置。 是否有使用当前类加载器加载资源的协议?这类似于Jar协议,除了我不需要知道资源来自哪个jar文件或类文件夹。 我当然可以使用来做到这一点,但这需要我使用不同的API,因此需要对现有代码进行更改。我希

    • 问题内容: 以下是一些代码片段,这些片段指示我目前正在尝试什么,但是它不可靠。原则上,我认为因为您只能注册一次协议处理程序,偶尔其他库可能会先这样做。 xml-catalog.xml包含: 显然-xsd文件位于类路径中的正确位置。 问题答案: 解析器使用以下最小代码集来正常运行: 您可以选择将其指定为JVM参数: 该班是实现如下: 在请求资源时,使用正斜杠()很重要,这已由以下 堆栈溢出 问题回答

    • 在使用Maven捆绑JAR文件中的资源时,我有一种感觉,我错过了一些关键的东西。我的目录结构是标准的Maven结构(即\src\main\java,\src\main\Resources)。 使用IDE时,我将资源文件引用为\main\resources\images\blah。。。它工作得很好,但当Maven捆绑JAR文件时,它会将路径放在相对于根的位置(“\ images\blah”),因此没

    • 问题内容: 当使用并提供一个相当通用的资源名称(如)时,Java可能会从CLASSPATH前面列出的另一个JAR文件中加载资源,但可能与我的应用程序完全无关。有没有一种方法可以强制ClassLoader 首先 尝试从我的课程所在的同一JAR文件中加载资源,并且只有在未找到的情况下,才可以在CLASSPATH上查找其他JAR? 问题答案: 另外,如果您知道文件所在的确切jar,则可以使用JarURL

    • 问题内容: 我有一个遵循标准目录布局的项目设置(虽然未使用Maven): 本机DLL位于资源文件夹中,而源位于Java文件夹中。resources文件夹是Java类路径的成员。 我现在想加载DLL,而不必设置JRE 选项或设置变量,以便可以通过简单的双击来启动生成的jar文件。 运行jar文件时是否可以将资源文件夹添加到库搜索路径而无需进行其他配置?例如,设置与清单中的相似? 问题答案: 直到今天

    • 在运行jar文件时,有没有可能将资源文件夹添加到库搜索路径中,而不必做额外的配置?例如。使用与清单中的类似的设置?