在 Java 中,我们有两种不同的方法将数据加载到应用程序中。
如果一个文件被打包到 jar 中(称为资源文件),我们得到它的 InputStream
通过 Class.getResourceAsStream()
方法。
如果文件不在 jar 中(称为外部文件),我们使用 new FileInputStream()
.
如果我理解正确,资源文件和外部文件之间的区别是由于前者是应用程序启动和正常运行所必需的(因此打包到可执行 jar 中 - 不应修改),而后者是可选的并且可能由用户提供,也可能不由用户提供。
在 the standard maven directory layout我们将资源文件放在 src/main/resources
目录,以便在构建项目时将它们包含在 jar 中。 但我无法弄清楚外部文件的正确目录是什么。
在我的应用程序的分布式版本中,我想提供一组默认的外部文件,因此我需要将它们放在项目结构中的某个位置。最佳位置是什么?
到目前为止,我已经看到了src/main/webapp
(这似乎不适合桌面应用程序)和 src/main/conf
(这似乎不再使用,而且外部文件可能是不同的类型 - 不仅是文本)。
自定义目录,如 src/main/assets
或 src/main/data
?或者,main
旁边应该有另一个源目录。和 test
?
我将不胜感激任何建议!
最佳答案
因为它是一个外部文件,所以它不能在 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>
关于java - 标准 Maven 目录布局中的外部文件目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47661116/