2

情况

我开发了一个 Eclipse RCP 应用程序。此应用程序可以安装在 Windows 和 Linux 系统上。

如果此应用程序以管理员模式 (Windows) 或由超级用户 (Linux) 安装,则该应用程序通常安装在写保护的共享安装目录中。

  • 在 Windows 上,我们的产品安装程序始终以管理员模式运行。默认安装目录是(写保护的)C:\Program Files\MyProduct
  • 在 Linux 上,安装程序可以由普通用户和超级用户运行。对于超级用户,默认安装目录是(也是写保护的)/opt/MyProduct

这就是 Eclipse 本身所说的共享安装

显然,运行应用程序的普通用户无权修改此目录。因此,诸如更改的配置数据或自动更新的插件之类的运行时数据被写入用户特定的私有配置区域

  • 在 Windows 上,这默认为$USERPROFILE\.eclipse\.
  • 在 Linux 上,这也默认为~/.eclipse/

问题

默认情况下,其中的私有目录.eclipse有一个看似随机的名称:

.eclipse/1410846118

如果我添加.eclipseproduct元数据文件,默认行为会发生变化。该文件的内容在此论坛帖子中进行了描述:

# FILE:
name=MyProduct
id=com.mycompany.myproduct.gui.product
version=1.8.17

这将产生一个具有以下名称的私有目录:

.eclipse/com.mycompany.myproduct.gui.product_1.8.17_1410846118/

这意味着尽管现在使用了产品 ID 和版本,但仍然存在相同的看似随机的数字作为后缀。

我的问题很简单:这个数字是多少,我该如何计算?

安装后Eclipse似乎可以计算出来。但是,我似乎没有在共享安装的任何文件中找到它

sudo find /opt/MyProduct -name '*' | xargs grep -e '1410846118'
4

1 回答 1

2

这个的代码似乎在org.eclipse.core.runtime.adaptor.LocationManager. .eclipseproduct这会在安装目录中调用的文件中查找产品 ID 。如果该文件不存在,它将使用安装目录路径的哈希码,这大概就是您所看到的。

所以我认为你需要一个.eclipseproduct文件。有关更多信息,请参阅在构建期间定义 .eclipseproduct 。

编辑:

即使使用产品文件,仍然会附加哈希码。使用以下方法计算哈希:

File installDir = path of install directory from osgi.install.area
int hashCode;
try {
    hashCode = installDir.getCanonicalPath().hashCode();
} catch (IOException ioe) {
    // fall back to absolute path
    hashCode = installDir.getAbsolutePath().hashCode();
}
if (hashCode < 0)
    hashCode = -(hashCode);
String installDirHash = String.valueOf(hashCode);
于 2013-09-02T11:00:15.873 回答