在我的插件中,de.support.help是plugin.properties文件。 这些属性文件包含首选项页面的字符串。
我想为不同的客户使用此插件,但客户名称在属性文件中。
我想使用eclipse片段机制修补属性文件。就我而言,片段插件可以在运行时修补相应的插件。
我在plugin de.support.help中有plugin.properties文件,其中包含行
plugin.name = Copyright XYZ
我确实有fragemt de.support.help.fragment,其中包含带行的文件plugin.properties
plugin.name = Copyright ABC
我希望在运行时显示字符串“Copyright ABC”,但事实并非如此。我很久以前就用java类测试了它,我记得他正在工作。片段中的java代码放在原始插件中。
你有任何想法处理这件事吗?或者我是否误解了片段机制?
由于
修改
当我从de.support.help插件中删除plugin.properties文件时,它按预期工作。片段文件被复制到插件目录中并在运行时使用。
或者我必须修补somce eclipse类Can_fragments_be_used_to_patch_a_plug
答案 0 :(得分:1)
根据How to Internationalize your Eclipse Plug-In文章
插件片段为其目标插件提供了附加功能 在运行时,这些插件贡献与所有依赖片段合并。
这些贡献可以包括代码贡献和与插件相关的资源的贡献,例如属性和HTML文件。
换句话说,插件可以通过插件的类加载器访问片段的内容。
Eclipse Platform以一种方式合并插件片段,片段中的运行时元素会增加原始目标插件。
不会以任何方式移动,删除或修改目标插件。由于片段的资源是由类加载器定位的,因此插件开发人员无需知道是否从插件的JAR文件或其片段的JAR文件中加载了资源。
我怀疑classLoader在plugin.name
片段之前的de.support.help
插件中检测到de.support.help.fragment
。
此时,我不确定是否可以这样做,因为之前已尝试过(Eclipse CheckStyle plugin),但没有取得多大成功。
答案 1 :(得分:1)
我实施的解决方案就像
首先查找特殊片段属性文件,然后查找默认属性文件。
代码是(捆绑名称已更改)
public final class FrameworkMessages {
private static final String BUNDLE_NAME = "de.rts.messages"; //$NON-NLS-1$
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private static final String BUNDLE_FRAGMENT_NAME = "de.rts.fragment"; //$NON-NLS-1$
private FrameworkMessages() {
}
public static String getString(String key) {
try {
return ResourceBundle.getBundle(BUNDLE_FRAGMENT_NAME).getString(key);
} catch (MissingResourceException e) {
// Use messages in this plugin when no external fragment files can found
}
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
public static String getString(String pKey, Object[] pArgument) {
try {
return MessageFormat.format(RESOURCE_BUNDLE.getString(pKey), pArgument);
} catch (MissingResourceException e) {
return '!' + pKey + '!';
}
}
}
答案 2 :(得分:1)
您无法使用片段替换文件内容 - 仅添加其他文件。对于类,属性文件,图像......都是如此。
有几种标准方法可以解决这个问题:
我更喜欢最后一个解决方案,因为这也允许在替代算法和不属于.properties文件的其他东西之间做出选择......