Attempting to install the Groovy-Eclipse extension in STS 2.7.1, I received obscure error messages about a conflicting dependency with a Maven extension. Using a new workspace did not fix the problem. When trying with STS 2.8.1, I received a much better error message: that I could not install since STS was in the C:\Program Files directory. To verify this, I moved my STS program directory to the root of C: and tried to install the Groovy-Eclipse extension again: No problems this time.
Comparing against some of my other computers with STS and the Groovy-Eclipse extension installed, it appears that the Groovy-Eclipse extension does not like the space character in C:\Program Files.
Labels
.net
(1)
*nix
(1)
administration
(1)
Android
(2)
Axis2
(2)
best practice
(5)
big-data
(1)
business-analysis
(1)
code re-use
(1)
continuous-integration
(1)
Cordova-PhoneGap
(1)
database
(2)
defect
(1)
design
(3)
Eclipse
(7)
education
(1)
groovy
(2)
https
(2)
Hudson
(4)
Java
(1)
JAX-RS
(2)
Jersey
(3)
Jetty
(1)
localization
(1)
m2eclipse
(2)
MapForce
(1)
Maven
(12)
MySQL
(1)
Nexus
(4)
notes
(4)
OO
(1)
Oracle
(4)
performance
(1)
Perl
(1)
PL/SQL
(1)
podcast
(1)
PostgreSQL
(1)
requirement
(1)
scripting
(1)
serialization
(1)
shell
(1)
SoapUI
(1)
SQL
(1)
SSH
(2)
stored procedure
(1)
STS
(2)
Subclipse
(1)
Subversion
(3)
TOAD
(3)
Tomcat
(4)
UML
(2)
unit-testing
(2)
WAMP
(1)
WAS
(3)
Windows
(3)
WP8
(2)
WTP
(2)
XML
(4)
XSLT
(1)
Showing posts with label groovy. Show all posts
Showing posts with label groovy. Show all posts
Monday, December 26, 2011
Wednesday, November 30, 2011
Getting Groovy test cases to run with Maven
Groovy is excellent for writing test cases because of its brevity and meta-programming capabilities. For example, a class that I was using to do integration testing called System.exit in its main method. With Groovy I could re-define its main method so that I could continue running the rest of my test code:
Launcher.metaClass.'static'.main = { String[] args ->
delegate.programArguments = args
delegate.init()
delegate.run()
// No more System.exit!
}
However, to get Groovy test cases to run inside Maven (and outside of Eclipse) requires some tweaks. First of all, you have to make Maven aware that there are Groovy test cases to execute, or else it won't even find them The section "Configuring Maven2 to compile and run your Groovy tests" in the article Writing unit tests using Groovy is mostly correct but it is out-of-date. If you use its Maven coordinates verbatim, you will have errors in your Maven output.
Error: Execution default of goal org.codehaus.mojo.groovy:groovy-maven-plugin:1.0-beta-3:testCompile failed: An API incompatibility was encountered while executing org.codehaus.mojo.groovy:groovy-maven-plugin:1.0-beta-3:testCompile: java.lang.NoSuchMethodError: org.codehaus.plexus.PlexusContainer.hasChildContainer(Ljava/lang/String;)Z
This can be corrected by changing the coordinates of the Groovy Maven plugin to:
<groupId>org.codehaus.mojo</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>1.3</version>
Error: Failed to execute goal org.codehaus.mojo:groovy-maven-plugin:1.3:testCompile ... Unknown type: METHOD_DEF
This can be caused by anonymous inner classes in the code. Groovy for Java Programmers gives some suggestions for how to re-format your code so that Groovy can properly parse it and recognize an anonymous inner class definition, however these suggestions didn't work for me. Anonymous inner class are a convenience so one can re-write the code to eliminate them.
Error: initializationError(...): [Lorg/codehaus/groovy/runtime/callsite/CallSite;
You may only see one line in the Maven output which is not particularly helpful. However, you can look at the detailed test output. In Hudson, it would be at a location under HUDSON_HOME similar to jobs\<your job>\workspace\target\surefire-reports\ Looking here, you may see an error java.lang.NoClassDefFoundError: [Lorg/codehaus/groovy/runtime/callsite/CallSite;
To fix this, update your Groovy Maven run-time coordinates to:
<groupId>org.codehaus.groovy.maven.runtime</groupId>
<artifactId>gmaven-runtime-1.6</artifactId>
<version>1.0</version>
<scope>test</scope>
After all this, you should finally see your Groovy test executed in the Maven output.
delegate.programArguments = args
delegate.init()
delegate.run()
// No more System.exit!
}
However, to get Groovy test cases to run inside Maven (and outside of Eclipse) requires some tweaks. First of all, you have to make Maven aware that there are Groovy test cases to execute, or else it won't even find them The section "Configuring Maven2 to compile and run your Groovy tests" in the article Writing unit tests using Groovy is mostly correct but it is out-of-date. If you use its Maven coordinates verbatim, you will have errors in your Maven output.
Error: Execution default of goal org.codehaus.mojo.groovy:groovy-maven-plugin:1.0-beta-3:testCompile failed: An API incompatibility was encountered while executing org.codehaus.mojo.groovy:groovy-maven-plugin:1.0-beta-3:testCompile: java.lang.NoSuchMethodError: org.codehaus.plexus.PlexusContainer.hasChildContainer(Ljava/lang/String;)Z
This can be corrected by changing the coordinates of the Groovy Maven plugin to:
<groupId>org.codehaus.mojo</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>1.3</version>
Error: Failed to execute goal org.codehaus.mojo:groovy-maven-plugin:1.3:testCompile ... Unknown type: METHOD_DEF
This can be caused by anonymous inner classes in the code. Groovy for Java Programmers gives some suggestions for how to re-format your code so that Groovy can properly parse it and recognize an anonymous inner class definition, however these suggestions didn't work for me. Anonymous inner class are a convenience so one can re-write the code to eliminate them.
Error: initializationError(...): [Lorg/codehaus/groovy/runtime/callsite/CallSite;
You may only see one line in the Maven output which is not particularly helpful. However, you can look at the detailed test output. In Hudson, it would be at a location under HUDSON_HOME similar to jobs\<your job>\workspace\target\surefire-reports\ Looking here, you may see an error java.lang.NoClassDefFoundError: [Lorg/codehaus/groovy/runtime/callsite/CallSite;
To fix this, update your Groovy Maven run-time coordinates to:
<groupId>org.codehaus.groovy.maven.runtime</groupId>
<artifactId>gmaven-runtime-1.6</artifactId>
<version>1.0</version>
<scope>test</scope>
After all this, you should finally see your Groovy test executed in the Maven output.
Subscribe to:
Posts (Atom)