我有使用 Eclipse 3.6 编写的带有 p2 存储库的无头更新的 RCP 应用程序。在决定迁移到 Eclipse 3.7 之后,结果发现我的工作区不起作用,因为 3.7 中不再存在某些类。3.6 中的问题是什么?
Eclipse 3.6 中的问题:应用程序在核心插件启动之前检查更新。它尝试连接到 p2 存储库。如果有连接,它会搜索更新,如果有,则更新,如果没有,它什么也不说更新并继续。如果没有连接,则在 Equinox/Eclipse 框架深处存在异常,该异常已由框架处理,并且从未出现在我们面前,因此应用程序无法说出是否有连接,结果它说有没有什么可更新的。
解决方案:在为此加快解决方案几天后,我找到了一个解决方法。解决方案是创建一个类来验证存储库的“状态”,例如我是否连接到它。这是我的课:
public class RepositoryValidator {
private final static String urlExtension = "artifacts.jar"; //$NON-NLS-1$
private static RepositoryValidator instance;
private RepositoryValidator() {
}
public static RepositoryValidator sharedInstance() {
if (instance == null) {
instance = new RepositoryValidator();
}
return instance;
}
public IStatus checkRepositoryStatus(URI repoURI) {
try {
URI checkURI = new URI(repoURI.toString() + urlExtension);
ILog logger = Activator.getDefault().getLog();
logger.log(new Status(IStatus.INFO, Activator.PLUGIN_ID,
"CHECK REPOSITORY \"artifacts.jar\" - " //$NON-NLS-1$
+ checkURI.toString()));
long result = RepositoryTransport.getInstance().getLastModified(
checkURI, new NullProgressMonitor());
if (result == 0) {
logger.log(new Status(IStatus.INFO, Activator.PLUGIN_ID,
"RESULT FROM CHECK - " + result)); //$NON-NLS-1$
return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
"WRONG SERVER RESPONCE!!!"); //$NON-NLS-1$
}
} catch (Exception e) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
"CONNECTION EXCEPTION", e); //$NON-NLS-1$
}
return new Status(IStatus.OK, Activator.PLUGIN_ID,
"REPOSITORY IS REACHABLE AND OK!!!"); //$NON-NLS-1$
}
}
我基本上在这里做的是检查artifacts.jar何时被修改,如果我可以访问它我有连接,如果不是我没有。
Eclipse 3.7 中的问题:在 Eclipse 3.6 的解决方案中,我使用了 RepositoryTransport 类,该类在 3.7 中不再可用。我试图找出这个类是否已被其他类取代,或者在可用类中是否有一种方法可以达到类似的功能。我找不到与主题相关的任何内容,也找不到与课程相关的内容,也找不到 3.6 中问题的解决方案。
Deos有人知道与此问题有关的任何事情吗?3.6 本身是否有解决方案,或者他们决定用任何类似的功能替换这个类?或者,如果有人对此问题有其他解决方法的想法?
预先感谢。