我正在构建一个依赖于某些配置文件的命令行工具。
在开发方面,我将这些文件放在src/main/resources
下,并由getClass().getResourceAsStream("/config-file-name")
访问,效果很好。
我选择maven-assembly-plugin来构建具有所有依赖关系的jar。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.myproject.Scheduler</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
配置文件都包装在jar中,但我想将它们分开。
所以,我添加以下配置,
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>conf.properties</include>
</includes>
<filtering>true</filtering>
<excludes>
<exclude></exclude>
</excludes>
<targetPath>..</targetPath>
</resource>
</resources>
完成此操作后,配置文件与jar一起使用,而不是包装在jar中。
但我的代码现在无法访问这些文件。
我是否需要更改我在代码中访问文件的方式?
或者我是否应该将这些文件放在src/main/resources/
中,任何替代方案?
如果有人知道,请帮忙。
感谢。
更新:最后,我放弃使用maven资源文件,相反,我默认将文件路径设置为与jar相同的路径,除Eclipse抱怨外,一切正常。
由于我想将配置文件从jar中移出,并且不希望它在target / classes文件夹中,所以我使用<targetPath>..</targetPath>
将配置文件移动到与jar文件相同的目录。
当我重新生成eclipse项目设置时,Eclipse说:无法在输出文件夹“project / target”中嵌套输出文件夹“project / target / test-classes”。
有人帮帮我吗?
答案 0 :(得分:0)
您的应用程序无法访问配置文件,因为它不再位于其类路径中。
如果要将配置文件与应用程序的其余部分分开,可能需要查看assembly format。您可能希望使用bin而不是jar-with-dependencies,尽管它在分发和使用方面存在挑战。
答案 1 :(得分:0)
根据属性文件的复杂程度,您可以使用资源插件过滤器功能根据maven配置文件更改值。例如,如果您想拥有一个名为location的属性,您可以定义开发和生产配置文件,然后将值设置为pom中的maven属性(如果您在maven 2上,则设置为profiles.xml): / p>
<properties>
<my.location>the_real_value</my.location>
</properties>
然后在属性文件中执行此操作:
location=${my.location}
请确保在您的pom中设置过滤,如下所示:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
构建时,如果查看目标目录并查看该属性文件,则应该看到替换的正确值。
答案 2 :(得分:0)
我终于放弃使用maven资源文件,默认情况下将文件路径设置为与jar相同的路径,除Eclipse抱怨外,一切正常。
(因为我想将配置文件从jar中移出,并且不希望它在target / classes文件夹中,所以我使用..将配置文件移动到与jar文件相同的目录。当我重新生成eclipse项目设置,Eclipse说:无法在输出文件夹“project / target”中嵌套输出文件夹“project / target / test-classes”。)
直到现在我才找到解决方案,似乎是一个日食错误。现在,我放弃Eclipse,并改为IntelliJ IDEA,它是一个非常好的IDE,特别是与Maven完美集成。我将避免任何机会将eclipse用于任何maven项目。