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

时间:2017-12-05 19:20:06

标签: java maven gradle desktop-application project-structure

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

如果文件被打包到jar中(称之为 resource 文件),我们会通过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?或者也许maintest旁边应该有另一个源目录?

我会对任何建议表示感谢!

2 个答案:

答案 0 :(得分:0)

因为它是一个外部文件,它不能在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>

答案 1 :(得分:0)

这不是maven的目的。

然而,有一个插件旨在使部署程序集具有可执行jar及其包装程序,称为appassembler,我们用它来执行此操作。它将您称为外部文件的内容视为配置文件,可在src/main/config

中找到

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