标准 Maven 目录布局中的外部文件目录

Directory for external files in the standard maven directory layout

在 Java 中,我们有两种不同的方法将数据加载到应用程序中。

如果一个文件被打包到 jar 中(称之为 resource 文件)我们通过 Class.getResourceAsStream() 方法得到它的 InputStream

如果文件不在 jar 中(称之为 外部 文件)我们使用 new FileInputStream().

如果我理解正确,资源外部文件之间的区别是因为应用程序需要前者启动和 运行 正确(因此打包到可执行 jar - 不应修改),后者是可选的,用户可能提供也可能不提供。

the standard maven directory layout 中,我们将 resource 文件放在 src/main/resources 目录中,以便在构建项目时将它们包含在 jar 中。 但我不知道 外部 文件的正确目录是什么。

在我的应用程序的分布式版本中,我想提供一组默认的 外部 文件,因此我需要将它们放在项目结构中的某个位置。最佳位置是什么?

到目前为止,我已经看到 src/main/webapp(这似乎不适合桌面应用程序)和 src/main/conf(这似乎已不再使用,此外 外部 文件可能属于不同类型 - 不仅仅是文本)。

src/main/assetssrc/main/data 这样的自定义目录?或者 maintest 旁边应该有另一个源目录?

如有任何建议,我将不胜感激!

因为是外部文件,不能放在src下,可以放在(例如)static_content下(POM.xml旁边的一个文件夹),然后把这个加进去你的 POM

<build>
    <plugins>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>
                            target/static_content/csvs
                        </outputDirectory>
                        <resources>
                            <resource>
                               <directory>static_content/csvs</directory>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这完全不是 maven 设计的目的。

但是,有一个插件旨在使用可执行 jar 及其包装器制作部署程序集,我们使用它来执行此操作。它将您所说的外部文件视为配置文件,这些文件位于 src/main/config.

参见 http://www.mojohaus.org/appassembler/appassembler-maven-plugin/