<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-227394851376608649</id><updated>2011-11-28T02:29:24.839+02:00</updated><category term='intellij idea'/><category term='grails maven integration'/><category term='grails integration testing'/><category term='maven2'/><category term='Surefire'/><category term='JetGroovy'/><category term='grails-maven-plugin'/><category term='integration tests'/><category term='grails 1.1.1'/><category term='Selenium'/><title type='text'>Me on Grails</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://me-on-grails.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://me-on-grails.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alexander Naumenko</name><uri>http://www.blogger.com/profile/15546358628895858427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_xTkLocxVSYc/SipoTk-nEQI/AAAAAAAABVI/ME6JQGL7hnA/S220/avatara.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-227394851376608649.post-1111784008557662250</id><published>2009-06-27T23:31:00.000+03:00</published><updated>2009-06-27T23:31:33.365+03:00</updated><title type='text'>GrailsGeek.com</title><content type='html'>&lt;b&gt;Moved to &lt;/b&gt;&lt;a href="http://grailsgeek.com/"&gt;grailsgeek.com&lt;/a&gt;. &lt;br /&gt;I found Blogger eating my time, while I try to just create good looking posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227394851376608649-1111784008557662250?l=me-on-grails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-on-grails.blogspot.com/feeds/1111784008557662250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/grailsgeekcom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/1111784008557662250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/1111784008557662250'/><link rel='alternate' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/grailsgeekcom.html' title='GrailsGeek.com'/><author><name>Alexander Naumenko</name><uri>http://www.blogger.com/profile/15546358628895858427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_xTkLocxVSYc/SipoTk-nEQI/AAAAAAAABVI/ME6JQGL7hnA/S220/avatara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227394851376608649.post-4248693157298658393</id><published>2009-06-13T20:32:00.017+03:00</published><updated>2009-06-14T13:06:21.641+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='integration tests'/><category scheme='http://www.blogger.com/atom/ns#' term='intellij idea'/><category scheme='http://www.blogger.com/atom/ns#' term='grails 1.1.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Surefire'/><category scheme='http://www.blogger.com/atom/ns#' term='grails integration testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><title type='text'>Grails, Selenium, Maven and integration testing</title><content type='html'>Today I wanna share with you my experience of configuring Selenium RC (with Java client drivers), Maven, Surefire to develop and run integration tests.&lt;br /&gt;&lt;h3&gt;Creating project structure&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Create "demo" directory in your projects dir an step inside it.&lt;/li&gt;&lt;li&gt;Create basic Grails application with Maven by running:&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:bash"&gt;mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate -DarchetypeGroupId=org.grails -DarchetypeArtifactId=grails-maven-archetype -DarchetypeVersion=1.0 -DgroupId=example -DartifactId=maven-grails-demo&lt;/pre&gt;Fix Grails application pom.xml with tips I described in &lt;a href="http://me-on-grails.blogspot.com/2009/06/grails-111-and-maven2-in-intellij-idea.html"&gt;my previous post&lt;/a&gt;.&lt;br /&gt;&lt;ol start="3"&gt;&lt;li&gt;Create integration-test module by running:&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:bash"&gt;mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.meongrails -DartifactId=integration-test&lt;/pre&gt;And don't forget to remove App and AppTest from sources that were generated by Maven.&lt;br /&gt;&lt;ol start="4"&gt;&lt;li&gt;If everything was Ok, you should still be in your main project dir "demo". Let's create multi-module pom.xml in project root dir with following content:&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:xml"&gt;    &amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0"&lt;br /&gt;        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0&lt;br /&gt;                     http://maven.apache.org/xsd/maven-4.0.0.xsd"&amp;gt;&lt;br /&gt;   &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;   &amp;lt;groupId&amp;gt;com.meongrails&amp;lt;/groupId&amp;gt;&lt;br /&gt;   &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;   &amp;lt;artifactId&amp;gt;demo&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;lt;packaging&amp;gt;pom&amp;lt;/packaging&amp;gt;&lt;br /&gt;   &amp;lt;modules&amp;gt;&lt;br /&gt;       &amp;lt;module&amp;gt;demo-app&amp;lt;/module&amp;gt;&lt;br /&gt;       &amp;lt;module&amp;gt;integration-test&amp;lt;/module&amp;gt;&lt;br /&gt;   &amp;lt;/modules&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/pre&gt;&lt;ol start="5"&gt;&lt;li&gt;Now run &lt;span style="color: rgb(153, 255, 153);"&gt;"mvn install"&lt;/span&gt; from project root directory, and see&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;"BUILD SUCCESSFUL"&lt;/span&gt; :)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;Adding necessary dependencies to maven poms&lt;/h3&gt;We are going to modify only &amp;lt;build&amp;gt; sections of each pom. So If you extending your existing application with integration tests you'll need to make just few adjustments.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Grails application pom (our demo-app). Go to &amp;lt;build&amp;gt; -&amp;gt; &amp;lt;plugins&amp;gt; section and insert jetty plugin:&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:xml"&gt;    &amp;lt;plugin&amp;gt;&lt;br /&gt;   &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;&lt;br /&gt;   &amp;lt;artifactId&amp;gt;maven-jetty-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;lt;version&amp;gt;6.1.10&amp;lt;/version&amp;gt;&lt;br /&gt;   &amp;lt;configuration&amp;gt;&lt;br /&gt;       &amp;lt;scanIntervalSeconds&amp;gt;10&amp;lt;/scanIntervalSeconds&amp;gt;&lt;br /&gt;       &amp;lt;stopKey&amp;gt;foo&amp;lt;/stopKey&amp;gt;&lt;br /&gt;       &amp;lt;stopPort&amp;gt;9999&amp;lt;/stopPort&amp;gt;&lt;br /&gt;   &amp;lt;/configuration&amp;gt;&lt;br /&gt;   &amp;lt;executions&amp;gt;&lt;br /&gt;       &amp;lt;execution&amp;gt;&lt;br /&gt;           &amp;lt;id&amp;gt;start-jetty&amp;lt;/id&amp;gt;&lt;br /&gt;           &amp;lt;phase&amp;gt;pre-integration-test&amp;lt;/phase&amp;gt;&lt;br /&gt;           &amp;lt;goals&amp;gt;&lt;br /&gt;               &amp;lt;goal&amp;gt;run-war&amp;lt;/goal&amp;gt;&lt;br /&gt;           &amp;lt;/goals&amp;gt;&lt;br /&gt;           &amp;lt;configuration&amp;gt;&lt;br /&gt;               &amp;lt;scanIntervalSeconds&amp;gt;0&amp;lt;/scanIntervalSeconds&amp;gt;&lt;br /&gt;               &amp;lt;daemon&amp;gt;true&amp;lt;/daemon&amp;gt;&lt;br /&gt;           &amp;lt;/configuration&amp;gt;&lt;br /&gt;       &amp;lt;/execution&amp;gt;&lt;br /&gt;       &amp;lt;execution&amp;gt;&lt;br /&gt;           &amp;lt;id&amp;gt;stop-jetty&amp;lt;/id&amp;gt;&lt;br /&gt;           &amp;lt;phase&amp;gt;post-integration-test&amp;lt;/phase&amp;gt;&lt;br /&gt;           &amp;lt;goals&amp;gt;&lt;br /&gt;               &amp;lt;goal&amp;gt;stop&amp;lt;/goal&amp;gt;&lt;br /&gt;           &amp;lt;/goals&amp;gt;&lt;br /&gt;       &amp;lt;/execution&amp;gt;&lt;br /&gt;   &amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;/pre&gt;&lt;br /&gt;We'll use it to launch our Grails application in the "integration-test" phase. And will click with Selenium on it, but a bit later about all that.&lt;br /&gt;&lt;ol start="2"&gt;&lt;li&gt;Integration tests module. Since all it's supposed to be custom, I'll post here entire pom:&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:xml"&gt;    &amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&amp;gt;&lt;br /&gt;   &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;   &amp;lt;groupId&amp;gt;com.meongrails&amp;lt;/groupId&amp;gt;&lt;br /&gt;   &amp;lt;artifactId&amp;gt;integration-test&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;&lt;br /&gt;   &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;integration-test&amp;lt;/name&amp;gt;&lt;br /&gt;   &amp;lt;url&amp;gt;http://maven.apache.org&amp;lt;/url&amp;gt;&lt;br /&gt;   &amp;lt;dependencies&amp;gt;&lt;br /&gt;       &amp;lt;dependency&amp;gt;&lt;br /&gt;           &amp;lt;groupId&amp;gt;org.codehaus.groovy&amp;lt;/groupId&amp;gt;&lt;br /&gt;           &amp;lt;artifactId&amp;gt;groovy&amp;lt;/artifactId&amp;gt;&lt;br /&gt;           &amp;lt;version&amp;gt;1.6.3&amp;lt;/version&amp;gt;&lt;br /&gt;       &amp;lt;/dependency&amp;gt;&lt;br /&gt;       &amp;lt;dependency&amp;gt;&lt;br /&gt;           &amp;lt;groupId&amp;gt;org.seleniumhq.selenium.client-drivers&amp;lt;/groupId&amp;gt;&lt;br /&gt;           &amp;lt;artifactId&amp;gt;selenium-java-client-driver&amp;lt;/artifactId&amp;gt;&lt;br /&gt;           &amp;lt;version&amp;gt;1.0-beta-2&amp;lt;/version&amp;gt;&lt;br /&gt;           &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;       &amp;lt;/dependency&amp;gt;&lt;br /&gt;   &amp;lt;/dependencies&amp;gt;&lt;br /&gt;   &amp;lt;build&amp;gt;&lt;br /&gt;       &amp;lt;plugins&amp;gt;&lt;br /&gt;           &amp;lt;plugin&amp;gt;&lt;br /&gt;               &amp;lt;groupId&amp;gt;org.codehaus.groovy.maven&amp;lt;/groupId&amp;gt;&lt;br /&gt;               &amp;lt;artifactId&amp;gt;gmaven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;               &amp;lt;executions&amp;gt;&lt;br /&gt;                   &amp;lt;execution&amp;gt;&lt;br /&gt;                       &amp;lt;id&amp;gt;test-compile&amp;lt;/id&amp;gt;&lt;br /&gt;                       &amp;lt;phase&amp;gt;test-compile&amp;lt;/phase&amp;gt;&lt;br /&gt;                       &amp;lt;goals&amp;gt;&lt;br /&gt;                           &amp;lt;goal&amp;gt;generateTestStubs&amp;lt;/goal&amp;gt;&lt;br /&gt;                           &amp;lt;goal&amp;gt;testCompile&amp;lt;/goal&amp;gt;&lt;br /&gt;                       &amp;lt;/goals&amp;gt;&lt;br /&gt;                       &amp;lt;configuration&amp;gt;&lt;br /&gt;                           &amp;lt;sources&amp;gt;&lt;br /&gt;                               &amp;lt;fileset&amp;gt;&lt;br /&gt;                                   &amp;lt;directory&amp;gt;${pom.basedir}/src/test&amp;lt;/directory&amp;gt;&lt;br /&gt;                                   &amp;lt;includes&amp;gt;&lt;br /&gt;                                       &amp;lt;include&amp;gt;**/*.groovy&amp;lt;/include&amp;gt;&lt;br /&gt;                                   &amp;lt;/includes&amp;gt;&lt;br /&gt;                               &amp;lt;/fileset&amp;gt;&lt;br /&gt;                           &amp;lt;/sources&amp;gt;&lt;br /&gt;                       &amp;lt;/configuration&amp;gt;&lt;br /&gt;                   &amp;lt;/execution&amp;gt;&lt;br /&gt;               &amp;lt;/executions&amp;gt;&lt;br /&gt;           &amp;lt;/plugin&amp;gt;&lt;br /&gt;           &amp;lt;plugin&amp;gt;&lt;br /&gt;               &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;               &amp;lt;artifactId&amp;gt;selenium-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;               &amp;lt;executions&amp;gt;&lt;br /&gt;                   &amp;lt;execution&amp;gt;&lt;br /&gt;                       &amp;lt;phase&amp;gt;pre-integration-test&amp;lt;/phase&amp;gt;&lt;br /&gt;                       &amp;lt;goals&amp;gt;&lt;br /&gt;                           &amp;lt;goal&amp;gt;start-server&amp;lt;/goal&amp;gt;&lt;br /&gt;                       &amp;lt;/goals&amp;gt;&lt;br /&gt;                       &amp;lt;configuration&amp;gt;&lt;br /&gt;                           &amp;lt;background&amp;gt;true&amp;lt;/background&amp;gt;&lt;br /&gt;                       &amp;lt;/configuration&amp;gt;&lt;br /&gt;                   &amp;lt;/execution&amp;gt;&lt;br /&gt;               &amp;lt;/executions&amp;gt;&lt;br /&gt;           &amp;lt;/plugin&amp;gt;&lt;br /&gt;           &amp;lt;plugin&amp;gt;&lt;br /&gt;               &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;               &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;               &amp;lt;configuration&amp;gt;&lt;br /&gt;                   &amp;lt;skip&amp;gt;true&amp;lt;/skip&amp;gt;&lt;br /&gt;               &amp;lt;/configuration&amp;gt;&lt;br /&gt;               &amp;lt;executions&amp;gt;&lt;br /&gt;                   &amp;lt;execution&amp;gt;&lt;br /&gt;                       &amp;lt;id&amp;gt;surefire-it&amp;lt;/id&amp;gt;&lt;br /&gt;                       &amp;lt;phase&amp;gt;integration-test&amp;lt;/phase&amp;gt;&lt;br /&gt;                       &amp;lt;goals&amp;gt;&lt;br /&gt;                           &amp;lt;goal&amp;gt;test&amp;lt;/goal&amp;gt;&lt;br /&gt;                       &amp;lt;/goals&amp;gt;&lt;br /&gt;                       &amp;lt;configuration&amp;gt;&lt;br /&gt;                           &amp;lt;skip&amp;gt;false&amp;lt;/skip&amp;gt;&lt;br /&gt;                       &amp;lt;/configuration&amp;gt;&lt;br /&gt;                   &amp;lt;/execution&amp;gt;&lt;br /&gt;               &amp;lt;/executions&amp;gt;&lt;br /&gt;           &amp;lt;/plugin&amp;gt;&lt;br /&gt;           &amp;lt;plugin&amp;gt;&lt;br /&gt;               &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;               &amp;lt;configuration&amp;gt;&lt;br /&gt;                   &amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;                   &amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;               &amp;lt;/configuration&amp;gt;&lt;br /&gt;           &amp;lt;/plugin&amp;gt;&lt;br /&gt;       &amp;lt;/plugins&amp;gt;&lt;br /&gt;   &amp;lt;/build&amp;gt;&lt;br /&gt;   &amp;lt;repositories&amp;gt;&lt;br /&gt;       &amp;lt;repository&amp;gt;&lt;br /&gt;           &amp;lt;id&amp;gt;seleniumhq&amp;lt;/id&amp;gt;&lt;br /&gt;           &amp;lt;name&amp;gt;seleniumhq&amp;lt;/name&amp;gt;&lt;br /&gt;           &amp;lt;url&amp;gt;http://nexus.openqa.org/content/repositories/releases/&amp;lt;/url&amp;gt;&lt;br /&gt;       &amp;lt;/repository&amp;gt;&lt;br /&gt;   &amp;lt;/repositories&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/pre&gt;I propose to run "mvn integration-test" from project root, and see what will happen now. There are no tests yet, but Maven should resolve all dependencies and pass all execution phases. "BUILD SUCCESSFUL" means that we could go on :)&lt;br /&gt;&lt;h3&gt;Preparing simple functionality for our tests&lt;/h3&gt;Import our Maven project into Intellij IDEA as I described in &lt;a href="http://me-on-grails.blogspot.com/2009/06/grails-111-and-maven2-in-intellij-idea.html"&gt;my previous post&lt;/a&gt;.&lt;br /&gt;Now I'm creating domain class Message:&lt;br /&gt;&lt;pre class="brush:groovy"&gt;public class Message {&lt;br /&gt;String text&lt;br /&gt;}&lt;/pre&gt;And controller for it:&lt;br /&gt;&lt;pre class="brush:groovy"&gt;class MessageController {&lt;br /&gt;def scaffold = true&lt;br /&gt;}&lt;/pre&gt;That's it, our application is ready to be tested.&lt;br /&gt;&lt;h3&gt;Writing first Selenium test&lt;/h3&gt;Switch to integration-test module, and create &lt;span style="color: rgb(153, 255, 153);"&gt;"integration-test/test/java/com/meongrails/MessageTest.groovy"&lt;/span&gt;:&lt;br /&gt;&lt;pre class="brush:groovy"&gt;package com.meongrails&lt;br /&gt;&lt;br /&gt;import com.thoughtworks.selenium.SeleneseTestCase&lt;br /&gt;&lt;br /&gt;public class MessageTest extends SeleneseTestCase {&lt;br /&gt;public void setUp() {&lt;br /&gt;   setUp "http://localhost:8080/demo-app/", "*firefox"&lt;br /&gt;}&lt;br /&gt;void testCreateMessage() {&lt;br /&gt;   selenium.with {&lt;br /&gt;       speed = "1000"&lt;br /&gt;       open "message"&lt;br /&gt;       waitPage()&lt;br /&gt;       assertEquals "Message List", title&lt;br /&gt;       click "//a[text()=\"New Message\"]"&lt;br /&gt;       waitPage()&lt;br /&gt;       assertEquals "Create Message", title&lt;br /&gt;       type "text","Message Text ;)"&lt;br /&gt;       click "//input[@value=\"Create\"]"&lt;br /&gt;       waitPage()&lt;br /&gt;       assertEquals "Show Message", title&lt;br /&gt;       assertTrue isTextPresent ("Message Text ;)")&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;private def waitPage() {&lt;br /&gt;   selenium.waitForPageToLoad "30000"&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;h3&gt;Running tests&lt;/h3&gt;&lt;h4&gt;Maven&lt;/h4&gt;Run &lt;span style="color: rgb(153, 255, 153);"&gt;"mvn integration-test"&lt;/span&gt; from project root directory and enjoy :). But since your project is going to grow fast (I hope so) or you already big enough, you could experience problems with out of memory error (PermGen space) due to Groovy dynamism. You could easy solve this by adding &lt;span style="color: rgb(153, 255, 153);"&gt;"MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m"&lt;/span&gt; to your environment variables.&lt;br /&gt;&lt;h4&gt;Intellij IDEA&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Go to "Maven" context (at the right edge).&lt;/li&gt;&lt;li&gt;Run your application "demo -&amp;gt; Modules -&amp;gt; demo-app -&amp;gt; Plugins -&amp;gt; grails -&amp;gt; grails:run-app" or just run IDEA grails configuration which should be already available.&lt;/li&gt;&lt;li&gt;Run Selenium with " demo -&amp;gt; Modules -&amp;gt; integration-test -&amp;gt; Plugins -&amp;gt; selenium -&amp;gt; selenium:start-server"&lt;/li&gt;&lt;li&gt;Execute your MessageTest. &lt;/li&gt;&lt;/ol&gt;Intellij IDEA allows you to save run configuration for ease of further use (selenium:start-server and grails:run-app could be saved as preconfigured). Also you there is no need to restart your application each time you made some changes. Grails will take care of it as usual.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227394851376608649-4248693157298658393?l=me-on-grails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-on-grails.blogspot.com/feeds/4248693157298658393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/today-i-wanna-share-with-you-my_13.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/4248693157298658393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/4248693157298658393'/><link rel='alternate' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/today-i-wanna-share-with-you-my_13.html' title='Grails, Selenium, Maven and integration testing'/><author><name>Alexander Naumenko</name><uri>http://www.blogger.com/profile/15546358628895858427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_xTkLocxVSYc/SipoTk-nEQI/AAAAAAAABVI/ME6JQGL7hnA/S220/avatara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227394851376608649.post-1486014932747528309</id><published>2009-06-08T15:23:00.002+03:00</published><updated>2009-06-08T15:25:46.269+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='integration tests'/><category scheme='http://www.blogger.com/atom/ns#' term='maven2'/><category scheme='http://www.blogger.com/atom/ns#' term='grails 1.1.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Surefire'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><title type='text'>Announce</title><content type='html'>Next I'll try to describe how to write integration tests with Selenium on Grails driven by Surefire Maven plugin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227394851376608649-1486014932747528309?l=me-on-grails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-on-grails.blogspot.com/feeds/1486014932747528309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/announce.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/1486014932747528309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/1486014932747528309'/><link rel='alternate' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/announce.html' title='Announce'/><author><name>Alexander Naumenko</name><uri>http://www.blogger.com/profile/15546358628895858427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_xTkLocxVSYc/SipoTk-nEQI/AAAAAAAABVI/ME6JQGL7hnA/S220/avatara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227394851376608649.post-6076697297000707214</id><published>2009-06-08T13:02:00.023+03:00</published><updated>2009-06-14T17:26:17.152+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grails maven integration'/><category scheme='http://www.blogger.com/atom/ns#' term='maven2'/><category scheme='http://www.blogger.com/atom/ns#' term='intellij idea'/><category scheme='http://www.blogger.com/atom/ns#' term='grails-maven-plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='grails 1.1.1'/><category scheme='http://www.blogger.com/atom/ns#' term='JetGroovy'/><title type='text'>Grails 1.1.1. and Maven2 in Intellij Idea</title><content type='html'>Grails Maven Plugin is still non predictable and it's 1.0 version supports only 1.1 version of Grails. 1.1-SNAPSHOT version supports grails 1.1.1 but there are still misunderstandings with plugins are exist (Grails wants to store them in your home, but maven plugin wants them to be stored in your application dir.). As for now I'm trying to avoid using plugins from Grails, but manage them manually and via maven dependencies. I'll describe all step-by-step, to make this tutorial be useful for all.&lt;br /&gt;    1. Make your maven know where to get grails-maven-plugin by editing your &lt;user.home&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;/.m2/settings.xml &lt;/span&gt;(create it if there is no one exist):&lt;/user.home&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;settings&amp;gt;    &amp;lt;pluginGroups&amp;gt;        &amp;lt;pluginGroup&amp;gt;org.grails&amp;lt;/pluginGroup&amp;gt;    &amp;lt;/pluginGroups&amp;gt;&amp;lt;/settings&amp;gt; &lt;/pre&gt;&lt;pre class="brush:xml"&gt; &lt;/pre&gt;    2. Go to secret place where you store you projects and run:&lt;br /&gt;&lt;pre class="brush:bash"&gt;mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate -DarchetypeGroupId=org.grails -DarchetypeArtifactId=grails-maven-archetype -DarchetypeVersion=1.0 -DgroupId=example -DartifactId=maven-grails-demo&lt;/pre&gt;    3. Now open just generated pom.xml and make following changes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div class="western"&gt;change versions of &lt;i&gt;grails-crud  &lt;/i&gt;and  &lt;i&gt;grails-gorm &lt;/i&gt;&lt;span style="font-style: normal;"&gt;from “1.1”  to “1.1.1”&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;change  &lt;/span&gt;&lt;i&gt;grails-maven-plugin &lt;/i&gt;&lt;span style="font-style: normal;"&gt;version  from “1.0” to “1.1-SNAPSHOT”&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;    4. Run &lt;span style="color: rgb(153, 255, 153);"&gt;“mvn initialize”&lt;/span&gt; from your project root.&lt;/span&gt;&lt;/div&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;    5. One more trick, that should be applied for 1.1-SNAPSHOT version of  &lt;span style="font-style: italic;"&gt;grails-maven-plugin &lt;/span&gt;to make it work: add following dependency to your pom.xml (see &lt;a href="http://jira.codehaus.org/browse/GRAILS-4574"&gt;http://jira.codehaus.org/browse/GRAILS-4574&lt;/a&gt; for details):&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="brush:xml"&gt;&lt;span style="font-style: normal;"&gt;&amp;lt;dependency&amp;gt;    &amp;lt;groupId&amp;gt;org.tmatesoft.svnkit&amp;lt;/groupId&amp;gt;    &amp;lt;artifactId&amp;gt;svnkit&amp;lt;/artifactId&amp;gt;    &amp;lt;version&amp;gt;1.2.3.5521&amp;lt;/version&amp;gt;    &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-style: normal;"&gt;    6. Now, it's time to import your maven project into Intellij Idea (I recommend to use latest EAP &lt;a href="http://www.jetbrains.net/confluence/display/IDEADEV/Maia+EAP"&gt;http://www.jetbrains.net/confluence/display/IDEADEV/Maia+EAP&lt;/a&gt;). You can do it by “Create New Project → Import Project from External Model → Maven...”. &lt;/span&gt;&lt;br /&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;    Pay attention to Facets that Idea will detect on project import finished. Hint: look in right bottom corner for round icon with “i” on it, if Idea won't show you dialog window with detected facets. Facets detection is important to let Idea know that it's Grails application. &lt;/span&gt; &lt;/div&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;    Now close and reopen project again to let JetGroovy plugin use facets and treat application directories in a right way. You should see &lt;span style="color: rgb(153, 255, 153);"&gt;“Grails:maven-grails-demo”&lt;/span&gt; preselected in Idea's run/debug configurations combo. If it's so – you on the right way and JetGroovy knows that it's Grails application. If not – try to fix it in&lt;span style="color: rgb(153, 255, 153);"&gt; “module settings → facets”&lt;/span&gt;. If you didn't make it – contact me, I'll try to help.&lt;/span&gt;&lt;/div&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;    You probably already tried to run application but got:&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style="font-style: normal;"&gt;Exception in thread "main" java.lang.ClassNotFoundException: org.codehaus.groovy.grails.cli.support.GrailsStarter&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.net.URLClassLoader$1.run(URLClassLoader.java:200)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.security.AccessController.doPrivileged(Native Method)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.net.URLClassLoader.findClass(URLClassLoader.java:188)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.lang.ClassLoader.loadClass(ClassLoader.java:307)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.lang.ClassLoader.loadClass(ClassLoader.java:252)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.lang.Class.forName0(Native Method)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at java.lang.Class.forName(Class.java:169)&lt;/span&gt;&lt;span style="font-style: normal;"&gt; at com.intellij.rt.execution.application.AppMain.main(AppMain.java:87)&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style="font-style: normal;"&gt;    Don't worry. It's because grails-maven-plugin depends on grails-core which not contain GrailsStarter. It's available in standalone Grails distribution. First of all you are still able to run grails application with &lt;span style="color: rgb(153, 255, 153);"&gt;“Maven Projects → maven-grails-demo → Plugins → grails → grails:run-app”&lt;/span&gt; or just by running &lt;span style="color: rgb(153, 255, 153);"&gt;“mvn grails:run-app”&lt;/span&gt; from project root. If you still want to run your application from run configuration in Idea you could or create run configuration from Maven goal, by clicking on with right button and selecting appropriate menu item or by installing standalone Grails and telling Idea where it is. &lt;/span&gt; &lt;/div&gt;&lt;div style="margin-top: 0.17in; page-break-after: avoid;"&gt;&lt;span style="font-family:Albany,sans-serif;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-style: normal;"&gt;Setting up standalone Grails for your application&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div class="western"&gt;  &lt;/div&gt;&lt;span style="font-style: normal;"&gt;Install  Grails as described &lt;a href="http://grails.org/Installation"&gt;http://grails.org/Installation&lt;/a&gt;.  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;Go to &lt;span style="color: rgb(153, 255, 153);"&gt;module  setting → Groovy → click “Add...” → Create new Grails  SDK... →&lt;/span&gt; &lt;span style="color: rgb(153, 255, 153);"&gt;Tell Idea where your standalone Grails is → Click  “Replace”&lt;/span&gt; (not “Add”, important) in dialog appeared&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="western"&gt;&lt;span style="font-style: normal;"&gt;    Now you able to run your Grails application directly from Idea with JetGroovy plugin. Enjoy ;)&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227394851376608649-6076697297000707214?l=me-on-grails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-on-grails.blogspot.com/feeds/6076697297000707214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/grails-111-and-maven2-in-intellij-idea.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/6076697297000707214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/6076697297000707214'/><link rel='alternate' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/grails-111-and-maven2-in-intellij-idea.html' title='Grails 1.1.1. and Maven2 in Intellij Idea'/><author><name>Alexander Naumenko</name><uri>http://www.blogger.com/profile/15546358628895858427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_xTkLocxVSYc/SipoTk-nEQI/AAAAAAAABVI/ME6JQGL7hnA/S220/avatara.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227394851376608649.post-6238197806874767122</id><published>2009-06-08T12:43:00.000+03:00</published><updated>2009-06-08T12:47:01.135+03:00</updated><title type='text'>Greetings!</title><content type='html'>Hi, dear Community! I've just get back into Grails experiments after few months time-out. I'm going to share with you all essential solutions that I found already or just going to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227394851376608649-6238197806874767122?l=me-on-grails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-on-grails.blogspot.com/feeds/6238197806874767122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/greetings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/6238197806874767122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227394851376608649/posts/default/6238197806874767122'/><link rel='alternate' type='text/html' href='http://me-on-grails.blogspot.com/2009/06/greetings.html' title='Greetings!'/><author><name>Alexander Naumenko</name><uri>http://www.blogger.com/profile/15546358628895858427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_xTkLocxVSYc/SipoTk-nEQI/AAAAAAAABVI/ME6JQGL7hnA/S220/avatara.png'/></author><thr:total>0</thr:total></entry></feed>
