Java 如何制作启动类的Eclipse调试启动器

Java 如何制作启动类的Eclipse调试启动器,java,eclipse,debugging,eclipse-rcp,eclipse-jdt,Java,Eclipse,Debugging,Eclipse Rcp,Eclipse Jdt,我正在尝试创建一个Eclipse启动配置,可以通过编程方式启动,如果您愿意,可以构建一个自定义调试器 我已经有了一个org.eclipse.debug.core.launchConfigurationTypes扩展,以及.core.launchDelegates、.ui.launchConfigurationTabGroups和.core.sourcePathComputers扩展 我有一个按钮,执行以下代码: ILaunchManager mgr = DebugPlugin.getDefaul

我正在尝试创建一个Eclipse启动配置,可以通过编程方式启动,如果您愿意,可以构建一个自定义调试器

我已经有了一个
org.eclipse.debug.core.launchConfigurationTypes
扩展,以及
.core.launchDelegates
.ui.launchConfigurationTabGroups
.core.sourcePathComputers
扩展

我有一个按钮,执行以下代码:

ILaunchManager mgr = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType lct = mgr.getLaunchConfigurationType(IOpcodeConstants.LAUNCH_CFG_TYPE);
ILaunchConfiguration[] lcs = mgr.getLaunchConfigurations(lct);

for (int i = 0; i < lcs.length; ++i) {
     if (lcs[i].getName().equals("Opcode")) {
         lcs[i].delete();
         break;
     }
}

ILaunchConfigurationWorkingCopy wc = lct.newInstance(null, "Opcode");

Set<String> modes = new HashSet<String>();
modes.add(ILaunchManager.DEBUG_MODE);
wc.setModes(modes);
wc.setPreferredLaunchDelegate(modes, "nz.net.fantail.studio.OpcodeLaunchDelegate");

ILaunchConfiguration lc = wc.doSave();
lc.launch(ILaunchManager.DEBUG_MODE, null);
@Override
public void launch(ILaunchConfiguration configuration, String mode,
        ILaunch launch, IProgressMonitor monitor) throws CoreException {

    ManagementClient client = new ManagementClient("localhost", 6961);

    if (mode.equals(ILaunchManager.DEBUG_MODE)) {
        IDebugTarget target = new OpcodeDebugTarget(launch, client);
        launch.addDebugTarget(target);
    }
}
在get尝试加载ManagementClient类并抛出NoSuchClassDefException之前,一切都正常工作。我怀疑这是因为它是在与实际应用程序不同的环境中启动的,因此类路径中没有带类的.jar


有人知道如何回避这个问题吗?干杯

它找不到什么类,管理客户机还是其他类?也许在启动配置中,您需要自己设置目标类路径

// customize the classpath
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, false);
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH, classPathList);
以下是一些可能有用的其他设置:

 wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, 
    projectName);
 wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, 
    targetMainClass);
 wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
    programArgs);
 wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, jvmArgs);

为什么需要启动配置的按钮?如果您扩展了您提到的扩展点,那么您的启动配置应该出现在eclipse的调试菜单中。。。不需要单独的按钮


因此,我将关注包含“ManagementClient”的插件的依赖关系。“NoSuchClassDefException”通常是由于错误的依赖项定义造成的(可能是依赖项的顺序错误[核心插件在ui插件之前]……或者您的类不在插件中?)。

我使用单独的按钮,因为我在这个特定的ui中没有或不想要菜单或工具栏。:-)不过,包含ManagementClient的插件本身就可以了,如果我从应用程序内部调用它,它工作得很好-只有在启动代理调用它失败时,它才工作得很好…嘿,谢谢!找不到的是ManagementClient类。不过,我似乎没有IJavaLaunchConfigurationConstants——我会尽快查看,可能只是源路径中没有它的插件。干杯