将项目迁移到Maven,配置文件夹放在哪里
Migrated project to Maven, where to put config folder
我最近将我的 javafx 迁移到了 maven。它启动并工作正常,但我不知道将配置文件夹放在哪里以及如何说 Maven shell 包含它。
在我将项目转换为 maven 之前,结构如下所示:
|-src
|-lib
|-config
现在的结构是这样的:
|-src/main/java/my.super.program
|-src/main/resources/my.super.program
|-lib
|-config
我试过
<resource>
<directory>config</directory>
<includes>
<include>*.xml</include>
</includes>
</resource>
但这没有奏效。
在 main.java 中,我声明了所需的配置文件。例如:
private final String configPath = 'config/config.xml';
private final String accountPath = 'config/account.xml';
如何包含配置文件夹并告诉 maven 使用它?
默认情况下,放置在 src/main/resources 中的所有内容都会添加到构建的 jar 文件中。或者,您可以创建自己的 maven 模块来保存配置。同样,您必须将其放在 src/main/resources
下
如果您决定创建一个包含配置的专用模块,您必须将其添加到前一个模块的依赖项中。最好是编译时依赖(这是范围)。
我希望这个答案不会让您感到困惑,如果是,可能只是寻求更简单的解决方案。
Jar 不是存储可变配置的好地方。您只能在 jar 文件中放置默认配置。 jar 文件是不可写的,因此如果它在 jar 中,您的程序无法覆盖配置来更新它。
对于需要用户特定配置的应用程序,我倾向于将配置存储在 $USER_HOME/.myapp
目录中。使用文件系统而不是数据库或 java 首选项 API 进行配置的一个优点是可以使用标准文本编辑器轻松查看和编辑配置。
确定应用程序配置主目录的示例代码:
String configHome = System.getProperty("myapp.home",
System.getProperty("user.home") + "/.myapp"
);
您可以从 jar 文件中访问默认配置的资源,并将它们复制到文件系统上的文件中。然后用户可以手动编辑文件系统上的文件来配置您的应用程序。或者,您可以提供您为用户创建的自定义 UI 以修改文件中的信息。
此 OsiamHome class, which is one of the nicest ways I have seen to setup configuration for a Java application (that's a server app, but the general principle could be used for a client application). The osiam reference is a Spring application so that it benefits from some of the configuration support provided by Spring, in particular the PathMatchingResourcePatternResolver 中提供了此方法的示例,它有助于递归搜索 jar 以查找应用程序的所有默认配置资源。
但是,您可能不需要基于 Spring 的方法提供的额外功能。相反,您可以只在默认配置中保留所有文件的代码列表,并将这些文件放在源代码树中的 /resources/config
目录中。构建过程会将默认配置复制到您的 jar 文件中以进行部署。当应用程序为运行时,如果文件系统上的config目录不存在,应用程序可以从你的jar文件中读取默认的配置资源,并将配置资源复制到文件系统上的文件中。然后可以根据需要修改和更改配置文件。
在应用程序 jar 之外管理配置的其他一些选项是:
- 将配置信息放入数据库或
- 使用Java preferences API 或
- 使用打包系统,例如 rpm or (perhaps) the javapackager tool or javafx maven plugin,它将默认配置捆绑到本机部署包中。本机 OS 部署软件可以提取配置并将其复制到您指定的位置。通常,此位置将是 OS 的标准配置位置,例如 Linux 上的
/etc/myapp
用于系统范围配置或 $USER_HOME/.myapp
用于用户特定配置。
我最近将我的 javafx 迁移到了 maven。它启动并工作正常,但我不知道将配置文件夹放在哪里以及如何说 Maven shell 包含它。
在我将项目转换为 maven 之前,结构如下所示:
|-src
|-lib
|-config
现在的结构是这样的:
|-src/main/java/my.super.program
|-src/main/resources/my.super.program
|-lib
|-config
我试过
<resource> <directory>config</directory> <includes> <include>*.xml</include> </includes> </resource>
但这没有奏效。
在 main.java 中,我声明了所需的配置文件。例如:
private final String configPath = 'config/config.xml'; private final String accountPath = 'config/account.xml';
如何包含配置文件夹并告诉 maven 使用它?
默认情况下,放置在 src/main/resources 中的所有内容都会添加到构建的 jar 文件中。或者,您可以创建自己的 maven 模块来保存配置。同样,您必须将其放在 src/main/resources
下如果您决定创建一个包含配置的专用模块,您必须将其添加到前一个模块的依赖项中。最好是编译时依赖(这是范围)。
我希望这个答案不会让您感到困惑,如果是,可能只是寻求更简单的解决方案。
Jar 不是存储可变配置的好地方。您只能在 jar 文件中放置默认配置。 jar 文件是不可写的,因此如果它在 jar 中,您的程序无法覆盖配置来更新它。
对于需要用户特定配置的应用程序,我倾向于将配置存储在 $USER_HOME/.myapp
目录中。使用文件系统而不是数据库或 java 首选项 API 进行配置的一个优点是可以使用标准文本编辑器轻松查看和编辑配置。
确定应用程序配置主目录的示例代码:
String configHome = System.getProperty("myapp.home",
System.getProperty("user.home") + "/.myapp"
);
您可以从 jar 文件中访问默认配置的资源,并将它们复制到文件系统上的文件中。然后用户可以手动编辑文件系统上的文件来配置您的应用程序。或者,您可以提供您为用户创建的自定义 UI 以修改文件中的信息。
此 OsiamHome class, which is one of the nicest ways I have seen to setup configuration for a Java application (that's a server app, but the general principle could be used for a client application). The osiam reference is a Spring application so that it benefits from some of the configuration support provided by Spring, in particular the PathMatchingResourcePatternResolver 中提供了此方法的示例,它有助于递归搜索 jar 以查找应用程序的所有默认配置资源。
但是,您可能不需要基于 Spring 的方法提供的额外功能。相反,您可以只在默认配置中保留所有文件的代码列表,并将这些文件放在源代码树中的 /resources/config
目录中。构建过程会将默认配置复制到您的 jar 文件中以进行部署。当应用程序为运行时,如果文件系统上的config目录不存在,应用程序可以从你的jar文件中读取默认的配置资源,并将配置资源复制到文件系统上的文件中。然后可以根据需要修改和更改配置文件。
在应用程序 jar 之外管理配置的其他一些选项是:
- 将配置信息放入数据库或
- 使用Java preferences API 或
- 使用打包系统,例如 rpm or (perhaps) the javapackager tool or javafx maven plugin,它将默认配置捆绑到本机部署包中。本机 OS 部署软件可以提取配置并将其复制到您指定的位置。通常,此位置将是 OS 的标准配置位置,例如 Linux 上的
/etc/myapp
用于系统范围配置或$USER_HOME/.myapp
用于用户特定配置。