我正在尝试构建Eclipse RCP应用程序,在此过程中,我们尝试将应用程序设置为自动更新。我们试图让它在首选项中自动设置正确的首选项 - >安装/更新 - >自动更新页面。
我已经在plugin_customization.ini文件中为我们的.product设置了我想要的所有首选项(例如org.eclipse.equinox.p2.ui.sdk.scheduler / download = true),几乎所有这些首选项都是工作。但是,一个首选项似乎没有自动设置:这是org.eclipse.equinox.p2.ui.sdk.scheduler / enabled首选项(AutomaticUpdatesPreferencePage上的“自动查找新更新并通知我”复选框)深入研究源代码,我理解为什么它没有正确设置,但我不知道如何绕过它。
这就是为什么它不起作用:在AutomaticUpdatePlugin.start方法的最后一行,它调用
PreferenceInitializer.migratePreferences();
因为它是插件的启动方法,所以在从plugin_customization.ini读取任何首选项之前会发生这种情况。 migratePreferences尝试迁移此首选项,该首选项位于3.4和3.3中的不同位置。在AutomaticUpdatePlugin内部,有一个隐藏的“migrated34Prefs”首选项,它会检查它是否执行了此迁移:此迁移将启用的首选项的值设置为false,因此如果我能以某种方式阻止它执行此迁移(因为我知道将要执行此迁移)不能从3.3或3.4迁移,因为我们只是建立在3.5之上,一切都会正常工作。默认值是通过plugin_customization.ini正确设置的,但实际值仍为false(即如果我在第一次打开RCP后点击该首选项页面上的恢复默认值,则该框从未选中状态变为已选中)。
因为这一切都发生在start方法中,所以我不能简单地在plugin_customization中将migrated34Prefs的值设置为true,因为直到迁移已经发生之后才会读取它。我知道问题是什么,但我不能完全看到最后一步,以便默认情况下启用它。还有其他我可以设置的东西,或其他一些我无法找到的解决方法吗?
答案 0 :(得分:2)
解决方法是直接从您自己的插件访问AutomaticUpdatePlugin的首选项,例如在首选项初始化程序中:
Preferences node = new DefaultScope().getNode(AutomaticUpdatePlugin.PLUGIN_ID);
node.putBoolean(PreferenceConstants.PREF_AUTO_UPDATE_ENABLED, true);