Maven:添加外部资源
我正在用maven构建一个可执行的jar文件,这意味着您使用“java -jar file.jar”运行它。Maven:添加外部资源
我想在用户定义的属性(只是一个包含键/值的文件),在开发阶段我把我的“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,但我无法得到它的工作...
在此先感谢您的帮助!
我发现我只需要使用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文件,我添加一个配置文件夹所有我需要的资源文件。
结果是:
- user.properties可以使用的getResourceAsStream加载
- 其他库依赖于特定的资源(我不会说,但我觉得......没有那么好)可以加载他们的资源没有任何问题。
感谢您的帮助,我希望这有助于某个人!
我想要做同样的事情,但首先我需要获取jar文件旁边的configs目录。如何实现这一目标? – SachiDangalla 2018-02-26 08:58:08
我真的不明白你的问题在我的情况下,配置文件没有存储在jar文件(排除在pom.xml文件中)。配置文件的创建和复制必须在部署端进行管理 – GournaySylvain 2018-02-26 09:29:14
是的。我想要一种方法来获取jar外的配置文件夹,而无需手动拷贝或粘贴。你是怎么处理的呢? – SachiDangalla 2018-02-26 09:32:22
正如我在评论中提到的 - 它看起来像你想使用user.properties
文件作为除了你的jar之外的文本文件。如果是这样的话,比使用它更简单 - 包含你的jar文件的目录是在运行时检查的当前目录。这意味着你需要的只是:
properties.load(new FileInputStream("config/user.properties"));
没有试图放在项目classpath上。
如果还有其他工作要做,只需将资源目录中的属性复制到目标以避免手工操作的麻烦。这可以通过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>
我理解你的解决方案,我可以用它来处理我的一些文件,但在我的资源中,我也有一个“hibernate.cfg.xml”和其他一些由我调用的库使用的文件。而这个库只是寻找资源文件(调用_getResourceAsStream_) – GournaySylvain 2014-11-03 16:02:26
user.properties是一个单独的文本文件,您保存在您的jar旁边并希望在运行时读取?因为如果是这样...你可能应该像对待任何其他外部文件一样对待 – Deltharis 2014-10-31 10:19:42
是的,它只是一个单独的文件,但事情是 1-我不知道用户将放置jar和配置文件的位置 2 - I有依赖关系使用的其他资源文件(数据库连接等) – GournaySylvain 2014-10-31 10:26:26
如果你喜欢外面的属性文件,你需要设置类路径指向你的'executon_folder/config /'文件夹,否则你将无法访问你的用户。 properties'。所以一个简单的'java -jar file.jar'将不起作用。 – khmarbaise 2014-10-31 13:57:55