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

标签 java maven gradle desktop-application project-structure

在 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/assetssrc/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/

相关文章:

java - 如何在 Spring-data rest 中更新引用对象?

java - 如何为 Java 应用程序调试 C++ dll

java - 声明中的Android AsyncTask错误

java - Jetty 11 不检测 Jakarta Servlets

java - 将 JNI 库添加到本地 Maven 存储库

jenkins - 使用带有命令行 SDK 的 Android Studio 2.2 CMake 支持

java - 将 JButton 传递给 Utility 类。可以接受吗?

java - 当 pitest 找不到测试类时

android - 如何在Android Studio中更改默认语言(国际非编程)

gradle - 测试套件/GradleRunner : How to use a proxy?