从随附的jar中读取属性文件

时间:2019-04-11 13:07:11

标签: java spring maven module

我正在尝试创建读取属性文件的注释解析器。结构如下:

 - annotationParserModule
    - declaration of interace
    - annotationParser

现在我的应用具有如下结构:

 - main
   - java
   - resources
      - .properties file

我通过Maven包含了commentParserModule,所以如果我没有记错的话,我的项目中会包含jar fire。

但是我需要在annotationParserModule提供的jar之外读取属性文件,这可能吗?如果是这样,实现此目标的正确方法是什么?

感谢帮助。

2 个答案:

答案 0 :(得分:1)

如果您要读取的资源包含在应用程序的类路径中(例如,在jar中,在WEB-INF/lib文件夹中,则是一个-cp传递给java命令的文件夹等等。)您可以使用Class类的getResourceAsStream方法读取文件。

为您的案例提供示例,其中包含以下文件夹:

- main
   - java
   - resources
      - yourconfig.properties

在您的YourAnnotationParser代码中,您可以:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("yourconfig.properties");

如果文件是嵌套的:

- main
   - java
   - resources
      - iamafolder
          - yourconfig.properties

所以:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("iamafolder/yourconfig.properties");

顺便说一句,这是一个非常简单的响应,该代码适用于常见情况,它在幕后所做的工作比“读取jar之外的文件”要复杂得多,但是要完全理解它,您需要寻找Java的方式类加载器和类路径起作用。

如果文件在java类路径之外,则可以使用File类或URL类来读取内容。

答案 1 :(得分:0)

在applicationcontext.xml中,您可以添加bean以从jar中读取属性文件

<bean id="com.mybean"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:/resource.properties</value>
        </list>
    </property>
</bean>

,此ID将是对另一个bean的引用

<bean id="com.mybean1">
    class="com.dependent.jar.classname">
    <property name="properties" ref="com.mybean" />
</bean>