【问题标题】:how can I launch the "import maven project" from within my eclipse plugin?如何从我的 Eclipse 插件中启动“导入 maven 项目”?
【发布时间】:2014-11-21 14:07:28
【问题描述】:

我开发了我自己的 Eclipse 插件,可以创建一个新的自定义向导。在向导结束时,完成所有任务后,我想启动“导入 maven 项目”向导。

例如,对于一个普通的项目,我可以做类似的事情

        IWizard wizard = new ExternalProjectImportWizard(page1.getTxtPathLocation().getText());

        WizardDialog dialog = new WizardDialog(getShell(), wizard);
        dialog.open();

maven 等效导入向导的类名是什么?

非常感谢。

【问题讨论】:

    标签: java plugins eclipse-plugin


    【解决方案1】:

    班级是MavenImportWizard

    org.eclipse.m2e.core.ui.internal.wizards.MavenImportWizard
    

    并且是 m2e 插件的一部分。


    如何通过 Google/grepcode 找到它

    1. 谷歌grepcode import existing maven project
      将您带到plugin.properties,您会在其中看到以下行:

      m2.wizard.import.description    =   Import Existing Maven Projects
      
    2. 在 grepcode 的同一个项目中,您会看到带有 sn-p 的 plugin.xml,其中包含类名:

      <wizard id="org.eclipse.m2e.core.wizards.Maven2ImportWizard"
              class="org.eclipse.m2e.core.ui.internal.wizards.MavenImportWizard"
              icon="icons/import_m2_project.gif"
              category="org.eclipse.m2e"
              name="%m2.wizard.import.name">
         <description>%m2.wizard.import.description</description>
      </wizard>
      

    如何以通用方式实例化导入向导

    正如 Greg 指出的那样,该类位于 internal 包中,不应直接使用。 相反,您应该使用 Eclipse API 通过其 id 获取 wizard 描述符,然后使用该描述符实例化该向导。您将在 plugin.xml 中找到向导描述符 ID(见上文)。在你的情况下是org.eclipse.m2e.core.wizards.Maven2ImportWizard

    这里是完成任务的代码sn-p:

    final String MAVEN_IMPORT_WIZARD_ID = 
        "org.eclipse.m2e.core.wizards.Maven2ImportWizard";
    
    final IWizardDescriptor mavenImportWizardDescriptor = 
        PlatformUI
        .getWorkbench()
        .getImportWizardRegistry()
        .findWizard(MAVEN_IMPORT_WIZARD_ID);
    
    if (mavenImportWizardDescriptor != null) {
        final IWizard mavenImportWizard = mavenImportWizardDescriptor.createWizard();
        final WizardDialog mavenImportWizardDialog = new WizardDialog(getShell(), mavenImportWizard);
        mavenImportWizardDialog.open();
    }
    else {
        // Wizard not found - e.g. if m2e is not installed. 
        // Notify user. 
    }
    

    另见:

    【讨论】:

    • 请注意,由于这是一个内部类,你不应该使用它!
    • 谢谢亚历克斯,我会试一试。 @greg-449,你有其他选择吗?请记住,我要求的是一项要求,因此我需要以一种或另一种方式启动该向导。
    • @greg-449,感谢您指出这一点,我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2011-01-04
    • 2014-07-26
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多