因为实在没有充裕时间,本文的内容只能点到即止。
在ecipse中,一个任务的运行可能有几种方式可供选择,最常用的就是”Java Application”,”Junit”,”Eclipse Application” 等。运用eclipse的插件机制,可以在其中定义自己的任务类型。
<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用来进行相应数据的持久化。
实现了此扩展,相当于提供了自定义任务运行的入口,在eclipse toolbar的“Run As” 和“Debug As” 上就会出现该定义的选项。
org.talend.designer.core.debug.JobLaunchShortcut 实现了接口 IlaunchShorcut, 在2个launch方法实现中定义如何运行任务,类的实现如下:
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是一款广泛使用的开源集成开发环境(IDE),它支持多种编程语言,如Java、C++、Python等。...在实际开发过程中,你可能还需要了解Eclipse的API文档,查阅相关教程,以及加入社区讨论,以获取更多帮助和支持。
在开发Eclipse自定义控件时,我们首先要理解Eclipse的SWT(Standard Widget Toolkit)和JFace这两者的作用。SWT是Eclipse提供的一套底层的GUI库,它提供了与操作系统紧密集成的原生控件,而JFace则是在SWT之上构建的...
6. **构建与运行**:Eclipse集成了构建工具,如Maven或Gradle,用于管理项目依赖并构建应用。通过右键点击项目选择“运行”或“调试”选项,可以启动应用程序或进行调试。 7. **版本控制**:Eclipse内置了对Git、...
Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发者中非常流行。这款强大的工具提供了丰富的功能,包括代码编辑、构建自动化、调试、版本控制等。Eclipse的中文帮助文档是开发者学习和掌握Eclipse...
本文档旨在指导如何在Eclipse集成开发环境中使用Apache ANT作为构建工具。ANT是一个流行的Java项目构建系统,它基于XML,允许开发者定义构建过程的步骤和依赖关系。以下是对Eclipse与ANT集成的关键知识点的详细说明...
Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发者社区中备受青睐。这份221页的《Eclipse – 整合开发工具(基础篇)》是专为初学者设计的入门教程,旨在帮助新用户快速熟悉Eclipse的界面、功能以及...
【Eclipse集成FindBugs步骤详解】 FindBugs是一款强大的Java静态代码分析工具,它的主要目的是在不执行程序的情况下,通过分析字节码来找出潜在的缺陷和性能问题,从而帮助开发者提高代码质量和稳定性。不同于关注...
11. **版本控制系统集成**:Eclipse与Git、SVN等版本控制系统紧密集成,允许用户在Workbench内进行版本控制操作,如提交、合并、分支管理等。 12. **团队协作(Team Support)**:Eclipse Workbench提供了与团队...
2. 找到你的Eclipse安装目录,通常在Windows系统中是`C:\Program Files\eclipse`或者用户自定义的位置。 3. 解压缩下载的中文包,你会看到`features`和`plugins`两个目录。 4. 将解压出的`features`目录下的所有内容...
Activity for Eclipse 插件是专为Eclipse集成开发环境设计的一款扩展工具,主要用来增强Eclipse的功能,提高开发效率。版本号为5.9.3,这是一个较新的稳定版本,通常会包含各种性能优化和新特性。安装过程简单便捷,...
"Jocky"是一款专门针对Eclipse集成开发环境的代码混淆插件,它为开发者提供了方便的代码混淆功能,无需离开熟悉的Eclipse工作环境就能进行混淆操作。Eclipse作为广受欢迎的Java IDE,拥有丰富的插件生态系统,Jocky...
在本文提到的压缩包文件"Jamling-SmartIM4Eclipse-38ab6da"中,包含了SmartQQ插件的源码或者编译后的可执行文件,供开发者研究或自定义扩展。如果你是高级用户或有兴趣了解插件的工作原理,可以通过解压这个文件来...
【Eclipse编程案例精选】是一份集合了众多实用编程示例的资源,旨在帮助初学者和有经验的开发者深入理解Eclipse集成开发环境(IDE)的使用和Java编程技巧。这个压缩包包含了丰富的实例代码,涵盖了Eclipse的基础操作...
Maven插件列表,用于执行构建过程中的各种任务。 通过以上介绍可以看出,m2Eclipse为Eclipse用户提供了一套完整的Maven集成解决方案,极大地提高了开发效率。无论是对于初学者还是有经验的开发者来说,m2Eclipse都...
Eclipse是一款广受欢迎的开源集成开发环境(IDE),主要用于Java编程,但也支持其他语言如C++, Python等。Eclipse3.7,又称为Indigo版本,是Eclipse平台的一个重要里程碑,它带来了许多新特性、改进和增强,使得...
m2eclipse还与持续集成工具如Jenkins、Hudson等紧密集成,可以通过插件直接在Eclipse中触发构建任务,监控构建状态,方便开发团队的协作和质量管理。 7. **与其他Eclipse插件的协同工作** 除了基本的Maven功能,...
这些高级特性是提高开发效率的重要工具,能帮助开发者更加快速和方便地在Eclipse中完成各项开发任务。 本教程通过丰富的实例和详细的步骤,帮助读者从零开始逐步深入到Eclipse的高级功能,不仅适用于Java开发者,也...