找不到关于如何在不同产品中放置相同 conf 文件的解决方案
Cant find a solution on how to place same conf files in different products
我在 eclipse 中的工作区有一个特定问题。
该项目是一个带有 JavaFx 的 OSGi 项目 UI。有捆绑包,我从这些捆绑包中制作了 3 个功能。我有 2 个产品来自这些功能。一个功能是核心功能,另外两个功能对某些捆绑包有不同的实现。那么我的产品各有两个特点。正如您猜测的那样,product-1 具有核心和 impl-1 功能,product-2 具有核心和 impl-2 功能。
好的,但还没有,更多的解释让我可以问我的问题:)
这些具有不同实现的功能具有不同的工作目录,因为它们需要不同的本机库才能 运行.
这是基本的项目设置:
project
|
+---core
| |
| +---plugin.api
| +---plugin.impl.1
| +---plugin.impl.2
|
+---external
| |
| +---working_dir_1 (only for product 1)
| | | aaaa1.dll
| | | aaaa2.so
| |
| +---working_dir_2 (only for product 2)
| | | bbbb1.dll
| | | bbbb2.dll
| | | bbbb3.so
| | | bbbb4.so
| |
| +---config (shared)
| | +---Database
| | +---Log
| | +---Theme
| | +---conf1
| | +---conf2
| | +---conf3
| | \---conf4
|
+---features
| +---core.feature
| +---core.1.feature
| \---core.2.feature
|
+---products
| +---product.1
| +---product.2
|
+---releng
| +---project.configuration
| \---project.target
|
+---tests
正如您在上面看到的,应用程序可以通过到达父文件夹来使用 conf 文件。在java中就是这样:
System.getProperty("user.dir") + File.separator + ".." + File.separator + CONFIGURATION_FOLDER_NAME;
没关系。我和我团队中的每个人都可以 运行 只需单击一下即可选择产品。我喜欢项目设置。
哦,我添加了 tycho 标签,但从未提及。我们还使用 tycho 来自动构建我们的项目。有了它,我们可以有 4 个产品。赢得每个产品 1 和产品 2 Linux 运行 的机会。在构建和实现产品时,tycho 复制需要的本地库和配置文件。但是当复制配置文件时,第谷将它们放在创建产品的工作目录中。因此应用程序无法找到 conf 文件,因为它在具体化产品的父文件夹中查找 conf 文件。
这就是我现在的问题。当我想用 tycho 构建时,我必须将上面的代码更改为:
System.getProperty("user.dir") + File.separator + CONFIGURATION_FOLDER_NAME;
我该如何解决这个问题?
我们正在 windows 10 上开发,并使用前面提到的 eclipse 和 tycho。
我不想增加配置,因为每次更改两个文件会很麻烦。
我尝试用符号 link 将 conf 文件夹 link 放在工作目录中。它确实有效,但是当每个人都拉动时,links 没有起作用。我猜 windows 上的符号 links 在不同的计算机上不起作用。
我可以更改项目结构,只要能解决问题。
注意:
配置包括可以由非开发人员更改的应用程序级配置(比如只打开一个文件并将 属性 从 true 更改为 false)。这就是为什么我们没有将它们捆绑在一起。如果不是这种情况,则所有捆绑包都将在各自的捆绑资源或片段中具有其相关配置。
您可以将配置放入一个包中,然后添加 Bundle-Shape: dir
然后您可以通过独立于实际位置的包类加载器读取配置文件。
我在 eclipse 中的工作区有一个特定问题。
该项目是一个带有 JavaFx 的 OSGi 项目 UI。有捆绑包,我从这些捆绑包中制作了 3 个功能。我有 2 个产品来自这些功能。一个功能是核心功能,另外两个功能对某些捆绑包有不同的实现。那么我的产品各有两个特点。正如您猜测的那样,product-1 具有核心和 impl-1 功能,product-2 具有核心和 impl-2 功能。
好的,但还没有,更多的解释让我可以问我的问题:) 这些具有不同实现的功能具有不同的工作目录,因为它们需要不同的本机库才能 运行.
这是基本的项目设置:
project
|
+---core
| |
| +---plugin.api
| +---plugin.impl.1
| +---plugin.impl.2
|
+---external
| |
| +---working_dir_1 (only for product 1)
| | | aaaa1.dll
| | | aaaa2.so
| |
| +---working_dir_2 (only for product 2)
| | | bbbb1.dll
| | | bbbb2.dll
| | | bbbb3.so
| | | bbbb4.so
| |
| +---config (shared)
| | +---Database
| | +---Log
| | +---Theme
| | +---conf1
| | +---conf2
| | +---conf3
| | \---conf4
|
+---features
| +---core.feature
| +---core.1.feature
| \---core.2.feature
|
+---products
| +---product.1
| +---product.2
|
+---releng
| +---project.configuration
| \---project.target
|
+---tests
正如您在上面看到的,应用程序可以通过到达父文件夹来使用 conf 文件。在java中就是这样:
System.getProperty("user.dir") + File.separator + ".." + File.separator + CONFIGURATION_FOLDER_NAME;
没关系。我和我团队中的每个人都可以 运行 只需单击一下即可选择产品。我喜欢项目设置。
哦,我添加了 tycho 标签,但从未提及。我们还使用 tycho 来自动构建我们的项目。有了它,我们可以有 4 个产品。赢得每个产品 1 和产品 2 Linux 运行 的机会。在构建和实现产品时,tycho 复制需要的本地库和配置文件。但是当复制配置文件时,第谷将它们放在创建产品的工作目录中。因此应用程序无法找到 conf 文件,因为它在具体化产品的父文件夹中查找 conf 文件。
这就是我现在的问题。当我想用 tycho 构建时,我必须将上面的代码更改为:
System.getProperty("user.dir") + File.separator + CONFIGURATION_FOLDER_NAME;
我该如何解决这个问题? 我们正在 windows 10 上开发,并使用前面提到的 eclipse 和 tycho。
我不想增加配置,因为每次更改两个文件会很麻烦。
我尝试用符号 link 将 conf 文件夹 link 放在工作目录中。它确实有效,但是当每个人都拉动时,links 没有起作用。我猜 windows 上的符号 links 在不同的计算机上不起作用。
我可以更改项目结构,只要能解决问题。
注意: 配置包括可以由非开发人员更改的应用程序级配置(比如只打开一个文件并将 属性 从 true 更改为 false)。这就是为什么我们没有将它们捆绑在一起。如果不是这种情况,则所有捆绑包都将在各自的捆绑资源或片段中具有其相关配置。
您可以将配置放入一个包中,然后添加 Bundle-Shape: dir
然后您可以通过独立于实际位置的包类加载器读取配置文件。