Java 是否可以扩展“MavenProjectWizard”?

Java 是否可以扩展“MavenProjectWizard”?,java,eclipse,eclipse-plugin,m2eclipse,Java,Eclipse,Eclipse Plugin,M2eclipse,我想要什么:我有一个用于自定义DSL的编辑器插件。我想让用户使用项目向导设置一个新的DSL项目。通常这些项目都是Maven项目,所以我想提供直接将项目设置为Maven项目的方法。为此,我想扩展包org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizard中的类MavenProjectWizard,然后添加另一个包含DSL项目详细信息的向导页面 我拥有的:这是我目前的尝试: /* * Copyright (c) 2017 RWTH Aac

我想要什么:我有一个用于自定义DSL的编辑器插件。我想让用户使用项目向导设置一个新的DSL项目。通常这些项目都是Maven项目,所以我想提供直接将项目设置为Maven项目的方法。为此,我想扩展包
org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizard
中的类
MavenProjectWizard
,然后添加另一个包含DSL项目详细信息的向导页面

我拥有的:这是我目前的尝试:

/*
 * Copyright (c) 2017 RWTH Aachen. All rights reserved.
 *
 * http://www.se-rwth.de/
 */
package de.se_rwth.transformationeditor.wizard;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;

import jline.internal.Log;

/**
 * Offers a wizard to create a new Transformation project
 * 
 * @author (last commit) $Philipp Nolte$
 * @version $Revision$, $12.1.2017$
 * @since 0.0.3
 */
@SuppressWarnings("restriction")
public class CDProjectWizard extends MavenProjectWizard{

  protected CDWizardPageOne one;

  protected WizardPage currentPage;

  private IWorkbench workbench;

  public CDProjectWizard() {
    super();
  }

  /**
   * @see org.eclipse.jface.wizard.IWizard#addPages()
   */
  @Override
  public void addPages() {
    one = new CDWizardPageOne();
    addPage(one);
    super.addPages();
  }

  /**
   * @see org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard#init(org.eclipse.ui.IWorkbench,
   * org.eclipse.jface.viewers.IStructuredSelection)
   */
  @Override
  public void init(IWorkbench workbench, IStructuredSelection selection) {
    super.init(workbench, selection);
    this.workbench = workbench;
  }

  /**
   * @see org.eclipse.jface.wizard.IWizard#getWindowTitle()
   */
  @Override
  public String getWindowTitle() {
    return "New Class Diagram Transformation Project";
  }

  /**
   * Creates a new Transformation project with the project name given in the
   * wizard. Inside this project a new folder named "Transformations" is
   * created. If a project with the same name already exists, an error window is
   * shown. In addition to that, checks if user wants to create CD or MA xample
   * files and creates them if wanted.
   * 
   * @see org.eclipse.jface.wizard.IWizard#performFinish()
   */
  @Override
  public boolean performFinish() {
    if (this.canFinish()) {
      // Create new project
      String projectName = this.one.getProjectNameText();
      IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
      IProject project = root.getProject(projectName);
      try {
        if (!project.exists()) {
          project.create(null);
        }
        else {
          project.refreshLocal(IResource.DEPTH_INFINITE, null);
          MessageDialog.openError(this.workbench.getActiveWorkbenchWindow().getShell(), 
              "Project creation error", "Project with this name already exists");
          return false;
        }

        if (!project.isOpen()) {
          project.open(null);
        }

        String transformationFolderName = "Transformations";
        // Check subfolder name
        if (!one.getRootFolderText().isEmpty()) {
          transformationFolderName = one.getRootFolderText();
        }
        IFolder binFolder = project.getFolder(transformationFolderName);
        if (!binFolder.exists()) {
          one.createNewFolder(binFolder, false, true, null);
          // Checks if user wants to create a CD example file
          if (one.createCDExampleFile()) {
            InputStream demoFileContents = null;
            try {
              // If the user wants to, an example file is created
              URL url = new URL("platform:/plugin/cdtrans-editor/src/main/resources/exampleFiles/RefactorCDs");
              InputStream inputStream = url.openConnection().getInputStream();
              binFolder.getFile("RefactorCDs.cdtr").create(inputStream, true, null);
            }
            catch (IOException e) {
              Log.error("TransProjectWizard: Error while creating Demo file", e);
              MessageDialog.openError(this.workbench.getActiveWorkbenchWindow().getShell(), 
                  "Example file creation error", "There was an error while creating the example file");
            }
            finally {
              if (demoFileContents != null) {
                try {
                  demoFileContents.close();
                }
                catch (IOException e) {
                  Log.error("TransProjectWizard: Error while closing file stream", e);
                }
              }
            }
          }
          BasicNewResourceWizard.selectAndReveal(binFolder, this.workbench.getActiveWorkbenchWindow());
        }
      }
      catch (CoreException e) {
        Log.error("TransProjectWizard: Error while creating new Project", e);
      }

    }
    return true;
  }

}
但是,如果我启动此向导,如果我尝试打开向导,则会出现运行时错误,该向导显示:

我已经尝试导出该插件并将其安装到新的Eclipse安装中,其中安装了m2e包,但结果相同。
关于如何修复它有什么想法吗?

该向导位于一个内部包中,这意味着您试图扩展它违反了。因此,如果我想完成一个将我的项目设置与maven项目设置相结合的向导,我必须重写现有的
MavenProjectWizard
?@Noltibus您解决了吗?我还需要扩展NewMaven项目向导。有可能吗?