Eclipse 插件如何以编程方式传递 Java VM 参数

How Eclipse Plugin can programmatically pass Java VM Arguments

我正在编写一个 Eclipse 插件,它实际上是一个使用 Java 代理 jar 文件检测代码的分析器。

我编写了自定义 启动配置 并为此定义了 启动配置选项卡组 。他们工作正常,运行 本地 Java 项目。我希望我的插件在 JavaArgumentsTab 的 vm 参数中自动传递 Java 代理 jar 文件,以便可以检测代码。

我的启动配置代码

public class MyJavaDelegate extends JavaLaunchDelegate
{
    @Override
    public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor)
            throws CoreException
    {
        super.launch(configuration, mode, launch, monitor);
        System.out.println("Custom Lanucher Launched");
    }
}

我的启动配置选项卡组代码

public class MyJavaTabGroup extends AbstractLaunchConfigurationTabGroup
{

    JavaMainTab jmTab;
    JavaArgumentsTab jaTab;
    JavaJRETab jjTab;
    CommonTab cTab;

    @Override
    public void createTabs(ILaunchConfigurationDialog dialog, String mode)
    {
        jmTab = new JavaMainTab();
        jaTab = new JavaArgumentsTab();
        jjTab = new JavaJRETab();
        cTab = new CommonTab();

        setTabs(new ILaunchConfigurationTab[] { jmTab , jaTab, jjTab, cTab });      
    }

}

由于 JavaArgumentsTab 采用 vm 参数,我试图通过代码设置 vm 参数,但我没有找到 JavaArgumentsTab class 的任何方法允许我.

一种方法是创建您自己的 JavaArgumentsTab and override setDefaults.

的子类

setDefaults javadoc 是:

Initializes the given launch configuration with default values for this tab. This method is called when a new launch configuration is created such that the configuration can be initialized with meaningful values. This method may be called before this tab's control is created.

例如:

import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;

public class CustomJavaArgumentsTab extends JavaArgumentsTab {

    @Override
    public void setDefaults(ILaunchConfigurationWorkingCopy config) {
        // start with the normal defaults for this tab...
        super.setDefaults(config);
        // ... then set/override them with what I want
        // ATTR_VM_ARGUMENTS is defaulted to null, provide my desired default
        config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, "my desired default");
    }
}

从这个截图可以看出,"my desired default"默认出现在我的启动配置中: