Monday, December 3, 2007

Another shot at Groovy: Groovy + Scriptom

Article Outdated, please see tutorial here

Sciptom in Netbeans

If at first you don't succeed...

Since my home computer is 64-bit Windows, I'd like to try scriptom again with a fairly vanilla setup. I'm still trying to evaluate its usefulness in my application, but I can't get it to work!

The above link provides quick instructions to obtain a "Development Build" of Netbeans for working with Groovy. I downloaded it and extracted it to my desktop. It does not seem to conflict with my current Netbeans installation. So I can delete the folder when I'm done if I decide not to use it.

Simply double click "netbeans.exe" in the "bin" folder, and Netbeans should launch. I already had Netbeans Beta 2 installed, so if there's extra steps I appologize!

In Tools >> Plugins, simply type "groovy" in the search field (make sure you're on the "Available Plugins" tab).

As long as you can connect to you should be in business. It took a while, but I eventually connected and got my list of plugins.

Once installed it will ask you to restart the Netbeans IDE. Once restarted, you can create a new Groovy project!

I used the same sample as before:
// Groovy source file

import org.codehaus.groovy.scriptom.*;

def name='World'

println "Hello $name!"

def ie = new ActiveXObject('InternetExplorer.Application')

ie.Visible = true
ie.AddressBar = true

ie.Navigate ""
And here's the Output from Netbeans:
C:\... ...nbproject\build-impl.xml:87: C:\... ...netbeans\lib not found.
BUILD FAILED (total time: 0 seconds)
Which points to:
I can't get this to work. This is ridiculous.

Ok... So I create the "lib" folder inside the Netbeans Dev folder:

Now I get a new error:

C:\... ...nbproject\build-impl.xml:87: taskdef class org.codehaus.groovy.ant.Groovyc cannot be found
BUILD FAILED (total time: 0 seconds)
I guess I can try putting the Groovy jar inside that lib folder, but I would have thought the plugin would do this for me...

In order to get the Groovy jar (1.0 is the stable release that Netbeans claims to work with), I go to: and download the Windows installer for version 1.0. After taking defaults, it places a Groovy-1.0.jar in C:\Program Files\Groovy. I'm copying that to the Desktop\netbeans\lib folder.

And now I get:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/CommandLineParser
at groovy.lang.GroovyShell.main(
A google shows that this is part of the Apache Commons CLI. It has a Javadoc, so I'm hoping its a jar... Downloading it from here:

I extracted the zip, and copied "commons-cli-1.1.jar", to Desktop/netbeans/lib, just like Groovy-1.0.jar.

More errors! Yippee!

Caught: java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
Java Result: 1

These all seem to be packages that exist in C:\Program Files\Groovy. I'll see what I can do to get that added to the classpath of the project. Not that I know how to do that in Groovy! :\

Added C:\program files\groovy\lib\ as a directory, but no luck.

So I'm going to Options >> Miscelaneous >> Ant Tab >> Classpath >> Add JAR/ZIP, and selecting all of them. Navigate to C:\program files\groovy\lib\ hit CTRL+A and then OK.

You should see something like this:

No luck. I'll copy them to the netbeans/lib folder I guess.... Its only 8MB, so its not too much of a hassle.

New error:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, src\grooves\Main.groovy: 12: unable to resolve class ActiveXObject
@ line 12, column 14.
def ie = new ActiveXObject('InternetExplorer.Application')

You've got to be kidding me...

Upon further investigation... the ActiveXObject isn't even in this version of Scriptom!

Look at what I get with the Package explorer in Netbeans:

Let me try to find a Groovy 1.0 compatible version that has the Classes we need... Jeez Louise!

Ok, I found a Scriptom 1.2 with the following disclaimer:

This is the page of the old version of Scriptom. As the new version, Scriptom 2.0, brings with it a couple breaking changes, you may still want to use this version. However, we highly encourage you to switch to the newer version which solves a certain number of bugs and provide a much better integration to COM / ActiveX components.
And the source code examples are different!

import org.codehaus.groovy.scriptom.ActiveXProxy

// instantiate Internet Explorer
def explorer = new ActiveXProxy("InternetExplorer.Application")

// set its properties
explorer.Visible = true
explorer.AddressBar = true

// navigate to a site by calling the Navigate() method

Notice "ActiveXProxy", instead of "ActiveXObject". Looks like the new version is the only option.

Now I'll download and install the "Upcomming Release" of Groovy from Install as normal, and copy the libs over again.


I try running it again and get:
Caught: java.lang.UnsatisfiedLinkError: no jacob in java.library.path
at Main.main(Main.groovy)
Java Result: 1
So I'll put the dll in the root of my project folder (I won't copy it to System32 due to security issues, and frequent versioning), and I get the following error:

Caught: java.lang.NoClassDefFoundError: Could not initialize class at at Main.main(Main.groovy)
So we are back to square one. Note I am using the Jacob.jar and Jacob.dll provided with Scriptom 2.0.

Now I'm going to make a last effort to download the latest Jacob from I will now replace jacob.jar in /netbeans/lib, and replace jacob.dll in the root of my project folder (My Documents >> Netbeans Projects >> PROJECTNAME).


I'll publish a quick start howto shortly.


No comments: