2016-07-06 470 views
0

我最近将我的javafx移植到了maven。它启动并正常工作,但我无法弄清楚在哪里放置配置文件夹,以及如何说它的外壳包含它的maven。将项目移植到Maven,在哪里放置config文件夹

之前,我转换的项目到Maven,该结构是这样的:

| -src
| -lib
| -config

现在sructure看起来是这样的:

| -src/main/java/my.super.program
| -src /主/资源/ 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';

如何包含config文件夹并告诉maven使用它?

+0

之后你如何使用'configPath'? – Tunaki

+0

您是否考虑过src \ main \ resources \ config? – vikingsteve

+0

Tunaki:我使用configPath加载(并保存)具有属性的配置。 vikingsteve:请参阅下面的注释。 – Ronon

回答

2

默认情况下,放置在src/main/resources中的所有内容都会添加到构建的jar文件中。或者,您可以创建自己的Maven模块来保存配置。再次,你将不得不把它放在src/main/resources中

如果你决定创建一个保存配置的专用模块,你将不得不将它添加到前一个模块的依赖关系中。最好是编译时依赖(这是范围)。

+0

我将文件夹复制到src/main/resources。包含内容的文件夹现在在target/classes /下创建,并包含config.xml。但是当我运行jfx时:运行什么都不会被复制到target/jfx/app /。 – Ronon

+0

您需要构建jar。没有什么应该在目标/ jfx/app /下面它应该是你的jar文件中的顶层。然后你开始了罐子。 –

+0

他们是一种将config文件夹自动复制到target/jfx/app /的方式吗?这将很好,因为如果我运行jfx:native,config文件夹丢失,但是启动时需要。 – Ronon

-2

我希望这个答案不会让你困惑,如果是的话,可能只是寻求一个更简单的解决方案。


罐子不是存储可变配置的好地方。您只能将默认配置放入jar文件中。一个jar文件是不可写的,所以如果它在jar中,你的程序不能覆盖配置来更新它。

对于需要用户特定配置的应用程序,我倾向于将配置存储在$USER_HOME/.myapp目录中。将文件系统用于配置而不是数据库或Java首选项API的一个优点是可以使用标准文本编辑器轻松查看和编辑配置。

示例代码,以确定一个主目录应用程序的配置:

String configHome = System.getProperty("myapp.home", 
    System.getProperty("user.home") + "/.myapp" 
); 

你可以访问的资源的默认配置出来的jar文件并将其复制到文件的文件系统上。然后用户可以手动编辑文件系统上的文件来配置您的应用程序。或者,您可以提供您为用户创建的自定义UI,以修改文件中的信息。

这种方法的一个例子是在这个OsiamHome类中,这是我所见过的为Java应用程序设置配置的最好方法之一(这是一个服务器应用程序,但一般原则可以用于客户端应用程序) 。 osiam引用是一个Spring应用程序,因此它受益于Spring提供的一些配置支持,特别是PathMatchingResourcePatternResolver,它有助于递归搜索jar以查找应用程序的所有默认配置资源。

但是,您可能不需要基于Spring的方法提供的附加功能。相反,您可以仅使用默认配置中的所有文件的代码列表,并将这些文件放在源树中的/resources/config目录中。构建过程会将默认配置复制到您的jar文件中进行部署。当应用程序运行时,如果文件系统上的config目录不存在,应用程序可以从jar文件中读取默认配置资源,并将配置资源复制到文件系统上的文件中。然后可以根据需要修改和更改配置文件。

你有一些其他的选择来管理你的应用程序罐子外的配置是:

  1. 放置在一个数据库中的配置信息或
  2. 使用Java preferences API
  3. 使用的包装系统,例如rpm或(可能)javapackager工具或javafx maven plugin,它们将默认配置捆绑到本地部署包中。本机操作系统部署软件可以提取配置并将其复制到您指定的位置。通常,此位置将是操作系统的标准配置位置,例如Linux系统配置中的/etc/myapp或用户特定配置的$USER_HOME/.myapp
+0

我对你投票,因为你没有回答这个问题,而是把它变成另一个问题。他的问题是将配置放在maven项目中的位置,而不是“配置蓝图是什么”。 –

+0

大概你是正确的,倒票是好的,这个问题读我不同。 – jewelsea