Maven:添加外部资源

时间:2014-10-31 10:16:23

标签: java maven jar maven-resources-plugin maven-jar-plugin

我正在用maven构建一个可执行jar文件,这意味着你用“java -jar file.jar”运行它。

我想依赖于用户定义的属性(只是一个包含键/值的文件),在开发阶段我将我的“user.properties”文件放在maven / src / main / resources /文件夹中。

我的属性文件加载了:

final Properties p = new Properties();
final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties");
p.load(resource);

现在,我想将该文件保留在JAR之外,并且具有以下内容:

- execution_folder
   |_ file.jar
   |_ config
      |_ user.properties

我用maven插件尝试了很多东西,比如maven-jar-plugin,maven-surefire-plugin和maven-resources-plugin但是我无法让它工作......

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:16)

我只使用maven配置找到了我需要的东西。

首先我将config文件夹添加到类路径中:

<build>
<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
        <archive>
            <manifestEntries>
                <Class-Path>config/</Class-Path>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
</plugins>
</build>

我以与以前相同的方式加载资源:

final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties");
p.load(resource);

如果您想将示例资源文件保存在您的存储库中并将其从构建中删除:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>user.properties</exclude>
                <exclude>conf/hibernate.cfg.xml</exclude>
            </excludes>
        </resource>
    </resources>
</build>

在jar文件旁边,我添加了一个包含我需要的所有资源文件的配置文件夹。

结果是:

  • 可以使用 getResourceAsStream
  • 加载user.properties
  • 其他依赖特定资源的图书馆(我不会争辩,但我觉得......不是那么好)可以毫无问题地加载资源。

感谢您的帮助,我希望有一天它可以帮助某人!

答案 1 :(得分:1)

正如我在评论中提到的那样 - 看起来您希望将user.properties文件简单地用作除了jar之外的文本文件。如果是这种情况,那么比使用它更简单 - 包含jar文件的目录是在运行时检查时的当前目录。这意味着您只需要:

properties.load(new FileInputStream("config/user.properties"));

不试图插入项目类路径。

如果要做其他事情,只需将您的属性从资源目录复制到目标,以避免手动执行此操作的麻烦。这可以通过maven-antrun-plugin实现:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <mkdir dir="${project.build.directory}" />
                            <copy file="${basedir}/src/main/resources/user.properties" tofile="${project.build.directory}/config/user.properties" />
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>