Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Add the ability to write plugins using jruby or groovy."
(→Status/Timeline) |
(→Status/Timeline) |
||
Line 31: | Line 31: | ||
== Status/Timeline == | == Status/Timeline == | ||
− | [[Image:Ok_green.gif]] Implementation of runtime engine to run the scripts. javax.scripting API is in use for this purpose: | + | [[Image:Ok_green.gif]] ''Implementation of runtime engine to run the scripts.'' javax.scripting API is in use for this purpose: |
[http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/core/ScriptExecutor.java?view=markup org.eclipse.soc.yummy.core.ScriptExecutor] does the job. | [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/core/ScriptExecutor.java?view=markup org.eclipse.soc.yummy.core.ScriptExecutor] does the job. | ||
+ | |||
[[Image:Ok_green.gif]] ''How to attach an action, that is implemented using a scripting language (Groovy or JRuby), to an eclipse button or menu.'' All the extensions will be described just if it would be a normal eclipse plug-in, instead, the implementing class will be specified using using custom syntax line referring to a script location. | [[Image:Ok_green.gif]] ''How to attach an action, that is implemented using a scripting language (Groovy or JRuby), to an eclipse button or menu.'' All the extensions will be described just if it would be a normal eclipse plug-in, instead, the implementing class will be specified using using custom syntax line referring to a script location. | ||
− | [[Image:Ok_green.gif]] The dependencies for any specific language PDE implementation are: | + | |
+ | [[Image:Progress.gif]] ''Implementing a set of facades to the scripting objects that should implement extensions.'' | ||
+ | * [[Image:Progress.gif]] org.eclipse.ui.views: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/actions/ScriptAction.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/action.groovy?revision=27&view=markup script] | ||
+ | * [[Image:Ok_green.gif]] org.eclipse.ui.actionSets: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/views/ScriptView.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/view.groovy?view=markup script] | ||
+ | * [[Image:Progress.gif]] org.eclipse.ui.perspectives: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/perspectives/ScriptPerspective.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/perspective.groovy?view=log script] | ||
+ | |||
+ | |||
+ | [[Image:Ok_green.gif]] ''Referencing to the script item in plugin.xml.'' | ||
+ | |||
+ | A reference to a script file is done using a syntax hack that is provided by the org.eclipse.core.runtime.IExecutableExtension interface. Script file name is referenced in the same text value where the class name is specified, delimited with ':' character: | ||
+ | |||
+ | org.eclipse.soc.yummy.facade.views.ScriptView:view.groovy | ||
+ | |||
+ | See the demostration plug-in for more: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/plugin.xml?view=markup plugin.xml] | ||
+ | |||
+ | |||
+ | [[Image:Ok_green.gif]] ''The dependencies for any specific language PDE implementation are'': | ||
* <language>.jar, e.g. groovy-all.jar | * <language>.jar, e.g. groovy-all.jar | ||
* <language>-engine.jar, e.g. groovy-engine.jar | * <language>-engine.jar, e.g. groovy-engine.jar | ||
* yummy-plugin.jar, i.e. the plug-in for any specific language will use the engine to run the scripts executed by <language>-engine.jar at the end. The brand new scripted plug-in will have to use yummy to enable scripting support. | * yummy-plugin.jar, i.e. the plug-in for any specific language will use the engine to run the scripts executed by <language>-engine.jar at the end. The brand new scripted plug-in will have to use yummy to enable scripting support. | ||
− | [[Image:Glass.gif]] Licencing issues for 3rd-party libraries. | + | * [[Image:Glass.gif]] Licencing issues for 3rd-party libraries. |
+ | |||
− | [[Image:Glass.gif]] Executing the new script plug-in in the same workbench. | + | [[Image:Glass.gif]] ''Executing the new script plug-in in the same workbench''. |
Options: | Options: |
Revision as of 18:16, 8 July 2007
This project is part of Google Summer of Code 2007, project link is here.
Student: Anton Arhipov
Blog: http://arhipov.blogspot.com
test
SVN repo at SF.net: at eclipse-incub
About
Scripting language like Groovy (or JRuby) is an ideal choice for Java developer to do quick prototyping. The biggest benefit of Eclipse support for Groovy plug-in development is that while changing the plug-in on-the-fly there's no need to start a separate Eclipse instance or restart the IDE when something was changed in the code. This would rapidly improve the speed of lightweight plug-in development.
This project aims to add ability to write plugins in JVM-based scripting language, like Groovy and JRuby. But it could be a starting point for any other JVM scripting language, like BeanShell or Jython.
Legend
Needs some investigation Patch in progress Bug fixed / Feature added
Repository
SVN repo at SF.net at eclipse-incub contains two plug-ins:
- yummy-plugin - this is the plug-in that should provide the ability to write the new plug-ins in a scripting language, e.g. Groovy.
- yummy-script-contributor - a demonstration plug-in that contributes the components written in a scripting language.
I will also provide a set of unit tests as a separate plug-in and feature/site projects for the installation.
Status/Timeline
Implementation of runtime engine to run the scripts. javax.scripting API is in use for this purpose: org.eclipse.soc.yummy.core.ScriptExecutor does the job.
How to attach an action, that is implemented using a scripting language (Groovy or JRuby), to an eclipse button or menu. All the extensions will be described just if it would be a normal eclipse plug-in, instead, the implementing class will be specified using using custom syntax line referring to a script location.
Implementing a set of facades to the scripting objects that should implement extensions.
- org.eclipse.ui.views: facade, script
- org.eclipse.ui.actionSets: facade, script
- org.eclipse.ui.perspectives: facade, script
Referencing to the script item in plugin.xml.
A reference to a script file is done using a syntax hack that is provided by the org.eclipse.core.runtime.IExecutableExtension interface. Script file name is referenced in the same text value where the class name is specified, delimited with ':' character:
org.eclipse.soc.yummy.facade.views.ScriptView:view.groovy
See the demostration plug-in for more: plugin.xml
The dependencies for any specific language PDE implementation are:
- <language>.jar, e.g. groovy-all.jar
- <language>-engine.jar, e.g. groovy-engine.jar
- yummy-plugin.jar, i.e. the plug-in for any specific language will use the engine to run the scripts executed by <language>-engine.jar at the end. The brand new scripted plug-in will have to use yummy to enable scripting support.
- Licencing issues for 3rd-party libraries.
Executing the new script plug-in in the same workbench.
Options:
- Plug-In Architecture Notes. When starting the "scriptable" plug-in, the extensions defined in plugin.xml should be processed by a custom handler, that will override the standardized extension processing.
- Create a a bundle programmaticaly and register it via Equinox.
Deliverables
The main results to be reached:
- An Eclipse extension/plug-in to (re)load (Groovy/JRuby) scripts on the fly.
- Command line console support to modify and change the program behavior interactively. This could look like in case Apache Derby ij plug-in