繁体   English   中英

使用类从外部模块加载资源文件

[英]Loading resource file from external module using Class

我在尝试从外部模块的资源文件夹加载资源文件时遇到困难。 我正在使用 IntelliJ,我们的项目是使用 Maven 构建的。

使用模块之前的原始代码是这样的:

getClass().getResourceAsStream(rulesFile)

这现在导致null结果。


模块的结构如下:

client
    - java
        - org.example.client
            - Controller.java

data
    - java
        - ...
    - resources
        - org.example.data.files
            - rulesFile

在模块client

getClass().getResourceAsStream(rulesFile)不起作用。

但是,如果我尝试执行ModuleLayer.boot().findModule("data").get().getResourceAsStream(rulesFile) ,那么它工作正常。

我的问题是,是否可以使rulesFileclient模块内的Controller.java可见,以便可以使用普通的类加载器? 我想避免必须明确指定它来自的模块名称,因为在其他地方使用了从data模块加载文件的类似代码。

我有哪些选项可以避免显式给出模块名称?

我尝试将以下内容添加到data模块文件中,但没有成功:

opens org.example.data.files to client

谢谢您的帮助!

http://maven.apache.org/pom.html#Resources

在您的客户端模块 pom.xml 中添加:

<project>
    ...

    <build>
    ...

        <resources>
            <resource>
                <directory>../data/src/main/resources/org/example/data/files</directory>
                <includes>
                    <include>rulesFile</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

模块的结构如下:

client
    - java
        - org.example.client
            - Controller.java

data
    - java
        - Data.java
    - resources
        - org.example.data.files
            - rulesFile

就目前而言,也许不是最完美的解决方案,但似乎可以从加载data模块从工作时, Class里面data模块。

同样重要的是要注意我也打开了client模块的data资源文件夹。

而不是尝试类似的东西:

Controller.class.getResourceAsStream(rulesFile)

如果你这样做:

Data.class.getResourceAsStream(rulesFile)它有效,这是因为Data.java位于data模块内,而rulesFile驻留在该模块中。

在 Java .ear类型的包工件中,这也会发生在您需要一个模块的类路径以包含另一个模块的地方。 在这种情况下,将必要的模块标记为“想要”模块中的依赖项应该将其合并到“想要”的类路径中。 具体来说,这发生在需要访问ejbs in a ear wars中。

您只需通过工件名称将模块添加到“想要”模块的pom.xml的依赖项部分:

<dependencies>
  <dependency>
    <artifactId>data</artifactId>
  </dependency>
</dependencies

工件的其他属性由您在 Maven 中的父 pom 推断,因此您无需提及versiongroupId Scope 可以被引用为runtime但我认为这可能是默认值。

如果一切顺利,您应该可以只执行getClass().getResourceAsStream(rulesFile)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM