У меня есть приложение RCP, которое использует обновление без заголовка с репозиторием p2, написанное в eclipse 3.6.После принятия решения о переходе на Eclipse 3.7 оказалось, что мой обходной путь не будет работать, так как некоторые классы больше не присутствуют в 3.7.В чем проблема в 3.6?
Проблема в Eclipse 3.6: Приложение проверяет наличие обновлений перед запуском основного плагина.Он пытается подключиться к хранилищу p2.Если есть подключение к нему, он ищет обновления, если они есть, обновления, если нет, он ничего не говорит об обновлении и продолжить.Если нет соединения, было исключение, которое находится глубоко в среде равноденствия / затмения, которое было обработано платформой, и оно нам никогда не показывается, поэтому приложение не может сказать, есть ли соединение или нет, в результате оно говорит, что естьобновлять нечего.
Решение: Через несколько дней, потратив на это решения, я нашел обходной путь для этого.Решением было создание класса для проверки «Состояние» хранилища, например, есть ли у меня связь с ним или нет.Вот мой класс:
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.
Де-нибудь кто-нибудь знает что-нибудь связанное с этой проблемой?Есть ли решение для решения в самой версии 3.6, или они решили заменить этот класс какой-либо подобной функциональностью?Или, если у кого-то есть идеи по поводу другого решения этой проблемы?
Спасибо за продвижение.