<?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:blogger='http://schemas.google.com/blogger/2008' 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-1157012889969725923</id><updated>2024-09-13T20:45:32.683-07:00</updated><category term="Groovy On Grails"/><category term="Ant"/><category term="Mavan"/><title type='text'>Gajanan Koram</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gajanankoram.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://gajanankoram.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gajanan Koram</name><uri>http://www.blogger.com/profile/08691619250855703723</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdqVPCt3l5QMi8-kSMwOcJfGZks1XisopM4iep_V46yOZCZa7N3Hpn9hIH_TNnrhoKNPxo4CpSGY9nC3Wosx-HZ7wLnKiAJ8C1E8faIVsB7X6ZdtQE6m9jexkwlQ3EP4/s220/IMG1111A.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1157012889969725923.post-3078255299478208244</id><published>2013-03-06T01:39:00.001-08:00</published><updated>2013-03-06T01:39:43.066-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Mavan"/><title type='text'>Maven in 5 Minutes</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Built by Maven&lt;br /&gt;
&lt;b&gt;Maven in 5 Minutes&lt;/b&gt;&lt;br /&gt;
Installation&lt;br /&gt;
&lt;br /&gt;
Maven is a Java tool, so you must have Java installed in order to proceed.&lt;br /&gt;
&lt;br /&gt;
First, download Maven and follow the installation instructions. After that, type the following in a terminal or in a command prompt:&lt;br /&gt;
&lt;br /&gt;
mvn --version&lt;br /&gt;
&lt;br /&gt;
It should print out your installed version of Maven, for example:&lt;br /&gt;
&lt;br /&gt;
Maven version: 2.0.8&lt;br /&gt;
Java version: 1.5.0_12&lt;br /&gt;
OS name: &quot;windows 2003&quot; version: &quot;5.2&quot; arch: &quot;x86&quot; Family: &quot;windows&quot;&lt;br /&gt;
&lt;br /&gt;
Depending upon your network setup, you may require extra configuration. Check out the Guide to Configuring Maven if necessary.&lt;br /&gt;
Creating a Project&lt;br /&gt;
&lt;br /&gt;
On your command line, execute the following Maven goal:&lt;br /&gt;
&lt;br /&gt;
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app&lt;br /&gt;
&lt;br /&gt;
If you have just installed Maven, it may take a while on the first run. This is because Maven is downloading the most recent artifacts (plugin jars and other files) into your local repository. You may also need to execute the command a couple of times before it succeeds. This is because the remote server may time out before your downloads are complete. Don&#39;t worry, there are ways to fix that.&lt;br /&gt;
&lt;br /&gt;
You will notice that the create goal created a directory with the same name given as the artifactId. Change into that directory.&lt;br /&gt;
&lt;br /&gt;
cd my-app&lt;br /&gt;
&lt;br /&gt;
Under this directory you will notice the following standard project structure.&lt;br /&gt;
&lt;br /&gt;
my-app&lt;br /&gt;
|-- pom.xml&lt;br /&gt;
`-- src&lt;br /&gt;
|-- main&lt;br /&gt;
| `-- java&lt;br /&gt;
| `-- com&lt;br /&gt;
| `-- mycompany&lt;br /&gt;
| `-- app&lt;br /&gt;
| `-- App.java&lt;br /&gt;
`-- test&lt;br /&gt;
`-- java&lt;br /&gt;
`-- com&lt;br /&gt;
`-- mycompany&lt;br /&gt;
`-- app&lt;br /&gt;
`-- AppTest.java&lt;br /&gt;
&lt;br /&gt;
The src/main/java directory contains the project source code, the src/test/java directory contains the test source, and the pom.xml is the project&#39;s Project Object Model, or POM.&lt;br /&gt;
The POM&lt;br /&gt;
&lt;br /&gt;
The pom.xml file is the core of a project&#39;s configuration in Maven. It is a single configuration file that contains the majority of information required to build a project in just the way you want. The POM is huge and can be daunting in its complexity, but it is not necessary to understand all of the intricacies just yet to use it effectively. This project&#39;s POM is:&lt;br /&gt;
&lt;br /&gt;
&lt;project xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xsi:schemalocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;&lt;br /&gt;&lt;modelversion&gt;4.0.0&lt;/modelversion&gt;&lt;br /&gt;&lt;groupid&gt;com.mycompany.app&lt;/groupid&gt;&lt;br /&gt;&lt;artifactid&gt;my-app&lt;/artifactid&gt;&lt;br /&gt;&lt;packaging&gt;jar&lt;/packaging&gt;&lt;br /&gt;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;&lt;br /&gt;&lt;name&gt;Maven Quick Start Archetype&lt;/name&gt;&lt;br /&gt;&lt;url&gt;http://maven.apache.org&lt;/url&gt;&lt;br /&gt;&lt;dependencies&gt;&lt;br /&gt;&lt;dependency&gt;&lt;br /&gt;&lt;groupid&gt;junit&lt;/groupid&gt;&lt;br /&gt;&lt;artifactid&gt;junit&lt;/artifactid&gt;&lt;br /&gt;&lt;version&gt;3.8.1&lt;/version&gt;&lt;br /&gt;&lt;scope&gt;test&lt;/scope&gt;&lt;/dependency&gt;&lt;/dependencies&gt;&lt;/project&gt;&lt;br /&gt;
&lt;br /&gt;
What did I just do?&lt;br /&gt;
&lt;br /&gt;
You executed the Maven goal archetype:create, and passed in various parameters to that goal. The prefix archetype is the plugin that contains the goal. If you are familiar with Ant, you may concieve of this as similar to a task. This goal created a simple project based upon an archetype. Suffice it to say for now that a plugin is a collection of goals with a general common purpose. For example the jboss-maven-plugin, whose purpose is &quot;deal with various jboss items&quot;.&lt;br /&gt;
Build the Project&lt;br /&gt;
&lt;br /&gt;
mvn package&lt;br /&gt;
&lt;br /&gt;
The command line will print out various actions, and end with the following:&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESSFUL&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 2 seconds&lt;br /&gt;
[INFO] Finished at: Thu Oct 05 21:16:04 CDT 2006&lt;br /&gt;
[INFO] Final Memory: 3M/6M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Unlike the first command executed (archetype:create) you may notice the second is simply a single word - package. Rather than a goal, this is a phase. A phase is a step in the build lifecycle, which is an ordered sequence of phases. When a phase is given, Maven will execute every phase in the sequence up to and including the one defined. For example, if we execute the compile phase, the phases that actually get executed are:&lt;br /&gt;
&lt;br /&gt;
1. validate&lt;br /&gt;
2. generate-sources&lt;br /&gt;
3. process-sources&lt;br /&gt;
4. generate-resources&lt;br /&gt;
5. process-resources&lt;br /&gt;
6. compile&lt;br /&gt;
&lt;br /&gt;
You may test the newly compiled and packaged JAR with the following command:&lt;br /&gt;
&lt;br /&gt;
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App&lt;br /&gt;
&lt;br /&gt;
Which will print the quintessential:&lt;br /&gt;
&lt;br /&gt;
Hello World!&lt;br /&gt;
&lt;br /&gt;
Running Maven Tools&lt;br /&gt;
Maven Phases&lt;br /&gt;
&lt;br /&gt;
Although hardly a comprehensive list, these are the most common default lifecycle phases executed.&lt;br /&gt;
&lt;br /&gt;
* validate: validate the project is correct and all necessary information is available&lt;br /&gt;
* compile: compile the source code of the project&lt;br /&gt;
* test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed&lt;br /&gt;
* package: take the compiled code and package it in its distributable format, such as a JAR.&lt;br /&gt;
* integration-test: process and deploy the package if necessary into an environment where integration tests can be run&lt;br /&gt;
* verify: run any checks to verify the package is valid and meets quality criteria&lt;br /&gt;
* install: install the package into the local repository, for use as a dependency in other projects locally&lt;br /&gt;
* deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.&lt;br /&gt;
&lt;br /&gt;
There are two other Maven lifecycles of note beyond the default list above. They are&lt;br /&gt;
&lt;br /&gt;
* clean: cleans up artifacts created by prior builds&lt;br /&gt;
&lt;br /&gt;
* site: generates site documentation for this project&lt;br /&gt;
&lt;br /&gt;
Phases are actually mapped to underlying goals. The specific goals executed per phase is dependant upon the packaging type of the project. For example, package executes jar:jar if the project type is a JAR, and war:war is the project type is - you guessed it - a WAR.&lt;br /&gt;
&lt;br /&gt;
An interesting thing to note is that phases and goals may be executed in sequence.&lt;br /&gt;
&lt;br /&gt;
mvn clean dependency:copy-dependencies package&lt;br /&gt;
&lt;br /&gt;
This command will clean the project, copy dependencies, and package the project (executing all phases up to package, of course).&lt;br /&gt;
Generating the Site&lt;br /&gt;
&lt;br /&gt;
mvn site&lt;br /&gt;
&lt;br /&gt;
This phase generates a site based upon information on the project&#39;s pom. You can look at the documentation generated under target/site.&lt;br /&gt;
Conclusion&lt;br /&gt;
&lt;br /&gt;
We hope this quick overview has piqued your interest in the versitility of Maven. Note that this is a very truncated quick-start guide. Now you are ready for more comprehensive details concerning the actions you have just performed. Check out the Maven Getting Started Guide.&lt;br /&gt;
© 2002-2010 The Apache Software Foundation - Privacy Policy&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://gajanankoram.blogspot.com/feeds/3078255299478208244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1157012889969725923/3078255299478208244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/3078255299478208244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/3078255299478208244'/><link rel='alternate' type='text/html' href='http://gajanankoram.blogspot.com/2013/03/maven-in-5-minutes.html' title='Maven in 5 Minutes'/><author><name>Gajanan Koram</name><uri>http://www.blogger.com/profile/08691619250855703723</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdqVPCt3l5QMi8-kSMwOcJfGZks1XisopM4iep_V46yOZCZa7N3Hpn9hIH_TNnrhoKNPxo4CpSGY9nC3Wosx-HZ7wLnKiAJ8C1E8faIVsB7X6ZdtQE6m9jexkwlQ3EP4/s220/IMG1111A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1157012889969725923.post-5149155542405416109</id><published>2010-03-11T01:49:00.000-08:00</published><updated>2010-03-11T01:49:52.162-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Groovy On Grails"/><title type='text'>Creating our First Grails Application (e.g. racetrack)</title><content type='html'>command prompt&amp;gt; grails create-app racetrack&lt;br /&gt;
command prompt&amp;gt; cd racetrack&lt;br /&gt;
command prompt\racetrack&amp;gt; grails run-app&lt;br /&gt;
&lt;br /&gt;
Open your browser to http://localhost:8080/racetrack/&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoH1hx58Ka3P9CYcqUhAsHX6ClsX7dMMYpxb_gUm6_N7QNhsiKHN_C3KtGKdRCCWOb9Ne9DGqWucV25DgoK0YDd1dqckp4lgv2_VlAH8lsB4FvPJoXT0l8AQfH3jzQ3P8zbjdGT4qn8u2s/s1600-h/Picture4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;193&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoH1hx58Ka3P9CYcqUhAsHX6ClsX7dMMYpxb_gUm6_N7QNhsiKHN_C3KtGKdRCCWOb9Ne9DGqWucV25DgoK0YDd1dqckp4lgv2_VlAH8lsB4FvPJoXT0l8AQfH3jzQ3P8zbjdGT4qn8u2s/s400/Picture4.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Directory Structure &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd8w6XWz-JNfwxcG3zZvdnhNRg-_0x8fo4r35nu6WHFdNKfvyNpsqFVYLNBj5C1jzcP8XNNJ0N7CXbrHR0Jom8huuaeXJ1UStMMwQA_loKQwCGjfjET4iimmwjolBMMuvYh1OlcTYUgjZz/s1600-h/Picture6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;282&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd8w6XWz-JNfwxcG3zZvdnhNRg-_0x8fo4r35nu6WHFdNKfvyNpsqFVYLNBj5C1jzcP8XNNJ0N7CXbrHR0Jom8huuaeXJ1UStMMwQA_loKQwCGjfjET4iimmwjolBMMuvYh1OlcTYUgjZz/s400/Picture6.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcb2AMImZ1NZG-h8FtNl3vYyP7vzffSmVWTwf4ARRnyFpLeJJ_f_0pEyXuV0a9aI8wFOWsMWMDGjrPw65C5MGvLbXloCSk3z5uzxapkWA9heRTkLM2_NaYWF564WvbgPJ4a_Y_4bBjaeEB/s1600-h/Picture7.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;167&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcb2AMImZ1NZG-h8FtNl3vYyP7vzffSmVWTwf4ARRnyFpLeJJ_f_0pEyXuV0a9aI8wFOWsMWMDGjrPw65C5MGvLbXloCSk3z5uzxapkWA9heRTkLM2_NaYWF564WvbgPJ4a_Y_4bBjaeEB/s400/Picture7.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;From this information, we can see that we’re basically working with two types of data –races and registrations – and that there’s a one-to-many relationship between those entities. That information will form the basis of our domain model, and the various data elements on the form will become the attributes of&lt;/div&gt;our domain classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&amp;nbsp;Create-Domain-Class&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
racetrack&amp;gt; grails create-domain-class Race&lt;br /&gt;
&lt;br /&gt;
class Race {&lt;br /&gt;
String name&lt;br /&gt;
Date startDateTime&lt;br /&gt;
String city&lt;br /&gt;
String state&lt;br /&gt;
Float distance&lt;br /&gt;
Float cost&lt;br /&gt;
Integer maxRunners = 100000&lt;br /&gt;
static hasMany = [registrations:Registration]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
racetrack&amp;gt; grails create-domain-class Registration&lt;br /&gt;
&lt;br /&gt;
class Registration {&lt;br /&gt;
Race race&lt;br /&gt;
String name&lt;br /&gt;
Date dateOfBirth&lt;br /&gt;
String gender = &#39;F&#39;&lt;br /&gt;
String emailAddress&lt;br /&gt;
String postalAddress&lt;br /&gt;
Date createdAt = new Date()&lt;br /&gt;
static belongsTo = Race&lt;br /&gt;
static optionals = [&quot;postalAddress&quot; ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Relationship Counseling&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
One to Many Relationships&lt;br /&gt;
class Race {&lt;br /&gt;
//...&lt;br /&gt;
&lt;b&gt;static hasMany =[registrations:Registration]&lt;/b&gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Registration {&lt;br /&gt;
//...&lt;br /&gt;
Race race&lt;br /&gt;
&lt;b&gt;static belongsTo = Race&lt;/b&gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;create-controller&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
racetrack&amp;gt; grails create-controller Race&lt;br /&gt;
&lt;br /&gt;
class RaceController {&lt;br /&gt;
//def index = { }&lt;br /&gt;
def scaffold = Race&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
racetrack&amp;gt; grails create-controller Registration&lt;br /&gt;
&lt;br /&gt;
class RegistrationController {&lt;br /&gt;
def scaffold = Registration&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
racetrack&amp;gt; grails run-app&lt;br /&gt;
Open your browser to http://localhost:8080/racetrack/&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXTL1yi58W2XbwHt7ItlGgF269ceeQ-bJbieXn4qAiD7x1uuVAtrX_-ng7OWaNbBrWisEQa5Y1AZe-1xcuk1mRutIVz3HnyQA-G21RGlzClTOccjguU2x1V7Zs4Uewnn7jP8-jfpveVUF9/s1600-h/res1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXTL1yi58W2XbwHt7ItlGgF269ceeQ-bJbieXn4qAiD7x1uuVAtrX_-ng7OWaNbBrWisEQa5Y1AZe-1xcuk1mRutIVz3HnyQA-G21RGlzClTOccjguU2x1V7Zs4Uewnn7jP8-jfpveVUF9/s320/res1.jpg&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzX4cE5fzbiUX8SWQahBQ4ivbGaAh4yGUPuL776Z4OwxwEZZJwJsWg_uewWNuHbE5b_KZ-vVl649VeX9BKJRejMxNWs47BVUyR2uP4PBXHN0HSiMwU8UpA_qfQyoFQPQ-urLrmuv90F8qR/s1600-h/res2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzX4cE5fzbiUX8SWQahBQ4ivbGaAh4yGUPuL776Z4OwxwEZZJwJsWg_uewWNuHbE5b_KZ-vVl649VeX9BKJRejMxNWs47BVUyR2uP4PBXHN0HSiMwU8UpA_qfQyoFQPQ-urLrmuv90F8qR/s320/res2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Scaffolding&lt;br /&gt;
Grails has a scaffolding framework that generates applications with create, read, update, and delete (CRUD) functionality with very little code, allowing you to focus on defining the Groovy domain by creating classes with properties, behaviors, and constraints. At either runtime or development time, Grails can generate the controller behavior and GSP views associated with the domain classes for CRUD functionality. At the same time, it can even generate a database schema, including tables for each of the domain classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;DataSource Configuration&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;dataSource &lt;/b&gt;{&lt;br /&gt;
pooled = true&lt;br /&gt;
driverClassName = &quot;org.hsqldb.jdbcDriver&quot;   // &quot;com.mysql.jdbc.Driver&quot;&lt;br /&gt;
username = &quot;sa“   // root&lt;br /&gt;
password = &quot;“   // root&lt;br /&gt;
// dialect = &quot;org.hibernate.dialect.MySQL5InnoDBDialect&quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;b&gt;hibernate &lt;/b&gt;{&lt;br /&gt;
cache.use_second_level_cache=true&lt;br /&gt;
cache.use_query_cache=true&lt;br /&gt;
cache.provider_class=&#39;com.opensymphony.oscache.hibernate.OSCacheProvider&#39;&lt;br /&gt;
}&lt;br /&gt;
&lt;b&gt;environments &lt;/b&gt;{// environment specific settings&lt;br /&gt;
&lt;i&gt;development &lt;/i&gt;{&lt;br /&gt;
dataSource {&lt;br /&gt;
dbCreate = &quot;create-drop&quot; // one of &#39;create&#39;, &#39;create-drop&#39;,&#39;update&#39;&lt;br /&gt;
url = &quot;jdbc:hsqldb:mem:devDB“   // &quot;jdbc:mysql://localhost:3306/testdb&quot;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;i&gt;test &lt;/i&gt;{&lt;br /&gt;
dataSource {&lt;br /&gt;
dbCreate = &quot;update&quot;&lt;br /&gt;
url = &quot;jdbc:hsqldb:mem:testDb&quot;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;i&gt;production &lt;/i&gt;{&lt;br /&gt;
dataSource {&lt;br /&gt;
dbCreate = &quot;update&quot;&lt;br /&gt;
url = &quot;jdbc:hsqldb:file:prodDb;shutdown=true&quot;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: For the mysql configuration uncommented dataSource properties for mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; describe race;&lt;br /&gt;
+----------------+-------------+----+---+-------+---------------+-------------------&lt;br /&gt;
| Field  | Type     |Null | Key |Default | Extra |&lt;br /&gt;
+----------------+-------------+----+---+-------+---------------+------------&lt;br /&gt;
|id    | bigint(20)    | NO  |PRI | NULL  | auto_increment &lt;br /&gt;
|version       | bigint(20)   | NO   |       |       |          |&lt;br /&gt;
|distance | float   | NO  |  |  |  |&lt;br /&gt;
|max_runners  | int(11)        | NO  |   |  |  |&lt;br /&gt;
|start_date_time| datetime       | NO   |  |  |  |&lt;br /&gt;
|state   | varchar(255)  | NO  |       |       |       |&lt;br /&gt;
|cost   | float   | NO  |  |  |  |&lt;br /&gt;
|name   | varchar(255)  | NO   |  |  |  |&lt;br /&gt;
|city   | varchar(255)  | NO  |  |  |       |&lt;br /&gt;
+----------------+-------------+----+---+-------+---------------+------------ &lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; describe registration;&lt;br /&gt;
+----------------+-------------+----+---+-------+---------------+------------+------&lt;br /&gt;
| Field  | Type   |Null |Key |Default | Extra  |&lt;br /&gt;
+----------------+-------------+----+---+-------+---------------+------------+------&lt;br /&gt;
|id   | bigint(20)  | NO  |PRI | NULL  | auto_increment&lt;br /&gt;
|date_of_birth  | datetime  | NO  |  |  | |&lt;br /&gt;
|version  | bigint(20)  | NO  |  |  |  |&lt;br /&gt;
|gender  | varchar(255) | NO  |  |  |  |&lt;br /&gt;
|postal_address | varchar(255) | YES |  | NULL  |  |&lt;br /&gt;
|email_address  | varchar(255) | NO  |  |  |  |&lt;br /&gt;
|created_at  | datetime  | NO  |  |  |  |&lt;br /&gt;
|race_id  | bigint(20)  | YES |MUL | NULL  |  |&lt;br /&gt;
|name   | varchar(255) | NO  |  |  |  |&lt;br /&gt;
+-----------------+------------+----+---+-------+---------------+------------+------&lt;br /&gt;
9 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
If database schema already exist , we can map table fields with our domain class&lt;br /&gt;
&lt;br /&gt;
class Race {&lt;br /&gt;
//…&lt;br /&gt;
static hasMany = [registrations:Registration]&lt;br /&gt;
static mapping = {&lt;br /&gt;
table ‘race_tbl‘   // map existing table with domain class&lt;br /&gt;
columns {         // map Columns &lt;br /&gt;
id column: &#39;OID‘&lt;br /&gt;
name column: ‘name’&lt;br /&gt;
startDateTime column: ‘cr_time’&lt;br /&gt;
city column: ‘city’&lt;br /&gt;
state column: ‘st’&lt;br /&gt;
distance column: ‘distance’&lt;br /&gt;
cost column: ‘prize’&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Adding Custom constraints :: &lt;br /&gt;
&lt;br /&gt;
class Race {&lt;br /&gt;
//...&lt;br /&gt;
static constraints = {&lt;br /&gt;
name(maxLength:50,blank:false)&lt;br /&gt;
//startDateTime(min:new Date())&lt;br /&gt;
city(maxLength:30,blank:false)&lt;br /&gt;
distance(min:3.1f,max:100f)&lt;br /&gt;
cost(min:0f,max:999.99f)&lt;br /&gt;
startDateTime(validator: {return (it &amp;gt; new Date())})&lt;br /&gt;
//custom validator&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVvdLwrtv9JINlHRaw69tJ26wKIQ-7MzgEHCDUg7ixGXgi6t0ii066WHXn2BEJnuGbY3sY0ra9slSIZ1OymBAhoY7xFs2WeOdrJfOWphS5DImk3PWQdO3tXqaSkf4uk4cR0DWZ_Xknqexw/s1600-h/res3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVvdLwrtv9JINlHRaw69tJ26wKIQ-7MzgEHCDUg7ixGXgi6t0ii066WHXn2BEJnuGbY3sY0ra9slSIZ1OymBAhoY7xFs2WeOdrJfOWphS5DImk3PWQdO3tXqaSkf4uk4cR0DWZ_Xknqexw/s320/res3.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Grails creates a new controller instance for each request, and the&lt;br /&gt;
controller only lives long enough to process that request.&lt;br /&gt;
you can write your custom code by adding methods in  controller and gsp pages to rendering the ouput result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Fun with URLs&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
http://localhost:8080/racetrack/race/show/2&lt;br /&gt;
class RaceController { &lt;br /&gt;
 //...    //View : racetrack/race/show&lt;br /&gt;
 def show = {&lt;br /&gt;
  [ race : Race.get( params.id ) ]&lt;br /&gt;
 }&lt;br /&gt;
 def save = {&lt;br /&gt;
  def race = new Race()&lt;br /&gt;
  race.properties = params&lt;br /&gt;
  if(race.save()) {&lt;br /&gt;
   redirect(action:show,id:race.id)&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
   render(view:&#39;create&#39;,model:[race:race])&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
}</content><link rel='replies' type='application/atom+xml' href='http://gajanankoram.blogspot.com/feeds/5149155542405416109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1157012889969725923/5149155542405416109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/5149155542405416109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/5149155542405416109'/><link rel='alternate' type='text/html' href='http://gajanankoram.blogspot.com/2010/02/creating-our-first-grails-application.html' title='Creating our First Grails Application (e.g. racetrack)'/><author><name>Gajanan Koram</name><uri>http://www.blogger.com/profile/08691619250855703723</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdqVPCt3l5QMi8-kSMwOcJfGZks1XisopM4iep_V46yOZCZa7N3Hpn9hIH_TNnrhoKNPxo4CpSGY9nC3Wosx-HZ7wLnKiAJ8C1E8faIVsB7X6ZdtQE6m9jexkwlQ3EP4/s220/IMG1111A.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoH1hx58Ka3P9CYcqUhAsHX6ClsX7dMMYpxb_gUm6_N7QNhsiKHN_C3KtGKdRCCWOb9Ne9DGqWucV25DgoK0YDd1dqckp4lgv2_VlAH8lsB4FvPJoXT0l8AQfH3jzQ3P8zbjdGT4qn8u2s/s72-c/Picture4.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1157012889969725923.post-8249865661901282882</id><published>2010-02-09T01:30:00.000-08:00</published><updated>2010-02-09T01:30:09.534-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Groovy On Grails"/><title type='text'>Grails Basic</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKLx3pkPg0fwU9WiaFsIp3SwcTpj6xXKMxtWn4lzz8FrCXRdvVVjM-F-zL9WyWj21kjksxmcKarzF9os79QmCxH18LIpe01JDOb4tWur2FpqwUNNTT10UX6QK63urQgRuGzAQdEWL0emJW/s1600-h/Picture1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;99&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKLx3pkPg0fwU9WiaFsIp3SwcTpj6xXKMxtWn4lzz8FrCXRdvVVjM-F-zL9WyWj21kjksxmcKarzF9os79QmCxH18LIpe01JDOb4tWur2FpqwUNNTT10UX6QK63urQgRuGzAQdEWL0emJW/s320/Picture1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Web Framework inspired by RoR(Ruby On Rails)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Latest version is 1.1.1.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt; Based on open source technologies like Spring, Hibernate and SiteMesh&lt;br /&gt;
Grails = Spring MVC 2.5.1 + Hibernate 3 + SiteMesh2.3&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Newbie&#39;s are unaware that Grails is full and full Spring!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Provides several commands to auto generate common requirements in a web app.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Comes bundled with HSQLDB and Jetty web Server&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Focus is on rapid development and simplicity&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Coding by convention paradigm&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Reduce the need for configuration files and other boilerplate code&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;File names are important &lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Features&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Rapid web application development&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Follow spring MVC framework &lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;-Clearly separates business, navigation and presentation logic Proven mechanism for building a thin, clean web-tier&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Both gsp and jsp are supported.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;AJAX Support&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;Supports prototype, YUI, DOJO&lt;/li&gt;
&lt;li&gt;Use render method in your groovy code to render text, HTML, JSON&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Has lots of plug-in already available like  quartz, acegi , RichUi etc…&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;grails create-plugin &lt;name&gt;!&lt;/name&gt;&lt;/li&gt;
&lt;li&gt;&lt;name&gt; grails install-plugin &lt;name&gt;&lt;/name&gt;&lt;/name&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Grails architecture&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvnUmdj0KwZMfr8zupyBWt_ZOLLrjxS2Kcx-KhfQVIm3WvF0uuETZaotYWbXn2f5m911tg7DJ1CwgPX0_Q1i13c2HxsnEmPEsgAe1r-HuZlCFGV_5WZlAkYV7EHSWwTTMP_wcRfB8a6aKd/s1600-h/Picture2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;131&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvnUmdj0KwZMfr8zupyBWt_ZOLLrjxS2Kcx-KhfQVIm3WvF0uuETZaotYWbXn2f5m911tg7DJ1CwgPX0_Q1i13c2HxsnEmPEsgAe1r-HuZlCFGV_5WZlAkYV7EHSWwTTMP_wcRfB8a6aKd/s400/Picture2.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioy38ae2XcYa3YowXl3WcjszTRMuguEZz9CKU2vK9AM_M7ZyD9ZFM3t5eRGm09bwdesQVAXF1n1BO7lCPGbohO5a4xNQRtBOGwefmUairdDzzoVE5SK9DD3n4zfYFiGiPJN8WRADLe7dU4/s1600-h/Picture3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioy38ae2XcYa3YowXl3WcjszTRMuguEZz9CKU2vK9AM_M7ZyD9ZFM3t5eRGm09bwdesQVAXF1n1BO7lCPGbohO5a4xNQRtBOGwefmUairdDzzoVE5SK9DD3n4zfYFiGiPJN8WRADLe7dU4/s400/Picture3.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;In Figure,&lt;br /&gt;
a web browser making a request to a Jetty web container. The container forwards the request on to a controller in a similar fashion to the standard MVC model. The controller may set or use data from a domain class (model). As all Grails domain classes are persistable through the GORM framework.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gajanankoram.blogspot.com/feeds/8249865661901282882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1157012889969725923/8249865661901282882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/8249865661901282882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/8249865661901282882'/><link rel='alternate' type='text/html' href='http://gajanankoram.blogspot.com/2010/02/grails-basic.html' title='Grails Basic'/><author><name>Gajanan Koram</name><uri>http://www.blogger.com/profile/08691619250855703723</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdqVPCt3l5QMi8-kSMwOcJfGZks1XisopM4iep_V46yOZCZa7N3Hpn9hIH_TNnrhoKNPxo4CpSGY9nC3Wosx-HZ7wLnKiAJ8C1E8faIVsB7X6ZdtQE6m9jexkwlQ3EP4/s220/IMG1111A.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKLx3pkPg0fwU9WiaFsIp3SwcTpj6xXKMxtWn4lzz8FrCXRdvVVjM-F-zL9WyWj21kjksxmcKarzF9os79QmCxH18LIpe01JDOb4tWur2FpqwUNNTT10UX6QK63urQgRuGzAQdEWL0emJW/s72-c/Picture1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1157012889969725923.post-6951815955642194510</id><published>2009-11-04T06:36:00.000-08:00</published><updated>2009-11-04T06:46:56.691-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ant"/><title type='text'>Ant Basic</title><content type='html'>&lt;div&gt;&lt;h1&gt;Ant Basic&lt;/h1&gt;&lt;hr /&gt;Ant (originally an acronym for Another Neat Tool), is a build tool with special support for the Java programming language but can be used for just about everything. Ant is platform-independent; it is written purely in Java. Ant is particularly good at automating complicated repetitive tasks and thus is well suited for automating&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Ant Installation&lt;/h1&gt;&lt;hr /&gt;&lt;h3&gt;Configuration for Windows Environment&lt;/h3&gt;1. Download latest binary zip from http://jakarta.apache.org/ant/.&lt;br /&gt;
2. Unzip Binary in any folder, in my end it unzip on c:\&lt;br /&gt;
E.g. C:\apache-ant-1.7.0&lt;br /&gt;
3. Setting Environment variable: Right Click on My Computer -&amp;gt;Properties-&amp;gt;Advanced tab-&amp;gt;Environment variable-&amp;gt;Create User variable&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;&lt;b&gt;Variable&lt;/b&gt;&lt;br /&gt;
&lt;/td&gt; &lt;td&gt;&lt;b&gt;Value&lt;/b&gt;&lt;br /&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;ANT_HOME&lt;br /&gt;
&lt;/td&gt; &lt;td&gt;C:\apache-ant-1.7.0 &lt;br /&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Path&lt;br /&gt;
&lt;/td&gt; &lt;td&gt;%JAVA_HOME%\bin; %ANT_HOME%\bin; %ANT_HOME%\lib;&lt;br /&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;4. on command-line type c:\ant to verify proper configuration&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Working with Ant &lt;/h1&gt;&lt;hr /&gt;&lt;h3&gt;For typical Java Project building By Ant script&lt;/h3&gt;&lt;br /&gt;
1. To create test project here is common folder and file &lt;br /&gt;
src: For project source files.&lt;br /&gt;
build.xml: ant script for clean/compile/create jar etc.. file &lt;br /&gt;
2. add a simple java class HelloWorld.java  in src/com/myapp&lt;br /&gt;
package com.myapp;&lt;br /&gt;
&lt;br /&gt;
public class HelloWorld {&lt;br /&gt;
public static void main(String[] args) {&lt;br /&gt;
System.out.println(&quot;Hello World&quot;);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
3. By default Ant uses build.xml as the name for a buildfile, so our .\build.xml would be:&lt;br /&gt;
&lt;br /&gt;
&lt;textarea cols=&quot;40&quot; id=&quot;xmltext&quot; name=&quot;comments&quot; readonly=&quot;true&quot; rows=&quot;6&quot;&gt;&lt;br /&gt;
&lt;?xml version=&quot;1.0&quot;?&gt;&lt;br /&gt;
&lt;project name=&quot;test&quot; default=&quot;compile&quot; basedir=&quot;.&quot;&gt;&lt;br /&gt;
&lt;property name=&quot;src&quot; value=&quot;.&quot;/&gt;&lt;br /&gt;
&lt;property name=&quot;build&quot; value=&quot;build&quot;/&gt;&lt;br /&gt;
&lt;target name=&quot;init&quot;&gt;&lt;br /&gt;
&lt;mkdir dir=&quot;${build}&quot;/&gt;&lt;br /&gt;
&lt;/target&gt;&lt;br /&gt;
&lt;target name=&quot;compile&quot; depends=&quot;init&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;javac srcdir=&quot;${src}&quot; destdir=&quot;${build}&quot;/&gt;&lt;br /&gt;
&lt;/target&gt;&lt;br /&gt;
&lt;/project&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
Note: plz remove br  tag&lt;br /&gt;
&lt;br /&gt;
4. on command promt type c:testprj&amp;gt;ant compile &lt;br /&gt;
It will create a new folder named build, having the entire compile file from the source folder&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Creating a jar-file&lt;/h3&gt;Creating a jar-file is not very difficult. But creating a startable jar-file needs more steps: create a manifest-file containing the start class, creating the target directory and archiving the files. &lt;br /&gt;
&lt;textarea cols=&quot;40&quot; id=&quot;xmltext1&quot; name=&quot;comments&quot; readonly=&quot;true&quot; rows=&quot;15&quot;&gt;&lt;br /&gt;
&lt;!--
&lt;?xml version=&quot;1.0&quot;?&gt;&lt;br /&gt;
&lt;project name=&quot;test&quot; default=&quot;compile&quot; basedir=&quot;.&quot;&gt;&lt;br /&gt;
&lt;property name=&quot;src.dir&quot;     value=&quot;src&quot;/&gt;&lt;br /&gt;
&lt;property name=&quot;build.dir&quot;   value=&quot;build&quot;/&gt;&lt;br /&gt;
&lt;property name=&quot;classes.dir&quot; value=&quot;${build.dir}/classes&quot;/&gt;&lt;br /&gt;
&lt;property name=&quot;jar.dir&quot;     value=&quot;${build.dir}/jar&quot;/&gt;&lt;br /&gt;
&lt;property name=&quot;lib.dir&quot;     value=&quot;lib&quot;/&gt;&lt;br /&gt;
&lt;property name=&quot;main-class”  value=&quot;myapp.HelloWorld&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;path id=&quot;classpath&quot;&gt;&lt;br /&gt;
&lt;fileset dir=&quot;${lib.dir}&quot; includes=&quot;**/*.jar&quot;/&gt;&lt;br /&gt;
&lt;/path&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;target name=&quot;compile&quot;&gt;&lt;br /&gt;
&lt;mkdir dir=&quot;${classes.dir}&quot;/&gt;&lt;br /&gt;
&lt;javac srcdir=&quot;${src.dir}&quot; destdir=&quot;${classes.dir}&quot; classpathref=&quot;classpath&quot;/&gt;&lt;br /&gt;
&lt;copy todir=&quot;${classes.dir}&quot;&gt;&lt;br /&gt;
&lt;fileset dir=&quot;${src.dir}&quot; excludes=&quot;**/*.java&quot;/&gt;&lt;br /&gt;
&lt;/copy&gt;&lt;br /&gt;
&lt;/target&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;target name=&quot;jar&quot; depends=&quot;init&quot;&gt;&lt;br /&gt;
&lt;!-- Compile the java code --&gt;&lt;br /&gt;
&lt;mkdir dir=&quot;build/jar&quot;/&gt;&lt;br /&gt;
&lt;jar destfile=&quot;${jar.dir}/HelloWorld.jar&quot; basedir=&quot;${classes}&quot;&gt;&lt;br /&gt;
&lt;manifest&gt;&lt;br /&gt;
&lt;attribute name=&quot;Main-Class&quot; value=&quot;${main-class}&quot;/&gt;&lt;br /&gt;
&lt;/manifest&gt;&lt;br /&gt;
&lt;/jar&gt;&lt;br /&gt;
&lt;/target&gt;&lt;br /&gt;
&lt;target name=&quot;run&quot;&gt;&lt;br /&gt;
&lt;java jar=&quot;${jar.dir}/HelloWorld.jar&quot; fork=&quot;true&quot;/&gt;&lt;br /&gt;
&lt;/target&gt;&lt;br /&gt;
&lt;/project&gt;&lt;br /&gt;
&lt;br /&gt;
--&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
Note: plz remove br  tag&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Creating a War-file&lt;/h3&gt;for typical eclipse web project the folder structure is &lt;br /&gt;
testProject&lt;br /&gt;
-src : For Project source file &lt;br /&gt;
-WebContent&lt;br /&gt;
-- WEB-INF&lt;br /&gt;
---- lib : For compiled/output files produced (by Ant).&lt;br /&gt;
---- web.xml&lt;br /&gt;
-- META-INF&lt;br /&gt;
-- html/jsp/css/javascript files&lt;br /&gt;
&lt;br /&gt;
to create a ant script add build.xml &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;textarea cols=&quot;40&quot; id=&quot;xmltext2&quot; name=&quot;comments&quot; readonly=&quot;true&quot; rows=&quot;15&quot;&gt;&lt;br /&gt;
&lt;!-- 



&lt;?xml version=&quot;1.0&quot;?&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;project name=&quot;test-prj&quot; basedir=&quot;.&quot; default=&quot;deploy&quot;&gt;&lt;br /&gt;
    &lt;property name=&quot;src.dir&quot;     value=&quot;src&quot;/&gt;&lt;br /&gt;
    &lt;property name=&quot;build.dir&quot;   value=&quot;build&quot;/&gt;&lt;br /&gt;
    &lt;property name=&quot;classes.dir&quot; value=&quot;${build.dir}/classes&quot;/&gt;&lt;br /&gt;
    &lt;property name=&quot;web.dir&quot;     value=&quot;WebContent&quot;/&gt;&lt;br /&gt;
    &lt;property name=&quot;lib.dir&quot;     value=&quot;${web.dir}/WEB-INF/lib&quot;/&gt;&lt;br /&gt;
    &lt;property name=&quot;war.dir&quot;   value=&quot;warfile&quot;/&gt;&lt;br /&gt;
    &lt;property name=&quot;tomcat.dir&quot;  value=&quot;C:\Server\jakarta-tomcat-5.5.9\webapps&quot;/&gt;&lt;br /&gt;
 &lt;br /&gt;
    &lt;path id=&quot;classpath&quot;&gt;&lt;br /&gt;
        &lt;fileset dir=&quot;${lib.dir}&quot; includes=&quot;**/*.jar&quot;/&gt;&lt;br /&gt;
    &lt;/path&gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;target name=&quot;clean&quot;&gt;&lt;br /&gt;
        &lt;delete dir=&quot;${build.dir}&quot;/&gt;&lt;br /&gt;
     &lt;delete dir=&quot;${war.dir}&quot;/&gt;&lt;br /&gt;
    &lt;/target&gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;target name=&quot;compile&quot;&gt;&lt;br /&gt;
        &lt;mkdir dir=&quot;${classes.dir}&quot;/&gt;&lt;br /&gt;
        &lt;javac srcdir=&quot;${src.dir}&quot; destdir=&quot;${classes.dir}&quot; classpathref=&quot;classpath&quot;/&gt;&lt;br /&gt;
  &lt;copy todir=&quot;${classes.dir}&quot;&gt;&lt;br /&gt;
            &lt;fileset dir=&quot;${src.dir}&quot; excludes=&quot;**/*.java&quot;/&gt;&lt;br /&gt;
        &lt;/copy&gt;&lt;br /&gt;
    &lt;/target&gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;target name=&quot;unpack&quot;&gt;&lt;br /&gt;
  &lt;unwar src=&quot;${war.dir}/${ant.project.name}.war&quot; dest=&quot;${ant.project.name}&quot; /&gt;&lt;br /&gt;
 &lt;/target&gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;target name=&quot;create&quot;&gt;&lt;br /&gt;
  &lt;mkdir dir=&quot;${war.dir}&quot;/&gt;&lt;br /&gt;
  &lt;war destfile=&quot;${war.dir}/${ant.project.name}.war&quot; webxml=&quot;${web.dir}/WEB-INF/web.xml&quot; update=&quot;true&quot;&gt;&lt;br /&gt;
   &lt;classes dir=&quot;build\classes&quot;/&gt;&lt;br /&gt;
   &lt;fileset dir=&quot;${web.dir}&quot;&gt;&lt;br /&gt;
    &lt;exclude name=&quot;WEB-INF/web.xml&quot;/&gt;&lt;br /&gt;
   &lt;/fileset&gt;&lt;br /&gt;
  &lt;/war&gt;&lt;br /&gt;
 &lt;/target&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;target name=&quot;copy&quot;&gt;&lt;br /&gt;
  &lt;copy todir=&quot;${tomcat.dir}&quot; overwrite=&quot;true&quot;&gt;&lt;br /&gt;
   &lt;fileset dir=&quot;${war.dir}&quot;&gt;&lt;br /&gt;
    &lt;include name=&quot;*.war&quot;/&gt;&lt;br /&gt;
   &lt;/fileset&gt;&lt;br /&gt;
  &lt;/copy&gt;&lt;br /&gt;
 &lt;/target&gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;target name=&quot;deploy&quot;&gt;&lt;br /&gt;
  &lt;antcall target=&quot;clean&quot;/&gt;&lt;br /&gt;
  &lt;antcall target=&quot;compile&quot;/&gt;&lt;br /&gt;
  &lt;antcall target=&quot;create&quot;/&gt;&lt;br /&gt;
  &lt;antcall target=&quot;copy&quot;/&gt;&lt;br /&gt;
 &lt;/target&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/project&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&gt;&lt;br /&gt;
&lt;/textarea&gt;&lt;br /&gt;
Note: plz remove br  tag&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gajanankoram.blogspot.com/feeds/6951815955642194510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1157012889969725923/6951815955642194510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/6951815955642194510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/6951815955642194510'/><link rel='alternate' type='text/html' href='http://gajanankoram.blogspot.com/2009/11/ant-basic.html' title='Ant Basic'/><author><name>Gajanan Koram</name><uri>http://www.blogger.com/profile/08691619250855703723</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdqVPCt3l5QMi8-kSMwOcJfGZks1XisopM4iep_V46yOZCZa7N3Hpn9hIH_TNnrhoKNPxo4CpSGY9nC3Wosx-HZ7wLnKiAJ8C1E8faIVsB7X6ZdtQE6m9jexkwlQ3EP4/s220/IMG1111A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1157012889969725923.post-3288986232681591035</id><published>2009-07-07T21:31:00.000-07:00</published><updated>2009-07-08T21:46:46.507-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Groovy On Grails"/><title type='text'>Groovy On Grails setup on windows</title><content type='html'>&lt;p style=&quot;font-weight: bold;&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;Groo&lt;/span&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;vy On Grails Configuration for  Windows Environment&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold;&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;=&gt; Download Java SE Development Kit &lt;a href=&quot;http://java.sun.com/javase/downloads/index.jsp#need&quot;&gt;(JDK 1.4.x or more )&lt;/a&gt; installer for windows&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;       &lt;span style=&quot;font-size:130%;&quot;&gt;( &lt;a href=&quot;http://java.sun.com/javase/downloads/index.jsp&quot;&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;=&gt; Download Latest Version Groovy 1.5.x( &lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;http://groovy.codehaus.org&lt;/a&gt;) Binary Zip.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;=&gt; Download Latest Version Grails 1.1.x(&lt;a href=&quot;http://www.grails.org/&quot;&gt;http://www.grails.org&lt;/a&gt;) Binary Zip.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;=&gt; Install JDK &lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;=&gt; Unzip Binary in any folder, in my end it unzip on c:\installation.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;                        &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Eg.   c:\installation\groovy1.5.x&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;                            &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;c:\installation\grails1.1.x&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;                            &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;c:\&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Program Files\Java&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;\ jdk1.5.9&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;=&gt;Set Environment variable for Groovy on Grails and Java&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Right Click on &lt;b&gt;My Computer &lt;/b&gt;-&gt;Properties-&gt;Advanced tab-&gt;Environment variable&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Create User variable&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;     &lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;b&gt;&lt;span style=&quot;&quot;&gt;     &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Variable                                                             &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;                                                               &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;JAVA_HOME&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;                                                                                     &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;c:\Program Files\Java\jdk1.5.9&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;GROOVY_HOME&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;                                                                      &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;c:\installation\groovy1.5.x&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;GRAILS_HOME&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;                                  &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;c:\installation\grails1.1.x&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;path&lt;span style=&quot;&quot;&gt;                       &lt;/span&gt;&lt;span style=&quot;font-size:8;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;%JAVA_HOME%\bin;%GROOVY_HOME%\bin;%GRAILS_HOME% \bin;%GRAILS_HOME%\ant\bin&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:8;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;=&gt; Testing Configuration&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;      &lt;/span&gt;Check with &lt;b&gt;START-&gt;run-&gt;cmd&lt;/b&gt; &lt;span style=&quot;&quot;&gt; &lt;/span&gt;. you will get the command Prompt.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;           &lt;/span&gt;Run &lt;span style=&quot;font-weight: bold;&quot;&gt;c:\&gt;javac&lt;/span&gt;&lt;span style=&quot;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;&quot;&gt;     &lt;/span&gt;&lt;span style=&quot;&quot;&gt; &lt;/span&gt;:&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;you will get the java option that means &lt;st1:city st=&quot;on&quot;&gt;&lt;st1:place st=&quot;on&quot;&gt;ur&lt;/st1:place&gt;&lt;/st1:city&gt; jdk is set for &lt;span style=&quot;&quot;&gt;     &lt;/span&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;&quot;&gt;   &lt;/span&gt;development.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;           &lt;/span&gt;Run &lt;span style=&quot;font-weight: bold;&quot;&gt;c:\&gt;grails help&lt;/span&gt; :&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;you will get Grails command line artifacts for creating grails &lt;span style=&quot;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;&quot;&gt;    &lt;/span&gt;application &lt;span style=&quot;&quot;&gt; &lt;/span&gt;it classes &lt;span style=&quot;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;etc..&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;Examples:&lt;br /&gt;grails dev run-app&lt;br /&gt;grails create-app books&lt;br /&gt;&lt;br /&gt;Available Targets (type grails help &#39;target-name&#39; for more info):&lt;br /&gt;grails bootstrap&lt;br /&gt;grails bug-report&lt;br /&gt;grails clean&lt;br /&gt;grails compile&lt;br /&gt;grails console&lt;br /&gt;grails create-app&lt;br /&gt;grails create-controller&lt;br /&gt;grails create-domain-class&lt;br /&gt;grails create-filters&lt;br /&gt;grails create-integration-test&lt;br /&gt;grails create-plugin&lt;br /&gt;grails create-script&lt;br /&gt;grails create-service&lt;br /&gt;grails create-tag-lib&lt;br /&gt;grails create-unit-test&lt;br /&gt;grails doc&lt;br /&gt;grails generate-all&lt;br /&gt;grails generate-controller&lt;br /&gt;grails generate-views&lt;br /&gt;grails help&lt;br /&gt;grails init&lt;br /&gt;grails install-plugin&lt;br /&gt;grails install-templates&lt;br /&gt;grails list-plugins&lt;br /&gt;grails package&lt;br /&gt;grails package-plugin&lt;br /&gt;grails plugin-info&lt;br /&gt;grails release-plugin&lt;br /&gt;grails run-app&lt;br /&gt;grails run-war&lt;br /&gt;grails schema-export&lt;br /&gt;grails set-proxy&lt;br /&gt;grails set-version&lt;br /&gt;grails shell&lt;br /&gt;grails stats&lt;br /&gt;grails test-app&lt;br /&gt;grails uninstall-plugin&lt;br /&gt;grails upgrade&lt;br /&gt;grails war&lt;br /&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;=&gt; Grails Sample Applications using Scaffold. &lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;    Goto command prompt&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;    &lt;span style=&quot;font-weight: bold;&quot;&gt; c:\&gt; grails create-app EMP&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;     c:\&gt;cd EMP&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;    u ll  see the Folder structure is created for grails project , it follows MVC design  pattern,&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt; so u can manage your code properly like we can separate thing, all presentation logic we keep in grails-app/view folder , we can add model class in grails-app/domain folder, controller class added to perform  actions on http request/response  keep in grails-app/Controller folder, grails provide good command line artifact to perform this action ...&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;    u can simply run   &lt;span style=&quot;font-weight: bold;&quot;&gt;  c:\EMP&gt; grails run-app &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;    and &lt;span style=&quot;font-weight: bold;&quot;&gt;http://localhost:8080/EMP&lt;/span&gt; u will see the index page of create application..&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;added a domain class&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; c:\EMP&gt; grails create-domain-class  User   -&gt;&lt;/span&gt;this command is create a User Class .&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;u can Edit this &lt;span style=&quot;font-weight: bold;&quot;&gt;grails-app/domain/User.groovy &lt;/span&gt;class , add  attribute&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;class User{&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;           String userName&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;           String password&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;           static constraints = {}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;similarly create Controller for User.Class&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;c:\EMP&gt; grails create-controller User&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;u can Edit this &lt;/span&gt;grails-app/controller/UserController.groovy &lt;span style=&quot;font-weight: normal;&quot;&gt;class ,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;class UserController&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt; {&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;       def scaffold = User&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;now save this classes and run application &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;c:\EMP&gt; grails run-app&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;hit  &lt;span style=&quot;font-weight: bold;&quot;&gt;http://localhost:8080/EMP&lt;/span&gt; on browser  u will see the index page  with user controller action  link, u can now easily perform Add/Modify/Delete/List feature&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;   &lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://gajanankoram.blogspot.com/feeds/3288986232681591035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1157012889969725923/3288986232681591035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/3288986232681591035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/3288986232681591035'/><link rel='alternate' type='text/html' href='http://gajanankoram.blogspot.com/2009/07/groovy-on-grails-setup-on-windows.html' title='Groovy On Grails setup on windows'/><author><name>Gajanan Koram</name><uri>http://www.blogger.com/profile/08691619250855703723</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdqVPCt3l5QMi8-kSMwOcJfGZks1XisopM4iep_V46yOZCZa7N3Hpn9hIH_TNnrhoKNPxo4CpSGY9nC3Wosx-HZ7wLnKiAJ8C1E8faIVsB7X6ZdtQE6m9jexkwlQ3EP4/s220/IMG1111A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1157012889969725923.post-7740609538631131798</id><published>2009-06-25T22:28:00.000-07:00</published><updated>2009-07-05T20:58:46.878-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Groovy On Grails"/><title type='text'>Groovy</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7b7M5UsT8e6MRK728wWf-YM4_uWvvh24hns8gWSJZtzvFyAHuLGS8LoUzz0ncqFE6ia2SsjuLaUBQfH6JxJJZTRcq8wW1N_N-hmrSBTdFC7wYrJsm5yDitU6MMHhqNcUR02SVqVrPRe8Z/s1600-h/medium.png&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 203px; height: 100px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7b7M5UsT8e6MRK728wWf-YM4_uWvvh24hns8gWSJZtzvFyAHuLGS8LoUzz0ncqFE6ia2SsjuLaUBQfH6JxJJZTRcq8wW1N_N-hmrSBTdFC7wYrJsm5yDitU6MMHhqNcUR02SVqVrPRe8Z/s320/medium.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5351504192306202418&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* Scripting / Agile Dynamic Language for JVM&lt;br /&gt;&lt;br /&gt;* Features inspired from Python, Ruby.&lt;br /&gt;&lt;br /&gt;* Syntax very close to Java and Same OO model as Java&lt;br /&gt;&lt;br /&gt;* Seamless integration with all existing Java classes and libraries.&lt;br /&gt;&lt;br /&gt;* Groovy code Compiles to Java bytecode.&lt;br /&gt;&lt;br /&gt;* Can run on .Net 2.0 using IKVM&lt;br /&gt;&lt;br /&gt;* Latest version 1.6&lt;br /&gt;&lt;br /&gt;* http://groovy.codehaus.org&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;br /&gt;Groovy Basic&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;1. Closures&lt;br /&gt;&lt;br /&gt;2. Dynamic Methods&lt;br /&gt;&lt;br /&gt;3. List &amp; Maps&lt;br /&gt;&lt;br /&gt;4. Better XML/Swing Capabilities&lt;br /&gt;&lt;br /&gt;5. Permits operator Overloading&lt;br /&gt;&lt;br /&gt;6. GString: interpolated String&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;br /&gt;1. Closure :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;=&gt; Closures are reusable blocks of code&lt;br /&gt;&lt;br /&gt;=&gt; One or more program statements enclosed in curly brackets “{}”&lt;br /&gt;&lt;br /&gt;=&gt; Closures do not require a class or a method name&lt;br /&gt;&lt;br /&gt;=&gt; Can be passed around like variables&lt;br /&gt;&lt;br /&gt;=&gt; The statements within a closure are not executed until the call() is made&lt;br /&gt;&lt;br /&gt;=&gt; Return is using an explicit return statement or the value of the last executed statement.&lt;br /&gt;&lt;br /&gt;=&gt; E.g. square = { it * it } //“it” implicit parameter representing the passed value.&lt;br /&gt;&lt;br /&gt;square (4) // Output = 16&lt;br /&gt;&lt;br /&gt;def name = &quot;Gaju&quot;&lt;br /&gt;&lt;br /&gt;def printClosure = { println &quot;Hello, ${name}&quot; } //output : Hello, Gaju&lt;br /&gt;&lt;br /&gt;//Passing Parameters to Closures&lt;br /&gt;&lt;br /&gt;def printClosure = {name -&gt; println &quot;Hello, ${name}&quot; }&lt;br /&gt;&lt;br /&gt;printClosure(&quot;Gaju&quot;) //output : Hello, Gaju&lt;br /&gt;&lt;br /&gt;def list = [‘hritbh’, ‘sagar’, ‘somkant’]&lt;br /&gt;&lt;br /&gt;def sayHello = {println it}&lt;br /&gt;&lt;br /&gt;list.each(sayHello)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Sample class &amp; script:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;class Speaker {&lt;br /&gt;&lt;br /&gt;String name&lt;br /&gt;&lt;br /&gt;def age&lt;br /&gt;&lt;br /&gt;String toString() { &quot;MY name is $name and I&#39;m $age“ }&lt;br /&gt;&lt;br /&gt;public static void main(String []args){&lt;br /&gt;&lt;br /&gt;def speaker = new Speaker(name:&#39;Gajanan Koram&#39;, age:27)&lt;br /&gt;&lt;br /&gt;println speaker.toString()&lt;br /&gt;&lt;br /&gt;def speakers = [new Speaker(name:&#39;Rod Johnson&#39;, age:36),&lt;br /&gt;&lt;br /&gt;new Speaker(name:&#39;Guillaume Laforge&#39;, age:29)]&lt;br /&gt;&lt;br /&gt;def upper = { it.toString().toUpperCase() }&lt;br /&gt;&lt;br /&gt;speakers.findAll { name -&gt; name =~ /.*od.*/ }.collect(upper).each { println it }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&lt;br /&gt;Compile code : groovyc Speaker.groovy&lt;br /&gt;&lt;br /&gt;run : groovy Speaker&lt;br /&gt;&lt;br /&gt;output : MY name is Gajanan Koram and I&#39;m 27&lt;br /&gt;&lt;br /&gt;MY NAME IS ROD JOHNSON AND I&#39;M 36&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;2. Dynamic Methods:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;=&gt; Add new methods to an object at runtime&lt;br /&gt;&lt;br /&gt;=&gt; Intercept non-existent method calls :&lt;br /&gt;&lt;br /&gt;• Tracing and debugging&lt;br /&gt;&lt;br /&gt;• Mocks and stubs&lt;br /&gt;&lt;br /&gt;=&gt; Meta-Object Protocol : changes structure and behaviour at runtime&lt;br /&gt;&lt;br /&gt;class webcamp{&lt;br /&gt;&lt;br /&gt;def haveTea() {&lt;br /&gt;&lt;br /&gt;println&quot;Time for tea&quot;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;camp = new webcamp()&lt;br /&gt;&lt;br /&gt;camp.haveTea()&lt;br /&gt;&lt;br /&gt;Eg. Add a new method “haveSamosa”&lt;br /&gt;&lt;br /&gt;camp = new webcamp()&lt;br /&gt;&lt;br /&gt;camp.haveTea()&lt;br /&gt;&lt;br /&gt;webcamp.metaClass.haveSamosa= { -&gt;&lt;br /&gt;&lt;br /&gt;println&quot;Have Samosaalso&quot;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;camp = new webcamp()&lt;br /&gt;&lt;br /&gt;// Create a fresh object since the class has changed!&lt;br /&gt;&lt;br /&gt;camp.haveSamosa()&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;3. Lists and Maps:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;=&gt; Lists look like arrays but are of type java.util.List plus new methods.&lt;br /&gt;&lt;br /&gt;[1,2,3] + [1] == [1,2,3,1] &lt;br /&gt;[1,2,3] &lt;&lt; 1 =&quot;=&quot;&gt;&lt;br /&gt;[1,2,3,1] - [1] == [2,3] &lt;br /&gt;[1,2,3] * 2 == [1,2,3,1,2,3]&lt;br /&gt;[1,[2,3]].flatten() == [1,2,3]&lt;br /&gt;[1,2,3].reverse() == [3,2,1]&lt;br /&gt;[1,2,3].intersect([4,3,1]) == [3,1] &lt;br /&gt;[1,2,3].collect{ it+3 } == [4,5,6]&lt;br /&gt;[1,2,3,1].unique().size() == 3 &lt;br /&gt;[1,2,3,1].count(1) == 2&lt;br /&gt;[1,2,3,4].min() == 1 &lt;br /&gt;[1,2,3,4].max() == 4&lt;br /&gt;[1,2,3,4].sum() == 10 &lt;br /&gt;[4,2,1,3].sort() == [1,2,3,4]&lt;br /&gt;[4,2,1,3].findAll{it%2 == 0} == [4,2]&lt;br /&gt;=&gt; Maps are like lists that have an arbitrary type of key instead of integer.&lt;br /&gt;def map = [a:0, b:1]&lt;br /&gt;Map iteration methods take the nature of Map.Entry objects into account.&lt;br /&gt;map.each { key, value -&gt;&lt;br /&gt;    println &quot;$key $value&quot;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;4. Building XML&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    def writer = new StringWriter()&lt;br /&gt;    def bldr = new groovy.xml.MarkupBuilder(writer )&lt;br /&gt;    bldr.languages {&lt;br /&gt;&lt;br /&gt;          language(name: &#39;C++&#39; ) { author(&#39;Stroustrup&#39; )}&lt;br /&gt;          language(name: &#39;Java&#39; ) { author(&#39;Gosling&#39; )}&lt;br /&gt;          language(name: &#39;Lisp&#39; ) { author(&#39;McCarthy&#39; )}&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    println writer&lt;br /&gt;&lt;br /&gt;Output :&lt;br /&gt;Stroustrup&lt;br /&gt;Gosling&lt;br /&gt;McCarthy&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;5. Operator Overloading&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;=&gt; Groovy uses operator overloading to create shortcuts that make Java friendlier.&lt;br /&gt;&lt;br /&gt;For example, adding an object to a list in Java looks like this: myList.add(someObject).&lt;br /&gt;&lt;br /&gt;The corresponding Groovy way of adding an object to a list is&lt;br /&gt;&lt;br /&gt;myList &lt;&lt;&gt;&lt;br /&gt;&lt;br /&gt;=&gt; Groovy operators and their corresponding methods.&lt;br /&gt;&lt;br /&gt;Operator Method&lt;br /&gt;&lt;br /&gt;a + b a.plus(b)&lt;br /&gt;&lt;br /&gt;a - b a.minus(b)&lt;br /&gt;&lt;br /&gt;a * b a.multiply(b)&lt;br /&gt;&lt;br /&gt;a ** b a.power(b)&lt;br /&gt;&lt;br /&gt;a / b a.div(b)&lt;br /&gt;&lt;br /&gt;a % b a.mod(b)&lt;br /&gt;&lt;br /&gt;a | b a.or(b)&lt;br /&gt;&lt;br /&gt;a &amp; b a.and(b)&lt;br /&gt;&lt;br /&gt;a ^ b a.xor(b)&lt;br /&gt;&lt;br /&gt;a++ or ++a a.next()&lt;br /&gt;&lt;br /&gt;a-- or --a a.previous()&lt;br /&gt;&lt;br /&gt;a[b] a.getAt(b)&lt;br /&gt;&lt;br /&gt;a[b] = c a.putAt(b, c)&lt;br /&gt;&lt;br /&gt;a &lt;&lt; style=&quot;&quot;&gt; a.leftShift(b)&lt;br /&gt;&lt;br /&gt;a &gt;&gt; b a.rightShift(b)&lt;br /&gt;&lt;br /&gt;switch(a) { case(b) : } b.isCase(a)&lt;br /&gt;&lt;br /&gt;~a a.bitwiseNegate()&lt;br /&gt;&lt;br /&gt;-a a.negative()&lt;br /&gt;&lt;br /&gt;+a a.positive()</content><link rel='replies' type='application/atom+xml' href='http://gajanankoram.blogspot.com/feeds/7740609538631131798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1157012889969725923/7740609538631131798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/7740609538631131798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1157012889969725923/posts/default/7740609538631131798'/><link rel='alternate' type='text/html' href='http://gajanankoram.blogspot.com/2009/06/groovy.html' title='Groovy'/><author><name>Gajanan Koram</name><uri>http://www.blogger.com/profile/08691619250855703723</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdqVPCt3l5QMi8-kSMwOcJfGZks1XisopM4iep_V46yOZCZa7N3Hpn9hIH_TNnrhoKNPxo4CpSGY9nC3Wosx-HZ7wLnKiAJ8C1E8faIVsB7X6ZdtQE6m9jexkwlQ3EP4/s220/IMG1111A.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7b7M5UsT8e6MRK728wWf-YM4_uWvvh24hns8gWSJZtzvFyAHuLGS8LoUzz0ncqFE6ia2SsjuLaUBQfH6JxJJZTRcq8wW1N_N-hmrSBTdFC7wYrJsm5yDitU6MMHhqNcUR02SVqVrPRe8Z/s72-c/medium.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>