Monday, June 7, 2010

java.lang.ClassNotFoundException: org.codehaus.groovy.transform.powerassert.ValueRecorder

Running a GroovyTestCase in a new project I got the following :

java.lang.NoClassDefFoundError: org/codehaus/groovy/transform/powerassert/ValueRecorder
at [My Package Hierarchy].[My TestCase].[My Test Method]([My Test Case].groovy:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.transform.powerassert.ValueRecorder
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 20 more
I found a bug that was closed because it couldn't be reproduced in the Groovy Eclipse JIRA.

I had run GroovyTestCases in other projects without this problem.

I right clicked the project and chose "Groovy -> Add Groovy libs to Classpath." That fixed it.

I had added my own Groovy library instead of the plugins. I often point Eclipse Libraries to the jar files in my .m2 directory. The "org.codehaus.groovy.transform.powerassert" package was not part of the Groovy distro. It is part of Groovy Eclipse plugin.

Saturday, June 5, 2010

Another cool NetBeans theme

I really like a dark background in my IDE. I previously mentioned the Aloha theme for NetBeans. I've been using if for a while.

Yesterday I found a version of Twilight for NetBeans. This one is set up for PHP, but works pretty well for Python. It is tweakable of course too.

Wednesday, May 19, 2010

Using .hgignore

Being a Java guy by day I typically use the source control stalwarts subversion and cvs. I've been exposed to other source control software of course. I used Borland's StarTeam on one gig, and I had a brief, horrific experience with Visual Source Safe.

Now that I'm a Python guy by night I have been using Mercurial. I like it. Its fast. Bitbucket is really sweet.

I use it on the command line; although, NetBeans has built in support. Naturally I got tired of seeing all my compiled Python files (*.pyc) when I ran, "hg status."
hg status
...
flatpages/forms.pyc
flatpages/models.pyc
...
Putting a file, ".hgignore" in the root of the directory is the solution. This is duly documented all over the web. I had problems with the syntax nonetheless.

That was what I ended up with:
# use glob syntax.
syntax: glob
*.elc
*.pyc
*
*.bfproject
*.kpf

templates_compiled/**
The glob syntax is pretty intuitive.

Sunday, May 16, 2010

Parse Error: Expected no additional symbols at symbol select

Running the following query :
query = MODEL_NAME.gql("select * from MODEL_NAME where name = :1", supplied_name) 
I got the error below :
Traceback (most recent call last):                                                               
File "<console>", line 1, in <module>
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/db/__init__.py", line 1100, in gql
*args, **kwds)
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/db/__init__.py", line 2047, in __init__
self._proto_query = gql.GQL(query_string, _app=app)
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 192, in __init__
if not self.__Select():
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 799, in __Select
return self.__From()
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 820, in __From
return self.__Where()
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 833, in __Where
return self.__OrderBy()
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 1056, in __OrderBy
return self.__Limit()
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 1098, in __Limit
return self.__Offset()
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 1117, in __Offset
return self.__Hint()
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 1140, in __Hint
return self.__AcceptTerminal()
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appengine/ext/gql/__init__.py", line 784, in __AcceptTerminal
self.__Error('Expected no additional symbols')
File "[PATH TO APP ENGINE INSTALL]google_appengine_1.3.1/google/appeng
ine/ext/gql/__init__.py", line 724, in __Error
(error_message, self.__symbols[self.__next_symbol]))
BadQueryError: Parse Error: Expected no additional symbols at symbol select
This is a simple fix:
query = MODEL_NAME.gql("select * from MODEL_NAME where name = :1", supplied_name) 
App Engine's orm is already supplying the "select * from" part of the query.

Thursday, May 13, 2010

Gql and object inheritance

I am working on an AppEngine project using the Kay Framework.
I was testing my queries in Kay Framework's shell. If you are familiar with Django's shell it is essentially the same.

Running the following query :
query = db.GqlQuery("select * from MyUserObject where user_name = :1 and password = :2")
I got this error :
raise KindError('No implementation for kind \'%s\'' % kind)
I had imported the object. My object inherits from the framework's DatatstoreUser.


Changing to the following :
query = MyUserObject.gql("where user_name = :1", "testuser@testuser.com")
provided exactly what I needed.

Friday, April 30, 2010

Projects using GWT 1.5 or lower may only specify one entry point module to compile

Despite
Having the 2.0.3 GWT plugin installed
Never having used the 1.5 GWT plugin

I was getting the following error when clicking the GWT compile button :
 Projects using GWT 1.5 or lower may only specify one entry point module to compile
The solution was to move my GWT dependencies above my Maven dependencies.

Right click on the project -> Build Path -> Configure Build Path... -> Order and Export
Click on GWT SDK and Up until it is just below the JDK.

Please make sure the -vm option in eclipse.ini is pointing to a JDK

Ececutive summary : put the vm argument on the line after "-vm" in eclipse.ini.

I got the following dialog after a fresh Eclipse install :
The Maven Integration requires that Eclipse be running in a JDK, because a number of Maven core plugins are using jars from the JDK.
Please make sure the -vm option in eclipse.ini is pointing to a JDK and verify that Installed JREs are also using JDK installs.

The Installed JREs were already pointing to a JDK. I set my my eclipse.ini to : -vm C:\Sun\SDK\jdk
-vm C:\Sun\SDK\jdk\bin\javaw.exe

No luck.
Eclipsepedia has an eclipse.ini.

I put the vm location on the next line and everything worked.