Skip to content
Skip to breadcrumbs
Skip to header menu
Skip to action menu
Skip to quick search
Quick Search
Browse
Pages
Blog
Labels
Attachments
Mail
Advanced
What’s New
Space Directory
Feed Builder
Keyboard Shortcuts
Confluence Gadgets
Log In
Dashboard
Groovy
Copy Page
You are not logged in. Any changes you make will be marked as
anonymous
. You may want to
Log In
if you already have an account. You can also
Sign Up
for a new account.
This page is being edited by
.
Paragraph
Paragraph
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Preformatted
Quote
Bold
Italic
Underline
More colours
Strikethrough
Subscript
Superscript
Monospace
Clear Formatting
Bullet list
Numbered list
Outdent
Indent
Align left
Align center
Align right
Link
Table
Insert
Insert Content
Image
Link
Attachment
Symbol
Emoticon
Wiki Markup
Horizontal rule
tinymce.confluence.insert_menu.macro_desc
Info
JIRA Issue
Status
Gallery
Tasklist
Table of Contents
Other Macros
Page Layout
No Layout
Two column (simple)
Two column (simple, left sidebar)
Two column (simple, right sidebar)
Three column (simple)
Two column
Two column (left sidebar)
Two column (right sidebar)
Three column
Three column (left and right sidebars)
Undo
Redo
Find/Replace
Keyboard Shortcuts Help
<p><table class="wysiwyg-macro" data-macro-name="excerpt" data-macro-parameters="atlassian-macro-output-type=BLOCK|hidden=true" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2V4Y2VycHQ6aGlkZGVuPXRydWV8YXRsYXNzaWFuLW1hY3JvLW91dHB1dC10eXBlPUJMT0NLfQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p>script Windows ActiveX and COM components with Groovy </p></td></tr></table></p> <h1>Introduction</h1> <p><strong>Scriptom</strong> (<a class="confluence-link unresolved" data-filename="scriptom-1.5.zip" data-linked-resource-default-alias="scriptom-1.5.zip" href="#">scriptom-1.5.zip</a>), an optional Groovy module originally developed by <a href="http://glaforge.free.fr/weblog">Guillaume Laforge</a>, combines the elegant "syntactical sugar" of Groovy with the power of the <a href="http://sourceforge.net/projects/jacob-project/">Jacob library (<strong>Ja</strong>va <strong>CO</strong>M <strong>B</strong>ridge)</a>. The result is something that looks an awful lot like <strong>Windows Scripting Host</strong> (WSH) scripting with VBScript - only it's for <strong>Java</strong>. Once installed into Groovy, <strong>Scriptom</strong> allows you to script <strong>ActiveX</strong> or <strong>COM</strong> Windows components from Groovy.</p> <p>What this means is that you can use Groovy to automate <strong>Word</strong> or <strong>Excel</strong> documents, control <strong>Internet Explorer</strong>, make your PC talk using the <strong>Microsoft Speech API</strong>, monitor processes with <strong>WMI</strong> (Windows Management Instrumentation), or browse the <strong>Windows Registry</strong> using <strong>WShell</strong> (among many, many other things). It is also a convenient way to talk to custom <strong>VB6</strong> or COM-enabled <strong>Microsoft.NET</strong> libraries (compare this to the administrative headaches of getting <strong>Java</strong> and <strong>.NET</strong> to talk using <strong>Web Services</strong> - it's a no brainer). All this without ever leaving the comfortable <strong>Java</strong> universe.</p> <p>Of course, <strong>Scriptom</strong> can be used only on <strong>Microsoft Windows</strong>.</p> <p><strong>Scriptom</strong> is bundled into the <a href="http://groovy.codehaus.org/Download">Groovy Windows-Installer</a>, and the most current version can be downloaded from this page (see below). The codebase is considered stable and feature-complete. The <strong>Jacob</strong> project - <strong>Scriptom</strong>'s foundation <strong>-</strong> was started in 1999 and is being used in thousands of production applications worldwide. <strong>Scriptom</strong> is only a few years old, but it is already stable and mature because it is built on an existing, best-of-breed platform. </p> <p><strong>Scriptom</strong> gives you all the <strong>COM</strong>-scripting power of <strong>Jacob</strong>, only it is a lot easier.</p> <p>The <strong>Scriptom</strong> team</p> <ul> <li><a href="http://glaforge.free.fr/weblog">Guillaume Laforge</a></li> <li>Dierk Koenig</li> <li>Marc Guillemot</li> <li><a href="http://groovierthanthou.blogspot.com/">Jason Smith</a></li> </ul> <h1>Installation</h1> <p><strong>Scriptom 1.5</strong> requires <strong>Groovy 1.5</strong>. Because of dependencies on <strong>Jacob 1.14</strong>, <strong>Scriptom</strong> also requires <strong>Java 1.5</strong> or higher.</p> <p><strong>Download</strong> the project archive(s) and extract the files.</p> <ul> <li><img class="emoticon emoticon-tick" data-emoticon-name="tick" border="0" src="/s/en_GB/3278/15/_/images/icons/emoticons/check.png" alt="(tick)" title="(tick)" /> <a class="confluence-link unresolved" data-filename="scriptom-1.5.zip" data-linked-resource-default-alias="scriptom-1.5.zip" href="#">scriptom-1.5.zip</a> Build 10 (12/10/2007) - <strong>Scriptom</strong> JAR file, <strong>Scriptom-1.5.0bX-32.dll</strong>, <strong>Scriptom-1.5.0bX-64.dll</strong>, Java source code, ANT build script, examples, tests, and utilities.</li> <li><img class="emoticon emoticon-information" data-emoticon-name="information" border="0" src="/s/en_GB/3278/15/_/images/icons/emoticons/information.png" alt="(info)" title="(info)" /> <a class="confluence-link unresolved" data-filename="scriptom-1.5-javadoc.zip" data-linked-resource-default-alias="scriptom-1.5-javadoc.zip" href="#">scriptom-1.5-javadoc.zip</a> - <strong>JavaDoc</strong> for <strong>Scriptom</strong> and included type-library information.</li> </ul> <p>Install the jar file and DLL file(s) into your project, and optionally install an update from Microsoft:</p> <ol> <li>Add the <strong>Scriptom</strong> jar file (<strong>scriptom-1.5.0bX-XX.jar</strong>) into your Java classpath. It contains both <strong>Scriptom</strong> and <strong>Jacob</strong> class files, so you must not include <strong>jacob.jar</strong>. <table class="wysiwyg-macro" data-macro-name="warning" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e3dhcm5pbmd9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><strong>Scriptom</strong> contains a full (current) version of the <strong>Jacob</strong> library. If you are using <strong>Jacob</strong> directly elsewhere in your project, remove all references to it and use the version built in to <strong>Scriptom</strong>. </p></td></tr></table></li> <li>Copy both <strong>Scriptom-1.5.0bX-XX.dll</strong> files to somewhere on your <strong>java.library.path</strong>. (usually somewhere on the system 'PATH'). <table class="wysiwyg-macro" data-macro-name="info" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm99&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p>The <strong>Scriptom DLL</strong> naming convention allows multiple versions of <strong>Scriptom</strong> to run on the same machine. However, you can only run a single version of <strong>Scriptom</strong> <strong>JAR</strong> in any given project. </p></td></tr></table></li> <li>To avoid the dreaded <strong>java.lang.UnsatisfiedLinkError</strong>, download and install one of the following updates from Microsoft: <a href="http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en">Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)</a>or <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=eb4ebe2d-33c0-4a47-9dd4-b9a6d7bd44da&DisplayLang=en">Microsoft Visual C++ 2005 SP1 Redistributable Package (x64)</a>. <strong>Scriptom</strong> doesn't support the <strong>IA-64</strong> (<strong>Itanium</strong>) architecture at this time, mainly due to lack of interest. If you are wondering about the different processor architectures, check out the <a href="http://en.wikipedia.org/wiki/X86-64">x86-64 wiki</a>. It is usually necessary to install these updates on <strong>Windows Server 2003</strong> and <strong>Windows 2000</strong>, and we've found that it may also be necessary for <strong>Windows XP</strong> and even <strong>Vista</strong>. <table class="wysiwyg-macro" data-macro-name="note" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"> <p>A project can only use one version of <strong>Scriptom</strong> at a time. If you have installed <strong>Groovy</strong> using the <strong>Groovy Windows Installer</strong>, you must remove any versions of <strong>Scriptom</strong> <strong>JAR</strong> files or replace them with the latest version. A version of <strong>Scriptom</strong> is installed as part of the <strong>Groovy Windows Installer</strong> installation. </p></td></tr></table> <strong>Scriptom 1.5</strong> is not supported for <strong>Groovy 1.0</strong> and earlier (<strong>Scriptom 1.2</strong> is still available). Please contact us if this presents a serious problem for you.</li> </ol> <h1>Building from Source</h1> <p>The project archive contains all the <strong>Scriptom</strong> source files, Java source files from <strong>Jacob</strong>, and an ANT build script. To save space, the Groovy JAR files have been omitted from the archive. For a successful compilation, Groovy JAR files must be added to the <strong><em>project</em></strong><strong>/lib</strong> folder.</p> <p>The latest build requires <strong>Groovy 1.5</strong>.</p> <p><strong>Scriptom</strong> includes source files from <strong>Jacob</strong> version <strong>1.14</strong>. You don't need to download it from the <strong>Jacob</strong> project on <strong>SourceForge.net</strong>.</p> <p>To build the project, run <strong><em>project</em></strong><strong>/build/make.bat</strong>. </p> <p>The build process requires <strong>Java 1.5</strong> or higher (<strong>Java 1.6</strong> recommended) and <strong>ANT 1.6.5</strong> or better.</p> <h1>Changes from Scriptom 1.x</h1> <p><strong>Scriptom</strong> <strong>1.5</strong> is a substantial upgrade to previous versions of <strong>Scriptom</strong>, and <em>is not backward compatible</em>. We hope you will agree that it is worth a little code rework to get all these great new features! </p> <ul> <li>Provides simplified helper methods for dealing with COM apartment threading models.</li> <li><strong>ActiveXProxy</strong> name changed to <strong>ActiveXObject</strong> to match WSH convention.</li> <li><strong>VariantProxy</strong> no longer exists (the functionality was refactored into <strong>ActiveXObject</strong>).</li> <li>Variant values are converted to and from the equivalent Java type; no more calling <strong>.value</strong> on everything!</li> <li>Supports COM event callbacks using closures (this is still a work in progress, but usable as is).</li> <li>Supports indexed properties, including multiple indexes.</li> <li>Supports typed, multi-dimensional SafeArrays.</li> <li>Supports pass-byref (in/out) values, both in method calls and event handler callbacks.</li> <li>Supports COM enumerable types (so you can use <strong>.each</strong>, for example).</li> <li>Supports missing arguments (for optional parameters) in method/property calls and events.</li> <li>Includes constant definitions for several popular Windows applications, derived from these type libraries (see JavaDoc): <ul> <li>Microsoft Office 2003 (works with other versions as well) <ul> <li>Word 2003</li> <li>Excel 2003</li> <li>Outlook 2003</li> <li>Access 2003</li> <li>PowerPoint 2003</li> </ul> </li> <li>Microsoft Internet Explorer 6 (works with other versions as well)</li> <li>Microsoft Scripting (i.e., FileSystemObject)</li> <li>Microsoft Speech API</li> <li>Windows Scripting Host (WSH)</li> <li>WbemScripting (WMI - Windows Management Instrumentation)</li> </ul> </li> <li>Supports the latest features from <strong>Jacob 1.14</strong>, including new support for the <strong>Decimal</strong> data type and 64-bit integers.</li> </ul> <h1>Migrating from Previous Versions of Scriptom</h1> <p><strong>Scriptom 1.5</strong> is not backward compatible with previous versions of <strong>Scriptom</strong>. To get your scripts running again, do this:</p> <ul> <li>Change all references to <strong>ActiveXProxy</strong> into <strong>ActiveXObject</strong>.</li> <li>Wrap any code that references an <strong>ActiveXObject</strong> in <strong>Scriptom.withMTA { ... }</strong>, which replaces the way Scriptom previously handled COM threading. </li> <li>Remove all references to <strong>.value</strong> property references. </li> <li>Remove any statically typed references to <strong>VariantProxy</strong>.</li> <li>Support for COM events is greatly improved in this version - and also greatly changed. Refer to the <strong>Events</strong> section below for more information.</li> <li>Verify that your project is using the correct version of <strong>jacob.dll</strong>. <br class="atl-forced-newline" /></li> </ul> <h1>Quick Start</h1> <p>Let's say you want an application that talks. Pure Java implementations aside (this is, after all, a Groovy/COM tutorial), and ignoring the fact that the default voice on pre-Vista machines sounds like <a href="http://en.wikipedia.org/wiki/Dr._Zoidberg">Dr. Zoidberg</a> with a sinus infection, you could use the <strong>Microsoft Speech API</strong> (<strong>SAPI</strong>) to get the job done.</p> <p>You start by creating an <strong>ActiveXObject</strong> with the prog-id for <strong>SpVoice</strong>. Now you can call any of the methods it supports. By default, <strong>SpVoice</strong> will block until it is done speaking, but we're going to have it speak asynchronously and wait until it is done.</p> <table class="wysiwyg-macro" data-macro-name="code" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> import org.codehaus.groovy.scriptom.* import org.codehaus.groovy.scriptom.tlb.sapi.SpeechVoiceSpeakFlags; import org.codehaus.groovy.scriptom.tlb.sapi.SpeechRunState; //Definitive proof that you CAN talk and chew gum at the same time. Scriptom.inApartment { def voice = new ActiveXObject('SAPI.SpVoice') voice.Speak 'GROOVY and SCRIPT um make com automation simple, fun, and groovy, man!', SpeechVoiceSpeakFlags.SVSFlagsAsync while(voice.Status.RunningState != SpeechRunState.SRSEDone) { println 'Chew gum...' sleep 1000 } } println 'Speaker is done.' </pre></td></tr></table> <p>If you have scripted COM before, you are probably used to using "magic numbers" throughout your code in place of COM constants. In this code sample, we're using fully-qualified constants instead.</p> <p><strong>Scriptom</strong> includes fully JavaDoc'd constant and interface definitions from a number of commonly used type-libraries, and you can even create your own. The source code for generating COM type library definitions for <strong>Groovy</strong> is written in <strong>Groovy</strong><img class="emoticon emoticon-smile" data-emoticon-name="smile" border="0" src="/s/en_GB/3278/15/_/images/icons/emoticons/smile.png" alt="(smile)" title="(smile)" /> , and it's included in the project. It may not seem like a big deal to replace a couple of numbers, but it will be a lot easier in 10 years to find relevant information on <strong>SpeechVoiceSpeakFlags.SVSFlagsAsync</strong> than on the number <strong>1</strong> (Google returns a little more than 9 billion hits for the number '1', and about 1,000 for 'SpeechVoiceSpeakFlags.SVSFlagsAsync,' including hits on this paragraph). And besides, the code reads better.</p> <p>Speaking of interfaces, it turns out that <strong>SpVoice</strong> supports several. You can test an <strong>ActiveXObject</strong> to see if it supports a given interface using <strong>.supportsInterface</strong>, and you can cast an <strong>ActiveXObject</strong> to a given interface using <strong>.toInterface</strong>. </p> <p>This next example displays the COM interfaces that <strong>SpVoice</strong> supports (within the <strong>SAPI</strong> library only): <br class="atl-forced-newline" /></p> <table class="wysiwyg-macro" data-macro-name="code" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> import org.codehaus.groovy.scriptom.*; import org.codehaus.groovy.scriptom.tlb.sapi.SpeechLib; Scriptom.inApartment { def voice = new ActiveXObject('SAPI.SpVoice') SpeechLib.interfaces.each {name, iid -> if(voice.supportsInterface(iid)) println "SpeechLib.$name - $iid"} } </pre></td></tr></table> <h1>Programmer's Guide </h1> <table class="confluenceTable"><tbody> <tr> <td class="confluenceTd"><p> <a class="confluence-link" href="/display/GROOVY/The+Least+You+Need+to+Know+about+COM" data-linked-resource-id="24576229" data-linked-resource-type="page" data-linked-resource-default-alias="The Least You Need to Know about COM" data-base-url="http://docs.codehaus.org">The Least You Need to Know about COM</a> </p></td> <td class="confluenceTd"> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2V4Y2VycHQtaW5jbHVkZTpUaGUgTGVhc3QgWW91IE5lZWQgdG8gS25vdyBhYm91dCBDT018bm9wYW5lbD10cnVlfQ&locale=en_GB&version=2" data-macro-name="excerpt-include" data-macro-parameters="nopanel=true" data-macro-default-parameter="The Least You Need to Know about COM"> </td> </tr> <tr> <td class="confluenceTd"><p> <a class="confluence-link" href="/display/GROOVY/COM+Data+Types+in+Scriptom" data-linked-resource-id="24576234" data-linked-resource-type="page" data-linked-resource-default-alias="COM Data Types in Scriptom" data-base-url="http://docs.codehaus.org">COM Data Types in Scriptom</a> </p></td> <td class="confluenceTd"> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2V4Y2VycHQtaW5jbHVkZTpDT00gRGF0YSBUeXBlcyBpbiBTY3JpcHRvbXxub3BhbmVsPXRydWV9&locale=en_GB&version=2" data-macro-name="excerpt-include" data-macro-parameters="nopanel=true" data-macro-default-parameter="COM Data Types in Scriptom"> </td> </tr> <tr> <td class="confluenceTd"><p> <a class="confluence-link" href="/display/GROOVY/COM+Methods+and+Properties+in+Scriptom" data-linked-resource-id="24576238" data-linked-resource-type="page" data-linked-resource-default-alias="COM Methods and Properties in Scriptom" data-base-url="http://docs.codehaus.org">COM Methods and Properties in Scriptom</a> </p></td> <td class="confluenceTd"> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2V4Y2VycHQtaW5jbHVkZTpDT00gTWV0aG9kcyBhbmQgUHJvcGVydGllcyBpbiBTY3JpcHRvbXxub3BhbmVsPXRydWV9&locale=en_GB&version=2" data-macro-name="excerpt-include" data-macro-parameters="nopanel=true" data-macro-default-parameter="COM Methods and Properties in Scriptom"> </td> </tr> <tr> <td class="confluenceTd"><p> <a class="confluence-link" href="/pages/viewpage.action?pageId=27328519" data-linked-resource-id="27328519" data-linked-resource-type="page" data-linked-resource-default-alias="Passing Values by Reference (in-out)" data-base-url="http://docs.codehaus.org">Passing Values by Reference (in-out)</a> </p></td> <td class="confluenceTd"> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2V4Y2VycHQtaW5jbHVkZTpQYXNzaW5nIFZhbHVlcyBieSBSZWZlcmVuY2UgKGluLW91dCl8bm9wYW5lbD10cnVlfQ&locale=en_GB&version=2" data-macro-name="excerpt-include" data-macro-parameters="nopanel=true" data-macro-default-parameter="Passing Values by Reference (in-out)"> </td> </tr> <tr> <td class="confluenceTd"><p> <a class="confluence-link" href="/display/GROOVY/COM+Events" data-linked-resource-id="27328520" data-linked-resource-type="page" data-linked-resource-default-alias="COM Events" data-base-url="http://docs.codehaus.org">COM Events</a> </p></td> <td class="confluenceTd"> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2V4Y2VycHQtaW5jbHVkZTpDT00gRXZlbnRzfG5vcGFuZWw9dHJ1ZX0&locale=en_GB&version=2" data-macro-name="excerpt-include" data-macro-parameters="nopanel=true" data-macro-default-parameter="COM Events"> </td> </tr> <tr> <td class="confluenceTd"><p> <a class="confluence-link" href="/display/GROOVY/All+About+Arrays" data-linked-resource-id="27983890" data-linked-resource-type="page" data-linked-resource-default-alias="All About Arrays" data-base-url="http://docs.codehaus.org">All About Arrays</a> </p></td> <td class="confluenceTd"> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2V4Y2VycHQtaW5jbHVkZTpBbGwgQWJvdXQgQXJyYXlzfG5vcGFuZWw9dHJ1ZX0&locale=en_GB&version=2" data-macro-name="excerpt-include" data-macro-parameters="nopanel=true" data-macro-default-parameter="All About Arrays"> </td> </tr> </tbody></table> <h1>Examples</h1> <p>Here is a simple example that uses the Microsoft <strong>ScriptControl</strong> to evaluate a JScript expression. This is a very indirect way to add 2 and 2. <br class="atl-forced-newline" /></p> <table class="wysiwyg-macro" data-macro-name="code" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> import org.codehaus.groovy.scriptom.* Scriptom.inApartment { def scriptControl = new ActiveXObject("ScriptControl") scriptControl.Language = "JScript" println scriptControl.Eval('2.0 + 2.0;') } </pre></td></tr></table> <p>There are many, many potential uses for <strong>Scriptom</strong> - far to many to try to maintain as part of this documentation. So we've included a whole slew of meaty examples in the project archive for you to play with. We'd like to encourage you to go look at those examples, run them, and modify them. And if you come up with an especially interesting example, let us know about it. We may even include it in a future release! </p> <p>Some additional examples included with <strong>Scriptom</strong>:</p> <ul> <li>Automated writing to and reading from <strong>Excel</strong> spreadsheets. Includes COM events example.</li> <li>Navigation in <strong>Internet Explorer</strong>. Includes COM events example. </li> <li>Gathering information about processes and Windows NT services using <strong>WMI</strong>.</li> <li>Parsing a <strong>*.msg</strong> file with <strong>Microsoft Outlook</strong>.</li> </ul> <p>Consuming <strong>Visual Basic 6</strong> (VB6) and <strong>Visual Basic.NET</strong> COM-enabled DLLs.</p> <h1>Articles</h1> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2luY2x1ZGU6U2NyaXB0b20gQXJ0aWNsZXN9&locale=en_GB&version=2" data-macro-name="include" data-macro-default-parameter="Scriptom Articles"> <h1>Post Scriptom</h1> <p>All known (unresolved) issues and feature requests are listed in the <a href="http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&mode=hide&pid=10242&sorter/order=DESC&sorter/field=priority&resolution=-1&component=11335">Scriptom Jira</a> database.</p> <p>Changes to each build are summarized in the <a class="confluence-link" href="/display/GROOVY/Change+Log" data-linked-resource-id="27983882" data-linked-resource-type="page" data-linked-resource-default-alias="Change Log" data-base-url="http://docs.codehaus.org">Change Log</a>.</p> <p>Recent builds of <strong>Scriptom</strong> can be found <a href="http://docs.codehaus.org/pages/viewpageattachments.action?pageId=24576222#">here</a>. Older versions are archived:</p> <img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2luY2x1ZGU6U2NyaXB0b20gQXJjaGl2ZX0&locale=en_GB&version=2" data-macro-name="include" data-macro-default-parameter="Scriptom Archive">
Please type the word appearing in the picture.
Attachments
Labels
Location
Watch this page
< Edit
Preview >
Loading…
Save
Cancel
Next hint
search
attachments
weblink
advanced