我正在构建一个命令行工具,它依赖于一些配置文件。

在开发上,我把这些文件放在 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"。

有人帮我吗?

有帮助吗?

解决方案 3

我终于放弃使用maven资源文件,默认情况下将文件路径设置为与jar相同的路径,除了Eclipse抱怨之外,一切都很好。

(因为我想将配置文件移出jar,并且不希望它在target/classes文件夹中,所以我使用。.将配置文件移动到与jar文件相同的目录。当我重新生成eclipse项目设置时,Eclipse说:无法在输出文件夹"project/target"内嵌套输出文件夹"project/target/test-classes"。)

直到现在我还没有找到解决方案,似乎是一个eclipse错误。

现在,我放弃了Eclipse,改为IntelliJ IDEA,这是一个相当不错的IDE,特别是与Maven完美集成。我会避免任何将eclipse用于任何maven项目的机会。

其他提示

您的应用程序无法访问配置文件,因为它不再位于其类路径中。

如果您想将配置文件与应用程序的其余部分分开,您可能需要重新查看您的 装配格式.您可能希望使用bin而不是jar-with-dependencies,尽管它在分发和使用方面存在挑战。

根据属性文件的复杂程度,您可以使用资源插件过滤器功能根据maven配置文件更改值。例如,如果你想拥有一个名为location的属性,你可以定义一个开发和生产配置文件,然后在pom(或配置文件)中将值设置为maven属性。xml如果你在maven2):

<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>

构建时,如果您查看目标目录并查看该属性文件,则应该看到替换的正确值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top