11

我正在使用 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-jar-plugin、maven-surefire-plugin 和 maven-resources-plugin 等 maven 插件尝试了很多东西,但我无法让它工作......

在此先感谢您的帮助!

4

2 回答 2

15

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

首先,我将配置文件夹添加到类路径:

<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
  • 其他依赖特定资源的库(我不会争论,但我发现它......不是很好)可以毫无问题地加载它们的资源。

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

于 2014-11-03T17:32:26.933 回答
2

正如我在评论中提到的 - 看起来您只想将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>
于 2014-10-31T12:27:47.413 回答