P2 Garbage Collector не удаляет плагины - PullRequest
0 голосов
/ 14 марта 2019

У меня есть приложение RAP, и я использую API операций P2 (org.eclipse.equinox.p2.operations) для установки компонентов удаления в зависимости от определенных аргументов командной строки.

Функции установлены и удаленыправильно, но плагины удаленной функции не удаляются.

После некоторых поисков я увидел ответ на мой вопрос: Equinox / p2 / FAQ

Я пытаюсь установить функцию следующим образом:

myRapApp -install -profileProperties org.eclipse.update.install.features=true 

завершите работу системы, затем перезапустите ее и удалите функцию, убедившись, что сборщик мусора p2 явно вызывается.См. Код ниже:

IQueryResult<IInstallableUnit> queryResult =  getInstalledIUfromID(rootIdToUninstall);

if (queryResult.isEmpty()) {
    log.error("Installable unit {} is not installed.", rootIdToUninstall);
    return false;
}

// --- If found, trigger an UninstallOperation ---------------
UninstallOperation uninstallOperation = new UninstallOperation(this.provisioningSession, queryResult.toSet());
IStatus result = this.performOperation(uninstallOperation);
if (!result.isOK()) {
    String childStatusStr = null;
    for ( IStatus children : result.getChildren()) {
        childStatusStr += "\t" + children.toString() + LINE_SEP;
    }
    log.error("Fail to uninstall {}: {} {} {}", rootIdToUninstall, result.getMessage(), LINE_SEP, childStatusStr);
    if ( result.getException() != null ) {
        log.error("Uninstalling exception:", result.getException());
    }
} else {
    IProfileRegistry profileRegistry = (IProfileRegistry) this.provisioningAgent.getService(IProfileRegistry.SERVICE_NAME);
    IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);

    GarbageCollector gc = (GarbageCollector)  this.provisioningAgent.getService(GarbageCollector.SERVICE_NAME);
    gc.runGC(profile);
}

К сожалению, плагины все еще остаются после удаления этой функции.

Как я могу убедиться, что я указываю "org.eclipse.update.install.features = true "правильно, похоже, что -profileProperties org.eclipse.update.install.features = true не помогает.

Более того, есть ли способ установить это свойство в значение true,по умолчанию?

Может ли быть, что я все еще что-то упускаю?

[Редактировать 1] После некоторого устранения неполадок я обнаружил, что продукты, материализуемые с помощью Tycho, могут быть настроены для обеспечения свойства профиля org.eclipse.update.install.features установлен в true.Фактически, согласно конфигурации Tycho, которая является настройкой по умолчанию.

1 Ответ

0 голосов
/ 16 марта 2019

Я получил объяснение этой проблемы на форуме Eclipse.

Проблема в том, что каждый раз, когда вы выполняете операцию, p2 создает новую версию профиля. Таким образом, когда GC вызывался сразу после удаления, он работал с текущей версией профиля, а не с обновленной операцией удаления.

Теперь при явном вызове GC при запуске он очищает оставленные плагины.

...