java - 使用 Equinox P2 - 获取有关已安装功能和插件的信息

标签 java eclipse-rcp provisioning p2

我正在使用 Eclipse 3.7 开发一个项目,我需要做一些事情,使用已安装的插件和功能的信息:

我正在使用 P2 配置功能来允许软件更新。

1:我需要获取已安装和当前正在运行的插件和功能的列表。我需要类似“已安装软件”显示的内容,可以通过“帮助>关于>安装详细信息”查看。

注意:我将使用此信息获取有关已安装功能的数据,例如版本号和描述。

2:我需要获取最近安装的软件列表。我需要类似“安装历史”中显示的内容,可以通过“帮助>关于>安装详细信息”查看。

注意:我将使用此信息来添加清除旧安装的功能。类似于“只保留最后五个安装”。

最佳答案

import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.p2.engine.IProfileRegistry;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.IQueryable;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.ui.ProvisioningUI;

...


try {
    ProvisioningUI provisioningUI = ProvisioningUI.getDefaultUI();

    if ( null == provisioningUI ) {
        return;
    }

    String profileId = provisioningUI.getProfileId();

    ProvisioningSession provisioningSession = provisioningUI.getSession();

    if ( null == provisioningSession ) {
        return;
    }

    IQueryable<IInstallableUnit> queryable = ((IProfileRegistry) provisioningSession.getProvisioningAgent().getService(IProfileRegistry.SERVICE_NAME))
            .getProfile( profileId );


    if ( null == queryable ) {
        return;
    }

    // to get the product ID
    //String pId = Platform.getProduct().getId();

    String pId = "feature.1";

    if ( null != queryable ) {
        IQueryResult<IInstallableUnit> iqr = queryable.query( QueryUtil.createIUQuery( pId ), null );

        if ( null != iqr ) {
            Iterator<IInstallableUnit> ius = iqr.iterator();
            if( ius.hasNext() ) {
                IInstallableUnit iu = ius.next();
                Version v = iu.getVersion();

                if ( null != v ) {
                    System.out.println( "ID: " + iu.getId() + " | IU: " + iu.toString() + " | Version: " + v.toString() );
                }
            }
        }
    }
} catch ( Exception e ) {
    System.out.println( e.getStackTrace() );
    return;
}

关于java - 使用 Equinox P2 - 获取有关已安装功能和插件的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078774/

相关文章:

java - 安卓应用程序 : The Cache directory is empty but the device cache indicator shows that it is not empty

c# - 读取从 Java 序列化到 C# 的 BigInteger

java - 对 MockUp 与 Expectations 的优点感到困惑

java - Eclipse RCP 和 RAP 可定制表控件

ios - 无法在设备上安装 ipa

java - 使用 java7 在 Jhipster 上创建应用程序?

java - 如何以编程方式重命名 Eclipse 插件菜单

eclipse - 恢复 Eclipse 工作区

iphone - 将 iPhone 应用程序的临时分发导入 iTunes 时出错

linux - 为什么在使用 Vagrant shell 脚本配置 Ubuntu VM 期间不执行脚本?