代码之家  ›  专栏  ›  技术社区  ›  Fritz H

如何创建启动类的Eclipse调试启动程序

  •  3
  • Fritz H  · 技术社区  · 16 年前

    我正在尝试创建一个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。

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jeremy Raymond    16 年前

    它找不到什么类,ManagementClient还是别的什么?也许在启动配置中需要自己设置目标类路径。

    // 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);
    
        2
  •  0
  •   Arne Deutsch    16 年前

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