`
javababy1
  • 浏览: 1224752 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

在eclipse中集成自定义的执行任务

阅读更多

因为实在没有充裕时间,本文的内容只能点到即止。
在ecipse中,一个任务的运行可能有几种方式可供选择,最常用的就是”Java Application”,”Junit”,”Eclipse Application” 等。运用eclipse的插件机制,可以在其中定义自己的任务类型。
以TOS(Talend Open Studio, http://www.talend.com)中的Job运行为例
<extension
id="org.talend.designer.runprocess.debug"
name
="TalendJobDebugger"
point
="org.eclipse.debug.core.launchConfigurationTypes">
<launchConfigurationType
name="TalendJob"
delegate
="org.talend.designer.core.debug.JobLaunchConfigurationDelegate"
modes
="run"
public
="true"
id
="org.talend.designer.runprocess.jobLaunchConfiguration">
</launchConfigurationType>
</extension>

<extension
point="org.eclipse.debug.ui.launchConfigurationTypeImages">
<launchConfigurationTypeImage
icon="icons/process_icon.gif"
configTypeID
="org.talend.designer.runprocess.jobLaunchConfiguration"
id
="org.talend.designer.runprocess.launchImage">
</launchConfigurationTypeImage>
</extension>
org.eclipse.debug.core.launchConfigurationTypes 用来使自定义的任务类型集成进eclipse"org.eclipse.debug.ui.launchConfigurationTypeImages 定义了显示的图标。
org.talend.designer.core.debug.JobLaunchConfigurationDelegate 实现了接口IlaunchConfigurationDelegate,方法
publicvoid launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException
定义了要执行的动作,相应的持久化数据在IlaunchConfiguration中取得。
ILaunchConfiguration用来进行相应数据的持久化。
2 定义org.eclipse.debug.ui.launchShortcuts 扩展
<extension
point="org.eclipse.debug.ui.launchShortcuts">
<shortcut
category="org.talend.rcp.perspective"
class
="org.talend.designer.core.debug.JobLaunchShortcut"
icon
="platform:/plugin/org.talend.core/icons/process_icon.gif"
id
="org.talend.designer.runprocess.debug.JobLaunchShortcut"
label
="Job"
modes
="run,debug">

<contextualLaunch>
<enablement>
<withvariable="selection">
<countvalue="1"/>
</with>
</enablement>
</contextualLaunch>
</shortcut>
</extension>
实现了此扩展,相当于提供了自定义任务运行的入口,在eclipse toolbar的“Run As” 和“Debug As” 上就会出现该定义的选项。

org.talend.designer.core.debug.JobLaunchShortcut 实现了接口 IlaunchShorcut, 2launch方法实现中定义如何运行任务,类的实现如下:

DebugUITools.launch(config,mode); 中会调用eclipse的添加最近执行列表功能,以及执行JobLaunchConfigurationDelegate的launch()方法。

publicclassJobLaunchShortcutimplementsILaunchShortcut...{

/***//**
*
*/

publicstaticfinalStringJOB_NAME="TALEND_JOB_NAME";

/**//*
*Identifierforjobconfigurationtype
*/

publicstaticfinalStringJOB_DEBUG_LAUNCH_CONFIGURATION_TYPE="org.talend.designer.runprocess.jobLaunchConfiguration";

/***//**
*Locatesalaunchableentityinthegivenselectionandlaunchesanapplicationinthespecifiedmode.
*
*
@seeorg.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.jface.viewers.ISelection,java.lang.String)
*
*
@paramselectionworkbenchselection
*
@parammodeoneofthelaunchmodesdefinedbythelaunchmanager
*
@seeorg.eclipse.debug.core.ILaunchManager
*/

publicvoidlaunch(ISelectionselection,Stringmode)...{
if(selectioninstanceofIStructuredSelection)...{
Objectobject
=((IStructuredSelection)selection).getFirstElement();

if(objectinstanceofRepositoryNode)...{
RepositoryNodenode
=(RepositoryNode)object;
launch(node.getObject().getProperty().getItem(),mode);
}

}

}


/***//**
*Locatesalaunchableentityinthegivenactiveeditor,andlaunchesanapplicationinthespecifiedmode.
*
*
@seeorg.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.ui.IEditorPart,java.lang.String)
*
*
@parameditortheactiveeditorintheworkbench
*
@parammodeoneofthelaunchmodesdefinedbythelaunchmanager
*
@seeorg.eclipse.debug.core.ILaunchManager
*/

publicvoidlaunch(IEditorParteditor,Stringmode)...{
if(editor.getSite().getId().equals(MultiPageTalendEditor.ID))...{
RepositoryEditorInputinput
=(RepositoryEditorInput)editor.getEditorInput();
launch(input.getItem(),mode);
}

}


/***//**
*bqianCommentmethod"launch".
*
*
@paramobject
*
@parammode
*/

privatevoidlaunch(Itemitem,Stringmode)...{
if(iteminstanceofProcessItem)...{
ILaunchConfigurationconfig
=findLaunchConfiguration((ProcessItem)item,mode);
if(config!=null)...{
DebugUITools.launch(config,mode);
}

}

}


/***//**
*Ifre-usableconfigurationassociatedwiththeFileandtheprojectexist,thisconfigurationisreturned.
*Otherwiseanewconfigurationiscreated.
*
*
@parambin
*
@parammode
*
@returnare-useableornewconfigor<code>null</code>ifnone
*/

privateILaunchConfigurationfindLaunchConfiguration(ProcessItemfile,Stringmode)...{
ILaunchConfigurationconfiguration
=null;
ListcandidateConfigs
=Collections.EMPTY_LIST;
try...{
ILaunchConfiguration[]configs
=DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations();
candidateConfigs
=newArrayList(configs.length);
for(inti=0;i<configs.length;i++)...{
ILaunchConfigurationconfig
=configs[i];
StringprojectName
=config.getAttribute(JOB_NAME,(String)null);
if(projectName==null)...{
continue;
}

//StringprogramFile=config.getAttribute(PerlLaunchConfigurationConstants.ATTR_STARTUP_FILE,(String)
//null);
//Stringname=bin.getName();
if(file.getProperty().getLabel().equals(projectName))...{
candidateConfigs.add(config);
}

}

}
catch(CoreExceptione)...{
ExceptionHandler.process(e);
}


intcandidateCount=candidateConfigs.size();
if(candidateCount<1)...{
configuration
=createConfiguration(file);
}
else...{
configuration
=(ILaunchConfiguration)candidateConfigs.get(0);
}

returnconfiguration;
}


/***//**
*Createsanewconfigurationassociatedwiththegivenfile.
*
*
@paramfile
*
@returnILaunchConfiguration
*/

privateILaunchConfigurationcreateConfiguration(ProcessItemfile)...{
ILaunchConfigurationconfig
=null;
StringprojectName
=file.getProperty().getLabel();
ILaunchConfigurationTypetype
=getLaunchManager().getLaunchConfigurationType(JOB_DEBUG_LAUNCH_CONFIGURATION_TYPE);

try...{
if(type!=null)...{
ILaunchConfigurationWorkingCopywc
=type.newInstance(null,getLaunchManager()
.generateUniqueLaunchConfigurationNameFrom(projectName));
wc.setAttribute(JOB_NAME,projectName);
//wc.setAttribute(PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME,file.getProject().getName());
//wc.setAttribute(PerlLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,(String)null);
config=wc.doSave();
}

}
catch(CoreExceptione)...{
ExceptionHandler.process(e);
}

returnconfig;
}


/***//**
*MethodtogettheLaunchManager
*
*
@returnILaunchManager
*/

protectedILaunchManagergetLaunchManager()...{
returnDebugPlugin.getDefault().getLaunchManager();
}


}

本例中的程序位于talend项目中的"org.talend.designer.core"插件中。使用svn链接

P.S. 该功能的eclipse源码在插件"org.eclipse.debug.ui" 中,可以参考的类:

JavaLaunchShortcut, AbstractLaunchToolbarAction。


http://talendforge.org/svn/tos 
分享到:
评论

相关推荐

    自定义eclipse插件

    Eclipse是一款广泛使用的开源集成开发环境(IDE),它支持多种编程语言,如Java、C++、Python等。...在实际开发过程中,你可能还需要了解Eclipse的API文档,查阅相关教程,以及加入社区讨论,以获取更多帮助和支持。

    开发Eclipse自定义控件

    在开发Eclipse自定义控件时,我们首先要理解Eclipse的SWT(Standard Widget Toolkit)和JFace这两者的作用。SWT是Eclipse提供的一套底层的GUI库,它提供了与操作系统紧密集成的原生控件,而JFace则是在SWT之上构建的...

    eclipse 中文使用教程

    6. **构建与运行**:Eclipse集成了构建工具,如Maven或Gradle,用于管理项目依赖并构建应用。通过右键点击项目选择“运行”或“调试”选项,可以启动应用程序或进行调试。 7. **版本控制**:Eclipse内置了对Git、...

    eclipse中文帮助文档

    Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发者中非常流行。这款强大的工具提供了丰富的功能,包括代码编辑、构建自动化、调试、版本控制等。Eclipse的中文帮助文档是开发者学习和掌握Eclipse...

    Using ANT in Eclipse

    本文档旨在指导如何在Eclipse集成开发环境中使用Apache ANT作为构建工具。ANT是一个流行的Java项目构建系统,它基于XML,允许开发者定义构建过程的步骤和依赖关系。以下是对Eclipse与ANT集成的关键知识点的详细说明...

    Eclipse中文开发手册.

    Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发者社区中备受青睐。这份221页的《Eclipse – 整合开发工具(基础篇)》是专为初学者设计的入门教程,旨在帮助新用户快速熟悉Eclipse的界面、功能以及...

    Eclipse集成findBugs步骤

    【Eclipse集成FindBugs步骤详解】 FindBugs是一款强大的Java静态代码分析工具,它的主要目的是在不执行程序的情况下,通过分析字节码来找出潜在的缺陷和性能问题,从而帮助开发者提高代码质量和稳定性。不同于关注...

    Eclipse Workbench教程(英文)

    11. **版本控制系统集成**:Eclipse与Git、SVN等版本控制系统紧密集成,允许用户在Workbench内进行版本控制操作,如提交、合并、分支管理等。 12. **团队协作(Team Support)**:Eclipse Workbench提供了与团队...

    eclipse 3.4.1 中文包

    2. 找到你的Eclipse安装目录,通常在Windows系统中是`C:\Program Files\eclipse`或者用户自定义的位置。 3. 解压缩下载的中文包,你会看到`features`和`plugins`两个目录。 4. 将解压出的`features`目录下的所有内容...

    Activity for Eclipse plugin

    Activity for Eclipse 插件是专为Eclipse集成开发环境设计的一款扩展工具,主要用来增强Eclipse的功能,提高开发效率。版本号为5.9.3,这是一个较新的稳定版本,通常会包含各种性能优化和新特性。安装过程简单便捷,...

    代码混淆Eclipse插件Jocky

    "Jocky"是一款专门针对Eclipse集成开发环境的代码混淆插件,它为开发者提供了方便的代码混淆功能,无需离开熟悉的Eclipse工作环境就能进行混淆操作。Eclipse作为广受欢迎的Java IDE,拥有丰富的插件生态系统,Jocky...

    Eclipse上的SmartQQ插件防Boss利器让你可以在eclipse中使用QQ进行聊天

    在本文提到的压缩包文件"Jamling-SmartIM4Eclipse-38ab6da"中,包含了SmartQQ插件的源码或者编译后的可执行文件,供开发者研究或自定义扩展。如果你是高级用户或有兴趣了解插件的工作原理,可以通过解压这个文件来...

    Eclipse编程 案例 精选

    【Eclipse编程案例精选】是一份集合了众多实用编程示例的资源,旨在帮助初学者和有经验的开发者深入理解Eclipse集成开发环境(IDE)的使用和Java编程技巧。这个压缩包包含了丰富的实例代码,涵盖了Eclipse的基础操作...

    m2Eclipse-Eclipse中Maven插件使用手册

    Maven插件列表,用于执行构建过程中的各种任务。 通过以上介绍可以看出,m2Eclipse为Eclipse用户提供了一套完整的Maven集成解决方案,极大地提高了开发效率。无论是对于初学者还是有经验的开发者来说,m2Eclipse都...

    Eclipse3.7中文使用教程

    Eclipse是一款广受欢迎的开源集成开发环境(IDE),主要用于Java编程,但也支持其他语言如C++, Python等。Eclipse3.7,又称为Indigo版本,是Eclipse平台的一个重要里程碑,它带来了许多新特性、改进和增强,使得...

    m2eclipse插件_使用maven必备

    m2eclipse还与持续集成工具如Jenkins、Hudson等紧密集成,可以通过插件直接在Eclipse中触发构建任务,监控构建状态,方便开发团队的协作和质量管理。 7. **与其他Eclipse插件的协同工作** 除了基本的Maven功能,...

    Eclipse中文教程1

    这些高级特性是提高开发效率的重要工具,能帮助开发者更加快速和方便地在Eclipse中完成各项开发任务。 本教程通过丰富的实例和详细的步骤,帮助读者从零开始逐步深入到Eclipse的高级功能,不仅适用于Java开发者,也...

Global site tag (gtag.js) - Google Analytics