【问题标题】:Directory for external files in the standard maven directory layout标准 Maven 目录布局中的外部文件目录
【发布时间】:2017-12-05 19:20:06
【问题描述】:

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

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

如果文件不在 jar 中(称为 external 文件),我们使用new FileInputStream()

如果我理解正确,resourceexternal 文件之间的区别是因为前者是应用程序正常启动和运行所必需的(因此打包放入可执行 jar - 不应修改),后者是相当可选的,可能由用户提供,也可能不提供。

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

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

到目前为止,我已经看到 src/main/webapp(它似乎不适合桌面应用程序)和 src/main/conf(它似乎不再使用,而且除了 external 文件可能是不同类型的 - 不仅是文本)。

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

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

【问题讨论】:

  • 发行版是否像压缩包一样打包成zip格式?
  • 是的,我打算将可执行 jar 和 external 文件打包到一个 zip 中。
  • 您引用的页面上没有的所有内容都不是“标准”的一部分。任何其他位置都是某些插件建议的常规文件夹的纯粹偏好。因为这个问题主要是基于意见的,或者类似于“推荐工具/库/Maven插件”,不幸的是,这两个问题都使这个问题在 Stackoverflow 上偏离了主题。
  • 所以最好创建一个单独的模块,可能称为dist 并将您需要的文件放入您喜欢的目录中。你可以使用 maven-assembly-plugin 和 appassembler-maven-plugin 的组合...

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这完全不是 maven 的设计初衷。

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 2011-06-03
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      相关资源
      最近更新 更多