<?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-25134699</id><updated>2012-01-28T10:19:45.506-08:00</updated><title type='text'>Scriptlandia</title><subtitle type='html'>Programming Languages related Thoughts, Tips &amp;amp; Tricks</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-25134699.post-208004215725464064</id><published>2011-01-30T08:00:00.000-08:00</published><updated>2011-02-04T06:39:35.176-08:00</updated><title type='text'>Extending RubyMine with JRuby script - How to use HAML/SASS converter from inside IDE (JRuby script-plugin)</title><content type='html'>This post describe how to build RubyMine plugin in Ruby language. As an example it takes HAML/SASS converters and represents them as extensions to RubyMine editor.&lt;br /&gt;&lt;br /&gt;Some links for plugin developers:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://devnet.jetbrains.net/docs/DOC-1154" target="_blank"&gt;RubyMine extensions made by user;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://devnet.jetbrains.net/docs/DOC-1161" target="_blank"&gt;RubyMine API&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-208004215725464064?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://shvets.github.com/blog/article_0001/index.html' title='Extending RubyMine with JRuby script - How to use HAML/SASS converter from inside IDE (JRuby script-plugin)'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/208004215725464064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=208004215725464064' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/208004215725464064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/208004215725464064'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2011/01/extending-rubymine-with-jruby-script.html' title='Extending RubyMine with JRuby script - How to use HAML/SASS converter from inside IDE (JRuby script-plugin)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-7942551031767728672</id><published>2009-02-16T08:52:00.000-08:00</published><updated>2009-02-16T09:56:04.682-08:00</updated><title type='text'>Design Patterns in Ruby</title><content type='html'>Previously I wrote a post about &lt;a href="http://scriptlandia.blogspot.com/2008/01/design-patterns-in-beanshell-ready-to.html"&gt;Design Patterns in Beanshell&lt;/a&gt;. Now I have converted them in ruby scripts. Some of DP implementations in Ruby does not make sense because of highly dynamic nature of this language.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational"&gt;Creational Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational/abstract-factory.rb"&gt;Abstract Factory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational/builder.rb"&gt;Builder&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational/factory-method.rb"&gt;Factory Method&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational/prototype.rb"&gt;Prototype&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational/singleton.rb"&gt;Singleton&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational/singleton-corrected.rb"&gt;Singleton (corrected)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/creational/lazy-initialization.rb"&gt;Lazy Initialization&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural"&gt;Structural Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural/adapter.rb"&gt;Adapter&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural/bridge.rb"&gt;Bridge&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural/composite.rb"&gt;Composite&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural/decorator.rb"&gt;Decorator&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural/facade.rb"&gt;Facade&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural/flyweight.rb"&gt;Flyweight&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/structural/proxy.rb"&gt;Proxy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral"&gt;Behavioral Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/chain-of-responsibility.rb"&gt;Chain of Responsibility&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/command.rb"&gt;Command&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/domain_function.rb"&gt;Domain Function&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/interpreter.rb"&gt;Interpreter&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/iterator.rb"&gt;Iterator&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/mediator.rb"&gt;Mediator&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/memento.rb"&gt;Memento&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/observer.rb"&gt;Observer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/observer2.rb"&gt;Observer with Observer library&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/state.rb"&gt;State&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/strategy.rb"&gt;Strategy&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/template-method.rb"&gt;Template Method&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/template-method-corrected.rb"&gt;Template Method (corrected)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/behavioral/templatevisitor.rb"&gt;Visitor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/enterprise"&gt;Enterprise Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/enterprise/mvc.rb"&gt;MVC&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/enterprise/data-access-object.rb"&gt;Data Access Object&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/shvets/design_patterns_in_ruby/tree/master/enterprise/map-reduce.rb"&gt;Map-Reduce&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My main sources:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://scriptlandia.blogspot.com/2008/01/design-patterns-in-beanshell-ready-to.html"&gt;Design Patterns in Beanshell&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://designpatternsinruby.com/"&gt;Design Patterns in Ruby : web site and the book&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-7942551031767728672?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/7942551031767728672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=7942551031767728672' title='77 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7942551031767728672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7942551031767728672'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2009/02/design-patterns-in-ruby.html' title='Design Patterns in Ruby'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>77</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-4135335613241401329</id><published>2009-02-16T08:36:00.000-08:00</published><updated>2009-02-16T08:48:33.333-08:00</updated><title type='text'>Use Google Translate from command line (Ruby)</title><content type='html'>If you have &lt;span style="font-weight: bold;"&gt;Ruby/Gem&lt;/span&gt; installed on your computer, you can start using &lt;span style="font-weight: bold;"&gt;Google Translate &lt;/span&gt;from the command line. Just follow these instructions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$ gem sources -a http://gems.github.com&lt;br /&gt;$ gem install google-translate&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now you have "translate" command available:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$ translate list&lt;/b&gt;               &lt;br /&gt;&lt;br /&gt;- displays the list of supported languages&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$ translate detect "hello world"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- detects language of text&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$ translate en:ru "hello world"&lt;br /&gt;$ translate en:ru hello world&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- translates from English to Russian&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$ translate ru "hello world"&lt;br /&gt;$ translate ru hello world&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- translated from auto-detected language to Russian.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-4135335613241401329?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/shvets/google_translate/tree/master' title='Use Google Translate from command line (Ruby)'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/4135335613241401329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=4135335613241401329' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/4135335613241401329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/4135335613241401329'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2009/02/use-google-translate-from-command-line.html' title='Use Google Translate from command line (Ruby)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-6208562803400017763</id><published>2008-09-22T07:41:00.000-07:00</published><updated>2008-09-22T07:44:59.281-07:00</updated><title type='text'>New Versions of JLaunchPad and Scriptlandia are available for download</title><content type='html'>&lt;a href="http://jlaunchpad.sf.net"&gt;JLaunchPad 1.0.2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://scriptlandia.sf.net"&gt;Scriptlandia 2.2.5&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-6208562803400017763?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/6208562803400017763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=6208562803400017763' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6208562803400017763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6208562803400017763'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/09/new-versions-of-jlaunchpad-and.html' title='New Versions of JLaunchPad and Scriptlandia are available for download'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-5391712632403731732</id><published>2008-06-17T07:19:00.000-07:00</published><updated>2008-06-17T07:41:44.285-07:00</updated><title type='text'>Groovy script for building maven dependencies based on information from OSGI bundle</title><content type='html'>Sometimes when you work with OSGI container outside of Exlipse, you want to have access to dependencies for a given bundle. This information is hidden within the bundle in "META-INF/MANIFEST.MF" file. By analyzing "Bundle-Version", "Import-Package", "Export-Package" attributes we can understand which dependencies are required.&lt;br /&gt;&lt;br /&gt;Unfortunately, this work is tedious and here we'll look for the way how to make it easier. I wrote groovy script that takes OSGI bundle and eclipse home as input parameters and produces maven dependencies (with "system" scope) section. It could be used along with "maven-ant-tasks" library for "ant" scripts or, after small modification with ant directly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-5391712632403731732?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://home.comcast.net/~shvets/blog/buildBundleDeps.groovy' title='Groovy script for building maven dependencies based on information from OSGI bundle'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/5391712632403731732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=5391712632403731732' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5391712632403731732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5391712632403731732'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/06/groovy-script-for-building-maven.html' title='Groovy script for building maven dependencies based on information from OSGI bundle'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-3070605047661543616</id><published>2008-04-29T06:29:00.000-07:00</published><updated>2008-05-05T07:32:16.467-07:00</updated><title type='text'>Nice article on Maven: Migrating to Maven 2</title><content type='html'>&lt;a href="http://java.dzone.com/news/migrating-maven-2-part-1-0"&gt;Migrating to Maven 2 (Part 1)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.dzone.com/news/migrating-maven-2-part-2"&gt;Migrating to Maven 2 (Part 2)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-3070605047661543616?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/3070605047661543616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=3070605047661543616' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/3070605047661543616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/3070605047661543616'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/04/nice-article-on-maven-migrating-to.html' title='Nice article on Maven: Migrating to Maven 2'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-778603884555339538</id><published>2008-02-27T07:37:00.000-08:00</published><updated>2008-02-27T07:42:23.658-08:00</updated><title type='text'>Announcement: New release of Scriptlandia (ver. 2.2.4)</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Scriptlandia &lt;/span&gt;is the effort to build scripting command line environment on top of &lt;span style="font-weight: bold;"&gt;JVM&lt;/span&gt;. The user don't have to worry how to install or configure libraries for different scripting languages. It will be done automatically, partially at installation time and partially at execution time.&lt;br /&gt;&lt;br /&gt;This release includes:&lt;br /&gt;&lt;br /&gt;1. Support for latest versions of languages/tools: &lt;span style="font-weight: bold;"&gt;Scala&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Jython&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Pnuts&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Groovy&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;JRuby&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Sleep&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Scriptella&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Fortress&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Freemarker&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Ivy&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Maven&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;2. Added support for new languages: &lt;span style="font-weight: bold;"&gt;Clojure&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;P~&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;YOIX&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;GANT &lt;/span&gt;(Groovy Ant);&lt;br /&gt;&lt;br /&gt;3. Integration with &lt;a href="http://jlaunchpad.sourceforge.net/"&gt;&lt;span style="font-weight: bold;"&gt;JLaunchPad 1.0.1&lt;/span&gt;&lt;/a&gt; (Added support for proxy with authenication);&lt;br /&gt;                                                            &lt;br /&gt;4. Removing dependency on JDIC library - replacing it with builtin support from "deploy.jar";&lt;br /&gt;&lt;br /&gt;5. Other bug fixes/improvements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-778603884555339538?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://scriptlandia.sourceforge.net/' title='Announcement: New release of Scriptlandia (ver. 2.2.4)'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/778603884555339538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=778603884555339538' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/778603884555339538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/778603884555339538'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/02/announcement-new-release-of.html' title='Announcement: New release of Scriptlandia (ver. 2.2.4)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-9077922443047284167</id><published>2008-02-26T15:46:00.000-08:00</published><updated>2008-02-26T16:02:10.250-08:00</updated><title type='text'>Announcement : New version of JLaunchPad 1.0.1 - universal java launcher</title><content type='html'>This program tries to resolve the following challenges:&lt;br /&gt;&lt;br /&gt;1. It gets rid of complex starting scripts to run JVM with different parameters (memory optimizers, classpath,&lt;br /&gt;bootclasspath, native library path, system properties etc.). The idea is to have one universal script that fits all possible scenarios. The part that is different from one project to another is moved to configuration file. JLaunchPad provides ready to use scripts both for Windows and Unix environments that can be used by any Java program. If you need to customize the process of starting JVM, you don't modify these scripts. Instead, you make modifications in the configuration file.&lt;br /&gt;&lt;br /&gt;For example, if you want to run your program that requires native library (*.dll), your configuration will&lt;br /&gt;look something like this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;# my_prg.jlcfg&lt;br /&gt;# my configuration&lt;br /&gt;&lt;br /&gt;&amp;lt;java.library.path&amp;gt;&lt;br /&gt;_path_to_your_dll_library_&lt;br /&gt;&lt;br /&gt;&amp;lt;jvm.args&amp;gt;&lt;br /&gt;-Xms256m&lt;br /&gt;-Xmx512m&lt;br /&gt;&lt;br /&gt;&amp;lt;launcher.class&amp;gt;&lt;br /&gt;_your_fully_qualified_class_name_&lt;br /&gt;&lt;br /&gt;&amp;lt;command.line.args&amp;gt;&lt;br /&gt;_param1_&lt;br /&gt;_param2_&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can use the following sections within your configuration file:&lt;br /&gt;&lt;br /&gt;- "java.classpath";&lt;br /&gt;- "java.endorsed.dirs";&lt;br /&gt;- "java.ext.dirs";&lt;br /&gt;- "java.library.path";&lt;br /&gt;- "java.system.props";&lt;br /&gt;- "java.bootclasspath";&lt;br /&gt;- "java.bootclasspath.prepend";&lt;br /&gt;- "java.bootclasspath.append";&lt;br /&gt;- "jvm.args";&lt;br /&gt;- "launcher.class";&lt;br /&gt;- "set.variables";&lt;br /&gt;- "command.line.args".&lt;br /&gt;&lt;br /&gt;It seems that for projects with simple start scripts it's not worth using it. But JLaunchPad&lt;br /&gt;offers some other features that could be useful for your project.&lt;br /&gt;&lt;br /&gt;This part of the functionality is based (with some modification) on &lt;a href="https://java-app-launcher.dev.java.net/"&gt;Java App Launcher project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2. It downloads all dependent libraries (if necessary) from remote server and installs them locally. You don't have to install libraries manually. Once you declare the dependency, it will be downloaded and installed automatically.&lt;br /&gt;&lt;br /&gt;It requires to have all used libraries located on remote server. It's true for all&lt;br /&gt;installations that exist in WWW, but we have to organize these installations a little bit more. To eliminate infamous jar hell we want to introduce separation based on group name and version. Closest candidate that could make this organization happen is maven repository.&lt;br /&gt;&lt;br /&gt;We have to make these changes in configuration to make it happen:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;# my_prg.jlcfg&lt;br /&gt;# my configuration&lt;br /&gt;&lt;br /&gt;&amp;lt;launcher.class&amp;gt;&lt;br /&gt;_special_launcher_class_&lt;br /&gt;&lt;br /&gt;&amp;lt;command.line.args&amp;gt;&lt;br /&gt;-deps.file.name=_my_deps_file_.xml&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Remote maven repositories are used as the storage for libraries and maven project file is used for describing dependencies. As you can see, we try to reuse maven abilities as much as possible.&lt;br /&gt;&lt;br /&gt;This part of functionality becomes available thanks to "bootstrap-mini" project that is&lt;br /&gt;&lt;a href="http://svn.apache.org/repos/asf/maven/components/tags/maven-2.0.8/bootstrap"&gt;the part of maven2 source&lt;/a&gt;.&lt;br /&gt;It provides file delivery mechanism, independent from maven2 standard delivery mechanism.&lt;br /&gt;&lt;br /&gt;3. It builds CLASSPATH dynamically based on declared dependencies. You can put all the dependencies for your project in dependencies file. Current implementation&lt;br /&gt;uses maven2 pom.xml file for describing dependencies. As an example, if you want to run JRuby engine, you need to have these files: &lt;br /&gt;&lt;br /&gt;a). JLaunchPad configuration:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;# my_prg.jlcfg&lt;br /&gt;# my configuration&lt;br /&gt;&lt;br /&gt;&amp;lt;launcher.class&amp;gt;&lt;br /&gt;_special_launcher_class_&lt;br /&gt;&lt;br /&gt;&amp;lt;command.line.args&amp;gt;&lt;br /&gt;-deps.file.name=_jruby_deps_file_.xml&lt;br /&gt;-main.class.name=org.jruby.Main&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;b). JRuby dependencies file&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;!-- _jruby_deps_file_.xml --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;project&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;org.sf.scriptlandia&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;jruby-starter&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;packaging&amp;gt;pom&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;name&amp;gt;JRuby Starter&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;JRuby Starter&amp;lt;/description&amp;gt;&lt;br /&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;jruby&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;jruby&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This functionality is possible thanks to &lt;a href="http://dist.codehaus.org/classworlds"&gt;classworlds project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;JLaunchPad's main responsibility is to integrate these 3 different approaches into one powerful solution.&lt;br /&gt;Classworlds takes care of classloader management. We read dependencies files and inform classworlds about new libraries that should be added to CLASSPATH. To accomplish it, "_special_launcher_class_" should be substituted with "org.codehaus.classworlds.Launcher" class.&lt;br /&gt;We only need to tell classworlds which class to run: "org.sf.jlaunchpad.JLaunchPadLauncher". This class is main integration point that performs main preparation work: it reads dependencies file, download them if required and add them dynamically to CLASSPATH. Then it tries to execute java class declared with "main.class.name" parameter.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Changes for current release:&lt;br /&gt;&lt;br /&gt;- added proxy with authentication;&lt;br /&gt;&lt;br /&gt;- storing configuration parameters (proxy, local repository location, remote repositories location)&lt;br /&gt;in settings.xml file;&lt;br /&gt;&lt;br /&gt;- added new examples;&lt;br /&gt;&lt;br /&gt;- changes in installation program layout;&lt;br /&gt;&lt;br /&gt;- other changes and improvements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-9077922443047284167?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://jlaunchpad.sourceforge.net' title='Announcement : New version of JLaunchPad 1.0.1 - universal java launcher'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/9077922443047284167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=9077922443047284167' title='254 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/9077922443047284167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/9077922443047284167'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/02/announcement-new-version-of-jlaunchpad.html' title='Announcement : New version of JLaunchPad 1.0.1 - universal java launcher'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>254</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-371447550836181391</id><published>2008-02-24T16:06:00.000-08:00</published><updated>2008-02-24T16:59:09.073-08:00</updated><title type='text'>New Free Service from Google - WebCall Button</title><content type='html'>If you have a blog on Google's &lt;a href="www.blogspot.com"&gt;www.blogspot.com&lt;/a&gt; site, you can benefit from new exciting service - &lt;span style="font-weight:bold;"&gt;WebCall Button&lt;/span&gt;. What does it mean?&lt;br /&gt;&lt;br /&gt;Simply by putting this button on your web site (I don't think it's restricted with your blog only), you will get one "virtual" phone number that could redirect calls to your home, cell or work phone numbers. Or to voice mail. And sender shouldn't know your phone number at all.&lt;br /&gt;&lt;br /&gt;Or imagine another situation. You don't want to share your home, cell and work phones. Instead, you expose your "virtual" phone number to outside world and this service will redirect all incoming calls to home, cell, work phones (or to voicemail).&lt;br /&gt;&lt;br /&gt;You also could publish separate voice mail on your blog/web-site as embedded object.&lt;br /&gt;&lt;br /&gt;In order to use this service you have to register your account at &lt;a href="http://www.grandcentral.com"&gt;Grand Central&lt;/a&gt;. Now it's part of Google.&lt;br /&gt;&lt;br /&gt;You can try this service by calling my home number right from my blog page at &lt;a href="http://scriptlandia.blogspot.com"&gt;Scriptlandia blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-371447550836181391?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.grandcentral.com/home/intro' title='New Free Service from Google - WebCall Button'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/371447550836181391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=371447550836181391' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/371447550836181391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/371447550836181391'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/02/new-free-service-from-google-webcall.html' title='New Free Service from Google - WebCall Button'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-1940776230517812376</id><published>2008-02-11T14:55:00.000-08:00</published><updated>2008-02-11T14:58:31.835-08:00</updated><title type='text'>Maven Archetypes as standalone program</title><content type='html'>Initial Release.&lt;br /&gt;&lt;br /&gt;This project helps to generate initial Java project layout with the help of Maven Archetypes.&lt;br /&gt;&lt;br /&gt;It is not required to have Maven 2 preinstalled - instead it uses JLaunchPad (as part of the installation). It means that required by Maven and Maven Archetypes Plugin parts will be downloaded and installed into your local repository automatically.&lt;br /&gt;&lt;br /&gt;All you need to do is to specify the location of Java and the location of Maven repository. If you are working behind the firewall, you have to specify proxy parameters too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-1940776230517812376?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/maven-archetypes/' title='Maven Archetypes as standalone program'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/1940776230517812376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=1940776230517812376' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/1940776230517812376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/1940776230517812376'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/02/maven-archetypes-as-standalone-program.html' title='Maven Archetypes as standalone program'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-5476600541093241526</id><published>2008-02-09T14:28:00.000-08:00</published><updated>2008-02-09T14:42:26.545-08:00</updated><title type='text'>Tip: How to use Intellij IDEA and Maven 2 together for debugging and context help</title><content type='html'>Latest version of Intellij IDEA has excellent integration with Maven 2. I want to explain one tip that could help you to gain productivity.&lt;br /&gt;&lt;br /&gt;When you debug with IDEA, it's nice to have sources and javadocs for each used library registered with IDEA. If you have registered additional sources, you can debug deeper, going inside those sources. If you have registered additional javadocs, you can get context help for used classes from that libraries.&lt;br /&gt;&lt;br /&gt;Unfortunately, this process is manual and tedious. Usually you have to do the following actions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.&lt;/b&gt; Find out on Internet sources for given library and unzip them locally.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&lt;/b&gt; Find out on Internet javadocs for given library and unzip it locally.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.&lt;/b&gt; With the help of Intellij IDEA you have to register unzipped sources and javadocs.&lt;br /&gt;&lt;br /&gt;This should be done for each external library in the project. If you have a lot of dependencies,&lt;br /&gt;it'll take a lot of time.&lt;br /&gt;&lt;br /&gt;Even if your project is dependent on other your own libraries, you still won't get sources and context helps&lt;br /&gt;for them automatically. To have this support, you will do same things as what you did for external libraries -&lt;br /&gt;IDEA should know where your dependent sources/javadocs are located.&lt;br /&gt;&lt;br /&gt;Is it possible to make this process less time consuming, less painful? And the answer is: Yes.&lt;br /&gt;&lt;br /&gt;When your project is equipped with maven's pom.xml file, you can do the following trick. Close your current &lt;br /&gt;project and next time, when you try to open this project again, use pom.xml file as the project file (use "Open Project" functionality) instead of regular IDEA project file. &lt;br /&gt;&lt;br /&gt;What happens here, IDEA is trying to resolve dependencies, defined inside maven project file and populates them back into IDEA's project (synch up). After such synchronization, IDEA is looking for sources and javadocs inside maven reopsitory. They should be located in same folder as your jar file and should have name built by special scheme. For example, my example library is located here:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;${maven.local.repository}/org/google/code/maven-archetypes/1.0.0/maven-archetypes-1.0.0.jar&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;My sources and javadocs should be layed out in this way&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;${maven.local.repository}/org/google/code/maven-archetypes/1.0.0/maven-archetypes-1.0.0-sources.jar&lt;br /&gt;${maven.local.repository}/org/google/code/maven-archetypes/1.0.0/maven-archetypes-1.0.0-javadoc.jar&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As you can see, maven has "classifier" notion that helps us to differentiate "jar" artifact from "sources" and &lt;br /&gt;"javadocs" artifacts.&lt;br /&gt;&lt;br /&gt;Good thing is that most of new artifacts to be deployed recently into maven repositories (or at least everybody who understand it and wants to benefit from it), follow this pattern.&lt;br /&gt;&lt;br /&gt;Now, what we have to do for our project components to be "in synch" with this pattern? Follow these steps:&lt;br /&gt;&lt;br /&gt;1. Generate sources and javadocs with the help of "maven-source-plugin" and "maven-javadoc-plugin"&lt;br /&gt;plugins:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;mvn source:jar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;gt;mvn javadoc:jar&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After the execution of these commands, 2 new files will be created. By default, you will see these files in "target" folder:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;maven-archetypes-1.0.0-javadoc.jar &lt;br /&gt;maven-archetypes-1.0.0-sources.jar &lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;2. Install sources into maven repository:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;mvn install:install-file ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dfile=target/yourArtifactId-yourVersion-sources.jar ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-DgroupId=yourGroupId ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-DartifactId=yourArtifactId ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dversion=yourVersion ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dpackaging=jar ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dclassifier=sources ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-DgeneratePom=false&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;3. Install javadocs into maven repository:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;mvn install:install-file ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dfile=target/yourArtifactId-yourVersion-javadoc.jar ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-DgroupId=yourGroupId ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-DartifactId=yourArtifactId ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dversion=yourVersion ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dpackaging=jar ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Dclassifier=javadoc ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;-DgeneratePom=false&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can use this batch script to do all commands in one step:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;rem install-jar-javadoc-sources.bat&lt;br /&gt;&lt;br /&gt;rem 1. generate sources jar file&lt;br /&gt;&lt;br /&gt;call mvn source:jar&lt;br /&gt;&lt;br /&gt;rem 2. generate javadoc jar file&lt;br /&gt;&lt;br /&gt;call mvn javadoc:jar&lt;br /&gt;&lt;br /&gt;SET GROUP_ID=org.google.code&lt;br /&gt;SET ARTIFACT_ID=maven-archetypes&lt;br /&gt;SET VERSION=1.0.0&lt;br /&gt;&lt;br /&gt;SET SOURCES_CLASSIFIER=sources&lt;br /&gt;SET JAVADOC_CLASSIFIER=javadoc&lt;br /&gt;&lt;br /&gt;rem 3. install sources jar file&lt;br /&gt;&lt;br /&gt;call mvn install:install-file ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dfile=target/%ARTIFACT_ID%-%VERSION%-%SOURCES_CLASSIFIER%.jar" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-DgroupId=%GROUP_ID%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-DartifactId=%ARTIFACT_ID%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dversion=%VERSION%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dpackaging=jar" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dclassifier=%SOURCES_CLASSIFIER%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-DgeneratePom=false"&lt;br /&gt;&lt;br /&gt;rem 4. install javadoc jar file&lt;br /&gt;&lt;br /&gt;call mvn install:install-file ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dfile=target/%ARTIFACT_ID%-%VERSION%-%JAVADOC_CLASSIFIER%.jar" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-DgroupId=%GROUP_ID%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-DartifactId=%ARTIFACT_ID%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dversion=%VERSION%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dpackaging=jar" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-Dclassifier=%JAVADOC_CLASSIFIER%" ^&lt;br /&gt;&amp;nbsp;&amp;nbsp;"-DgeneratePom=false"&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You also can run these commands as Beanshell script:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;// installSourcesJavadocs.bsh&lt;br /&gt;&lt;br /&gt;import org.sf.pomreader.PomReader;&lt;br /&gt;import org.apache.maven.bootstrap.model.Model;&lt;br /&gt;import org.sf.scriptlandia.MavenHelper;&lt;br /&gt;&lt;br /&gt;MavenHelper.executeMaven(null, new String[] { "source:jar" });&lt;br /&gt;MavenHelper.executeMaven(null, new String[] { "javadoc:jar" });&lt;br /&gt;&lt;br /&gt;PomReader pomReader = new PomReader();&lt;br /&gt;pomReader.init();&lt;br /&gt;&lt;br /&gt;Model model = pomReader.readModel(new File("pom.xml"));&lt;br /&gt;&lt;br /&gt;void installArtifact(Model model, String classifier) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("file", "target/" + model.getArtifactId() + "-" + classifier + ".jar");&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("groupId", model.getGroupId());&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("artifactId", model.getArtifactId());&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("version", model.getVersion());&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("packaging", model.getPackaging());&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("classifier", classifier);&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("generatePom", "false");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;MavenHelper.executeMaven(null, new String[] { "install:install-file" });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;installArtifact(model, "sources");&lt;br /&gt;installArtifact(model, "javadoc");&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In order to run this script, you have to install &lt;a href="http://scriptlandia.sf.net"/&gt;Scriptlandia&lt;/a&gt;&lt;br /&gt;launcher on your computer. It will take care of  downloading all required dependencies, installing them locally on your computer and then executing Beanshell script.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-5476600541093241526?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/5476600541093241526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=5476600541093241526' title='57 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5476600541093241526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5476600541093241526'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/02/tip-how-to-use-intellij-idea-and-maven.html' title='Tip: How to use Intellij IDEA and Maven 2 together for debugging and context help'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>57</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-7985216215850418747</id><published>2008-01-30T12:41:00.000-08:00</published><updated>2008-06-30T12:06:44.952-07:00</updated><title type='text'>Design Patterns in Beanshell (ready to use)</title><content type='html'>I wrote scripts in Beanshell to demonstrate each out of 23  GoF DP. It helps to see the idea behind particular DP in "compressed" format. And, of course, you can test it right away by &lt;a href="http://scriptlandia.sourceforge.net/"&gt;executing the script&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational"&gt;Creational Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational/abstract-factory.bsh"&gt;Abstract Factory&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational/builder.bsh"&gt;Builder&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational/factory-method.bsh"&gt;Factory Method&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational/prototype.bsh"&gt;Prototype&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational/singleton.bsh"&gt;Singleton&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational/singleton-corrected.bsh"&gt;Singleton (corrected)&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/creational/lazy-initialization.bsh"&gt;Lazy Initialization&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural"&gt;Structural Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural/adapter.bsh"&gt;Adapter&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural/bridge.bsh"&gt;Bridge&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural/composite.bsh"&gt;Composite&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural/decorator.bsh"&gt;Decorator&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural/facade.bsh"&gt;Facade&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural/flyweight.bsh"&gt;Flyweight&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/structural/proxy.bsh"&gt;Proxy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral"&gt;Behavioral Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/chain-of-responsibility.bsh"&gt;Chain of Responsibility&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/command.bsh"&gt;Command&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/interpreter.bsh"&gt;Interpreter&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/iterator.bsh"&gt;Iterator&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/mediator.bsh"&gt;Mediator&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/memento.bsh"&gt;Memento&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/observer.bsh"&gt;Observer&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/state.bsh"&gt;State&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/strategy.bsh"&gt;Strategy&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/template-method.bsh"&gt;Template Method&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/template-method-corrected.bsh"&gt;Template Method (corrected)&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/behavioral/visitor.bsh"&gt;Visitor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/enterprise"&gt;Enterprise Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/enterprise/mvc.bsh"&gt;MVC&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/enterprise/data-access-object.bsh"&gt;Data Access Object&lt;/a&gt;&lt;br /&gt;&lt;a href="https://scriptlandia.svn.sourceforge.net/svnroot/scriptlandia/trunk/scriptlandia-tech-examples/DP/enterprise/map-reduce.bsh"&gt;Map-Reduce&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My main sources:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29"&gt;Wikipedia&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.fluffycat.com/Java-Design-Patterns/"&gt;FluffyCat&lt;/a&gt;&lt;br /&gt;3.  &lt;a href="http://www.javacamp.org/designPattern/"&gt;JavaCamp&lt;/a&gt;&lt;br /&gt;4. &lt;a href="http://www.patterndepot.com/put/8/JavaPatterns.htm"&gt;The Design Patterns - Java Companion (book)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-7985216215850418747?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/7985216215850418747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=7985216215850418747' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7985216215850418747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7985216215850418747'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2008/01/design-patterns-in-beanshell-ready-to.html' title='Design Patterns in Beanshell (ready to use)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-6092643798516957350</id><published>2007-12-11T11:54:00.000-08:00</published><updated>2008-02-06T14:41:50.205-08:00</updated><title type='text'>New version of CafeBabe Bytecode Editor plugin (ver. 1.0.0) for Intellij IDEA</title><content type='html'>This plugin integrates CafeBabe Bytecode Editor with Intellij IDEA.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;br /&gt;1. Added implementation of ClassHound service.&lt;br /&gt;2. Added implementation of Save Class File function.&lt;br /&gt;3. Bug fix: disabling initial openning of plugin toolwindow.&lt;br /&gt;&lt;br /&gt;How to use it inside Intellij IDEA:&lt;br /&gt;&lt;br /&gt;How to use Class Viewer/Editor&lt;br /&gt;&lt;br /&gt;- Select class file in the files tree or click on "Open File" icon within plugin toolwindow;&lt;br /&gt;- Activate context menu for the selected file;&lt;br /&gt;- Select "Open in CafeBabe" item from the context menu;&lt;br /&gt;- Class will be disassembled and represented in CafeBabe toolwindow;&lt;br /&gt;- If you want to disassemble some method, navigate to methods list, select one method &lt;br /&gt;and activate context menu. Follow "Go to method body" link. You will be redirected to &lt;br /&gt;"Bytecode Editor" toolwindow;&lt;br /&gt;- Now you can create/delete/edit bytecode instructions;&lt;br /&gt;- In constant pool you can modify UTF strings;&lt;br /&gt;- If you want to get explanation for a given instruction, click on Help icon.&lt;br /&gt;- If you modified the file and then trying to save it, "Save as" dialog will be initiated, allowing you to save modified class.&lt;br /&gt;- You can click on "Save as" icon any time when you want to save your modifications.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How to use ClassHound&lt;br /&gt;&lt;br /&gt;- Click on ClassHound icon - new toolwindow will be open;&lt;br /&gt;- In ClassHound toolwindow select archive, then package, class, fileld or method. You can select only package &lt;br /&gt;or only package class;&lt;br /&gt;- By double clicking on package, class, field or method - selected item will be loaded into Class Viewer/Editor. &lt;br /&gt;If it's field or method, Class File Viewer/Editor will be positioned on selected field/method;&lt;br /&gt;- You can add new archive to the list of available archives - then you can explore it in standard way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-6092643798516957350?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/cafebabe-idea-plugin/' title='New version of CafeBabe Bytecode Editor plugin (ver. 1.0.0) for Intellij IDEA'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/6092643798516957350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=6092643798516957350' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6092643798516957350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6092643798516957350'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/12/new-version-of-cafebabe-bytecode-editor.html' title='New version of CafeBabe Bytecode Editor plugin (ver. 1.0.0) for Intellij IDEA'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-7681828223483745477</id><published>2007-12-10T17:31:00.000-08:00</published><updated>2007-12-10T17:43:12.088-08:00</updated><title type='text'>New version of Groovy language and most popular java information portals</title><content type='html'>New version of Groovy language - 1.5 - had been released. Great job!&lt;br /&gt;&lt;br /&gt;But I want to ask everybody about the efficiency of our "leaders" in information ocean of Java events. Neither "javalobby" nor "theserverside"... For the last 3 days... What's wrong? Where can we get the most up-to-date and complete information about Java events?&lt;br /&gt;&lt;br /&gt;My selection is "javablogs.com". What about yours?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-7681828223483745477?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/7681828223483745477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=7681828223483745477' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7681828223483745477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7681828223483745477'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/12/new-version-of-groovy-language-and-most.html' title='New version of Groovy language and most popular java information portals'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-942447421665748826</id><published>2007-12-05T10:34:00.000-08:00</published><updated>2007-12-05T10:35:36.872-08:00</updated><title type='text'>New version of maven-archetypes plugin for Intellij IDEA (1.0.2)</title><content type='html'>This plugin helps to generate initial java project layout with the help of Maven Archetypes.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;br /&gt;1. Downgrading java version to 1.5 (to be compatible for Mac users);&lt;br /&gt;2. Changing appfuse version to 2.0.1;&lt;br /&gt;3. Separating archetypes.xml file from jar file (make it avalilable for user modifications).&lt;br /&gt;&lt;br /&gt;How to use it inside IDEA editor:&lt;br /&gt;&lt;br /&gt;1. Select Working Directory;&lt;br /&gt;2. Select archetype group;&lt;br /&gt;3. Select archetype;&lt;br /&gt;4. Enter groupId, artifactId, version for your project;&lt;br /&gt;5. Click on Generate button. New project will be generated in the working directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-942447421665748826?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/maven-archetypes-idea-plugin/' title='New version of maven-archetypes plugin for Intellij IDEA (1.0.2)'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/942447421665748826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=942447421665748826' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/942447421665748826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/942447421665748826'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/12/new-version-of-maven-archetypes-plugin.html' title='New version of maven-archetypes plugin for Intellij IDEA (1.0.2)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-8900015211273823376</id><published>2007-11-28T11:20:00.000-08:00</published><updated>2007-11-28T11:21:27.499-08:00</updated><title type='text'>New plugin for Intellij IDEA: CafeBabe Bytecode Editor plugin (ver. 0.8.0) is available for download</title><content type='html'>This plugin integrates CafeBabe Bytecode Editor with Intellij IDEA.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;br /&gt;1. Initial implementation.&lt;br /&gt;&lt;br /&gt;How to use it inside Intellij IDEA:&lt;br /&gt;&lt;br /&gt;- Select class file in the files tree or click on "Open File" icon within plugin toolwindow;&lt;br /&gt;- Activate context menu for the selected file;&lt;br /&gt;- Select "Open in CafeBabe" item from the context menu;&lt;br /&gt;- Class will be disassembled and represented in CafeBabe toolwindow;&lt;br /&gt;- If you want to disassemble some method, navigate to methods list, select one method &lt;br /&gt;and activate context menu. Follow "Go to method body" link. You will be redirected to &lt;br /&gt;"Bytecode Editor" toolwindow;&lt;br /&gt;- Now you can create/delete/edit bytecode instructions;&lt;br /&gt;- If you want to get explanation for a given instruction, click on Help icon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-8900015211273823376?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/cafebabe-idea-plugin/' title='New plugin for Intellij IDEA: CafeBabe Bytecode Editor plugin (ver. 0.8.0) is available for download'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/8900015211273823376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=8900015211273823376' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/8900015211273823376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/8900015211273823376'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/11/new-plugin-for-intellij-idea-cafebabe.html' title='New plugin for Intellij IDEA: CafeBabe Bytecode Editor plugin (ver. 0.8.0) is available for download'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-1944680946247431245</id><published>2007-11-20T10:22:00.000-08:00</published><updated>2007-11-20T10:24:54.875-08:00</updated><title type='text'>New maven-archetypes plugin (ver. 1.0.0) is available for Intellij IDEA</title><content type='html'>This plugin helps to generate initial java project layout with the help of Maven Archetypes.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;br /&gt;1. Initial implementation.&lt;br /&gt;&lt;br /&gt;How to use it inside IDEA editor:&lt;br /&gt;&lt;br /&gt;1. Select Working Directory;&lt;br /&gt;2. Select archetype group;&lt;br /&gt;3. Select archetype;&lt;br /&gt;4. Enter groupId, artifactId, version for your project;&lt;br /&gt;5. Click on Generate button. New project will be generated in the working directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-1944680946247431245?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/maven-archetypes-idea-plugin/' title='New maven-archetypes plugin (ver. 1.0.0) is available for Intellij IDEA'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/1944680946247431245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=1944680946247431245' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/1944680946247431245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/1944680946247431245'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/11/new-maven-archetypes-plugin-ver-100-is.html' title='New maven-archetypes plugin (ver. 1.0.0) is available for Intellij IDEA'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-5788988110051967527</id><published>2007-11-17T17:09:00.000-08:00</published><updated>2007-11-19T20:07:50.820-08:00</updated><title type='text'>Tips for Intellij IDEA plugins developers (my bloody experience)</title><content type='html'>&lt;b&gt;1. How to get project with new API&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Old fashion:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Project project = (Project)dataContext.getData(DataConstants.PROJECT);&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;New fashion:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Project project = DataKeys.PROJECT.getData(dataContext);&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. How to register tool window with new API&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;// Get toolwindow manager &lt;br /&gt;ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(project);&lt;br /&gt;&lt;br /&gt;// Register your tool window at desired location&lt;br /&gt;ToolWindow toolWindow =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toolWindowManager.registerToolWindow("your_toolwindow_id", true, ToolWindowAnchor.RIGHT);&lt;br /&gt;&lt;br /&gt;// Prepare content panel of your tool window (all your controls) &lt;br /&gt;JPanel yourContentPanel = ...&lt;br /&gt;&lt;br /&gt;// Get peer factory&lt;br /&gt;PeerFactory peerFactory = PeerFactory.getInstance();&lt;br /&gt;&lt;br /&gt;// Create content&lt;br /&gt;Content content = peerFactory.getContentFactory().createContent(yourContentPanel, "", false);&lt;br /&gt;&lt;br /&gt;// Add created content&lt;br /&gt;toolWindow.getContentManager().addContent(content);&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. How to persist plugin properties with new API&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you did it for previous versions of IDEA, you probably have the following code:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;public class YourPluginConfiguration&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implements ProjectComponent, Configurable, JDOMExternalizable {&lt;br /&gt;&amp;nbsp;&amp;nbsp;private final String COMPONENT_NAME = ...;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;publuc String yourProperty; // property to be persisted&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public String getComponentName() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return COMPONENT_NAME;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void readExternal(Element element) throws InvalidDataException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DefaultJDOMExternalizer.readExternal(this, element); // load &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void writeExternal(Element element) throws WriteExternalException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DefaultJDOMExternalizer.writeExternal(this, element); // save&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;With new API you have to do something like this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;@State(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name = YourPluginConfiguration.COMPONENT_NAME,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;storages = {@Storage(id = "your_id", file = "$PROJECT_FILE$")}&lt;br /&gt;)&lt;br /&gt;public final class YourPluginConfiguration&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implements ProjectComponent, Configurable, PersistentStateComponent&amp;lt;YourPluginConfiguration&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static final String COMPONENT_NAME = ...;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;publuc String yourProperty; // property to be persisted&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public String getComponentName() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return COMPONENT_NAME;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public YourPluginConfiguration getState() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return this; // load&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void loadState(YourPluginConfigurationstate) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlSerializerUtil.copyBean(state, this); // save&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In this example we use $PROJECT_FILE$ macro. You have to use appropriates macros according to component level.&lt;br /&gt;&lt;br /&gt;There are 3 types of component level. Each of them has unique, only for this level macros: &lt;br /&gt;&lt;br /&gt;- application-level components (ApplicationComponent): $APP_CONFIG$, $OPTIONS$;&lt;br /&gt;- project-level components (ProjectComponent): $PROJECT_FILE$, $WORKSPACE_FILE$, $PROJECT_CONFIG_DIR$;&lt;br /&gt;- module-level components (ModuleComponent): $MODULE_FILE$&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. How to register intention action&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Usually intention action should be assoсiated with some analytical tool that recognizes important situation and indicates about it the user. We also can assoсiate intention action with changes in the editor.&lt;br /&gt;&lt;br /&gt;First, your class should implement IntentionAction. Additionally, if you want to listen to editor changes,it should extend EditorAction: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;public class YourIntentionAction extends EditorAction implements IntentionAction {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public YourIntentionAction() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super(new YourEditorActionHandler());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private static class YourEditorActionHandler extends EditorActionHandler /* or EditorWriteActionHandler */ {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// This method is executed every time you do modifications in the editor.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Wev are trying to look for selections&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void execute(Editor editor, DataContext dataContext) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String searchText = null;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectionModel selection = editor.getSelectionModel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (selection.hasSelection()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;searchText = selection.getSelectedText();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (searchText != null &amp;&amp; searchText.trim().length() &amp;gt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Displays pop up&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Project project = DataKeys.PROJECT.getData(dataContext);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showPopup(project, editor, searchText);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Returns text to be shown in the list of available actions, if this action&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* is available.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;@NotNull&lt;br /&gt;&amp;nbsp;&amp;nbsp;public String getText() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return "The text to show in the intention popup.";&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Returns the identifier of the family of intentions. This id is used to externalize&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* "auto-show" state of intentions. When user clicks on a lightbulb in intention list,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* all intentions with the same family name get enabled/disabled. The identifier&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* is also used to locate the description and preview text for the intention.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;@NotNull&lt;br /&gt;&amp;nbsp;&amp;nbsp;public String getFamilyName() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return "popup";&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Checks whether this intention is available at a caret offset in file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* If this method returns true, a light bulb for this intention is shown.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return editor.getSelectionModel().hasSelection();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Called when user invokes intention. This method is called inside command.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* If {@link #startInWriteAction()} returns true, this method is also called&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* inside write action.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String searchText = null;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectionModel selection = editor.getSelectionModel();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (selection.hasSelection()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;searchText = selection.getSelectedText();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showPopup(project, editor, searchText);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Indicate whether this action should be invoked inside write action.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Should return false if e.g. modal dialog is shown inside the action.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* If false is returned the action itself is responsible for starting write action&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* when needed, by calling {@link com.intellij.openapi.application.Application#runWriteAction(Runnable)}.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;public boolean startInWriteAction() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private static void showPopup(Project project, Editor editor, String searchText) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JPanel panel = ... // Create your content here&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JBPopup jbPopup = JBPopupFactory.getInstance()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.createComponentPopupBuilder(panel, panel)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.setDimensionServiceKey(project, "popup", false)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.setRequestFocus(true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.setResizable(true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.setMovable(true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.setTitle("Your title")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.createPopup();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jbPopup.showInBestPositionFor(editor);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You have to register your intention action. If you have project component, you can do it&lt;br /&gt;in projectOpened() method:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void projectOpened() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IntentionManager.getInstance().addAction(new YourIntentionAction());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Useful links&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.piraya.nl/IDEAPlugins.html"&gt;Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://www.jetbrains.net/confluence/display/IDEADEV/Plugin+Development+FAQ"&gt;Plugin Development FAQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. &lt;a href="http://www.jetbrains.com/idea/documentation/howto_03.html"&gt;The Basics of Plugin Development for IntelliJ IDEA&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. &lt;a href="http://www.jetbrains.com/idea/documentation/documentation.html"&gt;IntelliJ IDEA 7.x Developers Documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. &lt;a href="http://www.jetbrains.com/idea/plugins/developing_custom_language_plugins.html"&gt;IntelliJ Developing Custom Language Plugins for IntelliJ IDEA 5.0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-5788988110051967527?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/5788988110051967527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=5788988110051967527' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5788988110051967527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5788988110051967527'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/11/tips-for-intellij-idea-plugins.html' title='Tips for Intellij IDEA plugins developers (my bloody experience)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-6827598106724576998</id><published>2007-11-15T12:40:00.000-08:00</published><updated>2007-11-17T14:00:52.620-08:00</updated><title type='text'>New version of google-translate plugin for Intellij IDEA (1.0.5)</title><content type='html'>Google-Translate Plug-in version 1.0.5 is available for download&lt;br /&gt;using IDEA's internal Plugin Manager or directly from the IDEA plug-ins&lt;br /&gt;website at http://plugins.intellij.net/plugin/?id=1460.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. Added Translation Preview feature. Select the text for preview and then intention icon will appear. Or press&lt;br /&gt;  "Alt-Enter" key combination to force the intention. Another way is to click on "Translation Preview" item&lt;br /&gt;   in editor pop-up.&lt;br /&gt;2. Removed deprecated code.&lt;br /&gt;&lt;br /&gt;How to use it in side IDEA editor:&lt;br /&gt;&lt;br /&gt;1. In editor select the part to be translated;&lt;br /&gt;2. Select "Translate" item from the editor popup menu;&lt;br /&gt;3. (hidden) "translate.google.com" web site (service) will perform actual translation;&lt;br /&gt;4. Response from the service will be inserted in place of your selection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-6827598106724576998?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/google-translate-idea-plugin/' title='New version of google-translate plugin for Intellij IDEA (1.0.5)'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/6827598106724576998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=6827598106724576998' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6827598106724576998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6827598106724576998'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/11/new-version-of-google-translate-plugin.html' title='New version of google-translate plugin for Intellij IDEA (1.0.5)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-8216397221490459728</id><published>2007-09-14T13:08:00.000-07:00</published><updated>2007-09-14T13:23:41.722-07:00</updated><title type='text'>Application template generation with "Archetypes" program (Scriptlandia, Maven2, Beanshell)</title><content type='html'>Maven 2 has the notion of archetype. It is a &lt;a href="http://cvs.peopleware.be/training/maven/maven2/archetypes.html"&gt;template of a project which is combined with some user input to produce a working Maven project that has been tailored to the user's requirements&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Some other projects are trying to achieve same goal by using similar or slightly different approaches:&lt;br /&gt;&lt;br /&gt;- &lt;a href="https://appfuse-light.dev.java.net"&gt;AppFuse 1.x&lt;/a&gt;; (light) - uses Ant scripts to generate template;&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://appfuse.org"&gt;AppFuse 2.x&lt;/a&gt;; - uses Maven2 scripts to generate template;&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://blogs.opensymphony.com/plightbo/2006/08/project_able_a_complete_java_w.html"&gt;Able Project&lt;/a&gt; (https://svn.opensymphony.com/svn/sandbox/able);&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://sourceforge.net/projects/hse"&gt;HSE&lt;/a&gt; (Hibernate, Spring, Echo2) Project;&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://code.google.com/p/archy"&gt;Archy&lt;/a&gt; project.&lt;br /&gt;&lt;br /&gt;Archetypes program is based on my previous scripts (see my  &lt;br /&gt;&lt;a href="http://scriptlandia.blogspot.com/2007/03/building-gui-frontend-for-maven2.html"&gt;previous post&lt;/a&gt;) and also inspired by Archy project. &lt;br /&gt;&lt;br /&gt;All definitions of archetypes and repository locations are decoupled from source code into external xml file (archetypes.xml).&lt;br /&gt;&lt;br /&gt;All archetypes are divided by groups. Group is the list or archetypes that has &lt;br /&gt;same groupId, version (e.g. AppFuse, Maven2 or WebTidy groups). &lt;br /&gt;&lt;br /&gt;Each archetype has name, description and version (if different from group version). All archetypes from same group are located in same repository. For example AppFuse fragment looks like:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;groups&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;group name="Appfuse" groupId="org.appfuse" prefix="appfuse-" version="2.0-m5" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;archetypes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;archetype name="basic-jsf" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description="Archetype for creating a web application with Hibernate, Spring and JSF"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;archetype name="basic-spring" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description="Archetype for creating a web application with Hibernate, Spring and Spring MVC"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/archetypes&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;http://static.appfuse.org/repository&amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/group&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;lt;/groups&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In order to run the application you have ho have &lt;a href="http://scriptlandia.sf.net"&gt;Scriptlandia&lt;/a&gt;&lt;br /&gt;project installed on your computer. It will take care of downloading all required dependencies, installing them locally on your computer and then executing Beanshell script. Otherwise, you have to be ready to do this manually.&lt;br /&gt;&lt;br /&gt;Program can function in 2 modes: console and gui. For console mode you have to execute the following command:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;create-archetype.bsh -console&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Program will ask the user about archetype group name and archetype name. Then, for your application, you have to specify groupId, artifactId and version. For these parameters Archetypes program will generate the resulting template in current directory.&lt;br /&gt;&lt;br /&gt;For "gui" mode you have to execute the following command:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;create-archetype.bsh -wait&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;"wait" parameter is used my Scriptlandia framework to indicate that our script should wait for completion of gui/swing thread execution. Otherwise, frame will appear for very short time and just after that script execution will be terminated.&lt;br /&gt;&lt;br /&gt;In "gui" mode you will see same input parameters, just layed out in more convenient for typical Windows user. After selecting appropriate archetype and clicking on "Create archetype" button, new project will be created in the current directory.&lt;br /&gt;&lt;br /&gt;This program uses behind the scene &lt;br /&gt;&lt;a href="http://scriptlandia.sourceforge.net/scriptlandia/apidocs/org/sf/scriptlandia/ScriptlandiaHelper.html#executeMaven%28java.lang.String%5B%5D%29"&gt;Scriptlandia API&lt;/a&gt; to execute maven2 tool:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;ScriptlandiaHelper.executeMaven(args);&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The source for this script is located &lt;a href="http://home.comcast.net/%7Eshvets/blog/archetypes-2.zip"&gt;here&lt;/a&gt; or within examples for Scriptlandia.&lt;br /&gt;&lt;br /&gt;Hope tis program will save you time for your family and friends!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-8216397221490459728?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/8216397221490459728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=8216397221490459728' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/8216397221490459728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/8216397221490459728'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/09/application-template-generation-with.html' title='Application template generation with &quot;Archetypes&quot; program (Scriptlandia, Maven2, Beanshell)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-6271236087701943671</id><published>2007-09-14T04:52:00.000-07:00</published><updated>2007-09-14T04:53:12.898-07:00</updated><title type='text'>Article about JLaunchPad in German Java Magazine</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-6271236087701943671?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://entwickler.com/itr/news/psecom,id,37289,nodeid,82.html' title='Article about JLaunchPad in German Java Magazine'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/6271236087701943671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=6271236087701943671' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6271236087701943671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6271236087701943671'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/09/article-about-jlaunchpad-in-german-java.html' title='Article about JLaunchPad in German Java Magazine'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-7877877319043958371</id><published>2007-09-08T05:33:00.000-07:00</published><updated>2007-09-08T05:51:49.699-07:00</updated><title type='text'>Sony PRS (Portable Reader System) and how to read russian books</title><content type='html'>I got new gadget for my wife - &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;storeId=10151&amp;langId=-1&amp;partNumber=PRS500U2"&gt;Sony book reader&lt;/a&gt;. Unfortunately, it does not support Russian language (and any other languages except English). What to do?&lt;br /&gt;&lt;br /&gt;The solution would be to use pdf file with embedded fonts. In order to generate pdf file I use Java pdf library that is available for everybody: &lt;a href="http://www.lowagie.com/iText/"&gt;iText&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In this example I will use Scriptlandia feature to download and install required dependencies automatically. I use beanshell for writing the program:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;// txt2pdf.bsh&lt;br /&gt;&lt;br /&gt;import org.sf.scriptlandia.ScriptlandiaHelper;&lt;br /&gt;&lt;br /&gt;ScriptlandiaHelper.resolveDependencies("itext", "itext", "2.0.4");&lt;br /&gt;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;import com.lowagie.text.*;&lt;br /&gt;import com.lowagie.text.pdf.*;&lt;br /&gt;&lt;br /&gt;if(bsh.args.length == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;print("Please specify input file.");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;String inFileName = bsh.args[0];&lt;br /&gt;&lt;br /&gt;int index = inFileName.indexOf(".");&lt;br /&gt;&lt;br /&gt;String title = inFileName.substring(0, index);&lt;br /&gt;&lt;br /&gt;String outFileName = title + ".pdf";&lt;br /&gt;&lt;br /&gt;Document document = new Document();&lt;br /&gt;&lt;br /&gt;// Creates a writer that listens to the document and directs a PDF-stream to a file.&lt;br /&gt;PdfWriter.getInstance(document, new FileOutputStream(outFileName));&lt;br /&gt;&lt;br /&gt;document.addTitle(title);&lt;br /&gt;&lt;br /&gt;document.open();&lt;br /&gt;&lt;br /&gt;BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inFileName), "Cp1251"));&lt;br /&gt;&lt;br /&gt;boolean done = false;&lt;br /&gt;&lt;br /&gt;Paragraph paragraph = null;&lt;br /&gt;&lt;br /&gt;while(!done) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;String line = reader.readLine();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(line == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;done = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BaseFont baseFont = BaseFont.createFont("c:\\windows\\fonts\\arial.ttf", "CP1251", BaseFont.EMBEDDED);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Font font = new Font(baseFont, 28);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(line.startsWith(" ")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;paragraph = new Paragraph();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;paragraph.setLeading(28);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.add(paragraph);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.add(new Chunk(" ", font));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.add(new Chunk(line, font));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;document.close();&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;This program produces simple pdf that is executed very fast on the reader comparing to standard process (text-to-word-to-pdf).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-7877877319043958371?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/7877877319043958371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=7877877319043958371' title='150 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7877877319043958371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/7877877319043958371'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/09/sony-prs-portable-reader-system-and-how.html' title='Sony PRS (Portable Reader System) and how to read russian books'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>150</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-3856622850551572436</id><published>2007-09-04T11:11:00.000-07:00</published><updated>2007-09-04T11:25:31.473-07:00</updated><title type='text'>New version of Scriptlandia: 2.2.3 has been released!</title><content type='html'>Scriptlandia is the effort to build scripting command line environment on top of JVM. The user don't have to worry how to install or configure libraries for different scripting languages. It will be done automatically at installation and/or at execution time.&lt;br /&gt;&lt;br /&gt;This release includes:&lt;br /&gt;&lt;br /&gt;1. Integration with &lt;a href="http://jlaunchpad.sf.net"&gt;JLaunchPad&lt;/a&gt;;&lt;br /&gt;&lt;br /&gt;2. Support for latest versions for languages such as Groovy, JRuby, Jython, Scala etc.&lt;br /&gt;&lt;br /&gt;3. Added support for platforms not supported by JDIC library (see documentation);&lt;br /&gt;&lt;br /&gt;4. Bug fixes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-3856622850551572436?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://scriptlandia.sourceforge.net/' title='New version of Scriptlandia: 2.2.3 has been released!'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/3856622850551572436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=3856622850551572436' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/3856622850551572436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/3856622850551572436'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/09/new-version-of-scriptlandia-223-has.html' title='New version of Scriptlandia: 2.2.3 has been released!'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-1298993837866639409</id><published>2007-08-31T14:50:00.000-07:00</published><updated>2007-08-31T15:06:00.571-07:00</updated><title type='text'>Problem with maven-javadoc-plugin</title><content type='html'>I tried to run Maven 2.07 and maven-javadoc-plugin 2.3. Suddenly on "mvn site" I got the following error:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Failed to configure plugin parameters for: org.apache.maven.plugins:maven-javadoc-plugin:2.3&lt;br /&gt;&lt;br /&gt;Not a number: ''&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After analyzing parameters of this plugin I found only one parameter that is a number:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;parameter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;proxyPort&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;type&amp;gt;int&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;lt;/parameter&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It seems that when you are not behind firewall (and, as result, have proxy port represented as empty string: ""), plugin has a bug.&lt;br /&gt;&lt;br /&gt;Simple problem fix could be done in this way:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;reporting&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-javadoc-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;proxyPort&amp;gt;0&amp;lt;/proxyPort&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;lt;/reporting&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-1298993837866639409?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/1298993837866639409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=1298993837866639409' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/1298993837866639409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/1298993837866639409'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/08/problem-with-maven-javadoc-plugin.html' title='Problem with maven-javadoc-plugin'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-3950524905981905455</id><published>2007-08-29T15:11:00.000-07:00</published><updated>2007-08-29T15:43:18.862-07:00</updated><title type='text'>ANNOUNCEMENT: JLaunchPad - next generation of java launcher</title><content type='html'>I'm pleased to announce the release of new project: JLaunchPad, version 1.0.0. &lt;br /&gt;&lt;br /&gt;This program (Java launcher) is the set of Java classes and shell scripts (Windows and Unix) for simplifying installation/launching of Java applications. Once the launcher is installed, it can be reused for starting different Java applications.&lt;br /&gt;&lt;br /&gt;For your application you have to specify required dependencies on other Java libraries (in maven-like fashion). When application is getting executed first time, all dependencies will be downloaded and installed automatically into your local repository. For all consequent executions of the application download process is not required and the only one responsibility of the launcher is to build correct "classpath" and launch the application.&lt;br /&gt;&lt;br /&gt;How it works? It could be explained in the following steps:&lt;br /&gt;&lt;br /&gt;1. On the dedicated server we have Central Repository (sponsored, non-profit, for everybody in the community/ IT industry) of Java components represented in binary format. It could be a separate Java library, some convenient tool or even GUI program.&lt;br /&gt;&lt;br /&gt;2. Each component is provided with the group name, artifact name and the version. Classifier also could be used for specifying Java version of the component (e.g. jdk15, jdk16 etc.).&lt;br /&gt;&lt;br /&gt;3. Each component has binary artifact and could also contain (optional) sources, javadocs or other artifacts.&lt;br /&gt;&lt;br /&gt;4. Each component describes dependencies to other components in the form of Dependencies File. As the result, we have Dependencies Tree (or Transitive Dependencies).&lt;br /&gt;&lt;br /&gt;5. Launcher program connects to the remote Central Repositories and downloads required components to the client's computer. Then the launcher builds correct CLASSPATH and then starts up the programs. &lt;br /&gt;&lt;br /&gt;6. All downloaded components are stored in the Local Repository - it is the mirror of &lt;br /&gt;Central Repositories and it contains only required components with their dependencies.&lt;br /&gt;&lt;br /&gt;7. If somebody wants to introduce new program, s(he) describes it in the form of dependencies,then s(he) writes the code. As the result, it is required to distribute new code only - all dependencies will be downloaded later and only "on-demand" - when it is really required.&lt;br /&gt;&lt;br /&gt;8. "Smart" start-up program reads Dependencies File, installs all the required dependencies and then starts the original program.&lt;br /&gt;&lt;br /&gt;This is real separation of new code from related dependencies. If your application &lt;br /&gt;is, say, dependent on "jdom" library, your distribution does not have to include this file. Instead, you provide dependencies for the project and they will be downloaded automatically.&lt;br /&gt;&lt;br /&gt;For the implementation the following projects were reused:&lt;br /&gt;&lt;br /&gt;- classworlds project (http://dist.codehaus.org/classworlds)&lt;br /&gt;- bootstrap-mini project (http://svn.apache.org/repos/asf/maven/components/tags/maven-2.0.7/bootstrap)&lt;br /&gt;- Java App Launcher (https://java-app-launcher.dev.java.net)&lt;br /&gt;&lt;br /&gt;The project has plenty of examples that explain how to use this launcher for existing applications. The benefit is that all application deliveries  will be built by same&lt;br /&gt;unified scenario and do not contain dependencies - they will be downloaded/reused automatically. Among examples you can see such programs as Ant, Maven 2, Tomcat, JRuby, Groovy, Intellij IDEA, Glean and some other.&lt;br /&gt;&lt;br /&gt;Initially this idea was implemented in another &lt;a href="http://scriptlandia.sf.net"&gt;project&lt;/a&gt;. During last few moths I was able to separate the code and represent it as standalone project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-3950524905981905455?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://jlaunchpad.sourceforge.net' title='ANNOUNCEMENT: JLaunchPad - next generation of java launcher'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/3950524905981905455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=3950524905981905455' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/3950524905981905455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/3950524905981905455'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/08/announcement-jlaunchpad-next-generation.html' title='ANNOUNCEMENT: JLaunchPad - next generation of java launcher'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-811768850133449006</id><published>2007-08-09T10:38:00.001-07:00</published><updated>2007-08-09T10:46:07.635-07:00</updated><title type='text'>New version of google-translate plugin for Intellij IDEA</title><content type='html'>Update: it works now with the latest version of Intellij IDEA 7 (Selena; build 7118).&lt;br /&gt;&lt;br /&gt;    How to use it in side IDEA editor:&lt;br /&gt;&lt;br /&gt;1. In editor select the part to be translated;&lt;br /&gt;2. Select "Translate" item from the editor popup menu;&lt;br /&gt;3. (hidden) "translate.google.com" web site (service) will perform actual translation;&lt;br /&gt;4. Response from the service will be inserted in place of your selection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-811768850133449006?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/google-translate-idea-plugin/' title='New version of google-translate plugin for Intellij IDEA'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/811768850133449006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=811768850133449006' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/811768850133449006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/811768850133449006'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/08/new-version-of-google-translate-plugin_09.html' title='New version of google-translate plugin for Intellij IDEA'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-230820900839091556</id><published>2007-05-05T15:26:00.000-07:00</published><updated>2007-05-05T15:28:23.322-07:00</updated><title type='text'>New version of Scriptlandia: 2.2.1 has been released!</title><content type='html'>This release includes new features and new supported languages. The full list of&lt;br /&gt;supported languages include:&lt;br /&gt;&lt;br /&gt;- Javascript (1.6R4);&lt;br /&gt;- Groovy (1.1-beta1);&lt;br /&gt;- Beanshell (2.0b5);&lt;br /&gt;- Jelly (1.0);&lt;br /&gt;- JRuby (0.9.9);&lt;br /&gt;- Jython (2.2b1);&lt;br /&gt;- Pnuts (1.1);&lt;br /&gt;- Jaskell (1.0);&lt;br /&gt;- JScheme (7.2);&lt;br /&gt;- TCL (1.4.0);&lt;br /&gt;- AWK (0.14);&lt;br /&gt;- f3 (?.?);&lt;br /&gt;- Fortress (build 156);&lt;br /&gt;- Scala (2.4.0);&lt;br /&gt;- Sleep (2.1-beta15);&lt;br /&gt;- Janino (2.5.5);&lt;br /&gt;- Scriptella (0.7);&lt;br /&gt;- Velocity (1.4);&lt;br /&gt;- Freemarker (2.3.9);&lt;br /&gt;- Ant (1.7.0);&lt;br /&gt;- Maven (2.0.6).&lt;br /&gt;&lt;br /&gt;Scriptlandia: what is it? It's the effort to build scripting command line environment on top of JVM. The user don't have to worry how to install or configure libraries for different scripting languages. It will be done automatically at installation and/or at execution time. &lt;br /&gt;&lt;br /&gt;This project is useful for doing fast prototyping in your favorite language without spending time at all on installation/configuration (AKA CoC - convention over Configuration). It's also good for building simple command-line tools.&lt;br /&gt;&lt;br /&gt;How is it different, say, from scripting-for-java project? &lt;br /&gt;&lt;br /&gt;1. It's not tied to Java 6 platform. You can use Java 5; it's possible to have this code ready for java 1.4.&lt;br /&gt;&lt;br /&gt;2. You can specify dependencies for the language in the form of dependencies file (currently it is based on maven 2 pom.xml format). As the result, these dependencies will be downloaded automatically from the server to your local repository when it's required.&lt;br /&gt;&lt;br /&gt;3. It's easy to build environment in which scripts are aware of each other. It can be done by adding new dependencies, not through ancient CLASSPATH approach, but rather through dependencies file.&lt;br /&gt;&lt;br /&gt;4. Language gear is available through the file extension. Thanks to jdic project, corresponding gear will be executed, based on file extension.&lt;br /&gt;&lt;br /&gt;5. Based on extension, different convenient programs-launchers can be assigned to existing extensions like jar, war etc. As an example, if jar represents micro-edition application, suitable launcher will be started. In another example we can associate jar file with ant script and extend available commands for jar file, but everything whatever could be expressed as ant target.&lt;br /&gt;&lt;br /&gt;6. New extensions are introduced: .sl (scriptlandia) and .cw (classworld). They can be used for starting arbitrary programs with correct dependencies specified. See examples: "cafebabe", "jclasslib", "udoc", "jlgui" for details.&lt;br /&gt;&lt;br /&gt;7. Ant and Maven scripts are first-class citizens: you can interpret them as yet another scripting languages.&lt;br /&gt;&lt;br /&gt;8. Scriptlandia is integrated with Nailgun server. It means that for simple scripts you can keep JVM in-memory, drastically reducing start-up time for running scripts.&lt;br /&gt;&lt;br /&gt;9. It is not nescessary to install all dependencies at installation time. Installer program will download and install only minimally required libraries. The rest will be downloaded when you invoke fitst time the script.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-230820900839091556?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://scriptlandia.sourceforge.net/' title='New version of Scriptlandia: 2.2.1 has been released!'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/230820900839091556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=230820900839091556' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/230820900839091556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/230820900839091556'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/05/new-version-of-scriptlandia-221-has.html' title='New version of Scriptlandia: 2.2.1 has been released!'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-5152702989587210429</id><published>2007-04-06T14:43:00.000-07:00</published><updated>2007-04-06T14:49:35.058-07:00</updated><title type='text'>New plugin for Intellij IDEA: translate text from one language to another (translate.google.com)</title><content type='html'>This plugin performs translations in Intellij IDEA Editor Window from one language to another (e.g. from Russian to Spain). It uses "&lt;a href='http://translate.google.com'&gt;http://translate.google.com&lt;/a&gt;" service behind the scene. &lt;br /&gt;&lt;br /&gt;Plugin is especially convenient when you are trying to translate long i18n property files in your project for different languages.&lt;br /&gt;&lt;br /&gt;Plugin adds "Translate" item into popup menu for the editor (also, in "Code" menu and  "Generate" group). It also have separate configuration screen for selecting "from" and "to" languages.&lt;br /&gt;&lt;br /&gt;    How to use&lt;br /&gt;&lt;br /&gt;1. Select the part to be translated;&lt;br /&gt;2. Select "Translate" item from popup menu;&lt;br /&gt;3. "translate.google.com" web site will perform actual translation;&lt;br /&gt;4. Response from the service will be inserted in place of selection.&lt;br /&gt;&lt;br /&gt;The project is located &lt;a href="http://code.google.com/p/google-translate-idea-plugin/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-5152702989587210429?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/google-translate-idea-plugin/' title='New plugin for Intellij IDEA: translate text from one language to another (translate.google.com)'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/5152702989587210429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=5152702989587210429' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5152702989587210429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5152702989587210429'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/04/new-plugin-for-intellij-idea-translate.html' title='New plugin for Intellij IDEA: translate text from one language to another (translate.google.com)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-30115527806409473</id><published>2007-04-04T12:52:00.000-07:00</published><updated>2007-04-04T13:04:32.386-07:00</updated><title type='text'>How to build java presistence example with maven2</title><content type='html'>Here I will show how to build a very simple example that uses java persistence API. In order to simplify the build process I use maven 2. As the result, example archive is very short in size and all required libraries will be downloaded automatically only when it's really required.&lt;br /&gt;&lt;br /&gt;1. Create new Java class, where you map java class/properties to database table/fields. Java persistence annotations will do this job for us:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;import javax.persistence.*;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "MESSAGES")&lt;br /&gt;public class Message {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@Id @GeneratedValue @Column(name = "MESSAGE_ID")&lt;br /&gt;&amp;nbsp;&amp;nbsp;private Long id;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@Column(name = "MESSAGE_TEXT")&lt;br /&gt;&amp;nbsp;&amp;nbsp;private String text;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "NEXT_MESSAGE_ID")&lt;br /&gt;&amp;nbsp;&amp;nbsp;private Message nextMessage;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Message() {}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Message(String text) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.text = text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// getter and setter methods for java properties&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As you can see, "Message" class is mapped to "MESSAGES" table, "id", "text" and "nextMessage" properties - to "MESSAGE_ID", "MESSAGE_TEXT" and "NEXT_MESSAGE_ID" fields.&lt;br /&gt;&lt;br /&gt;2. Now we can create simple program that uses persistent "Message" object:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;import java.util.*;&lt;br /&gt;import javax.persistence.*;&lt;br /&gt;&lt;br /&gt;public class HelloWorld {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Start EntityManagerFactory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EntityManagerFactory emf = Persistence.createEntityManagerFactory("helloworld");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// First unit of work&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EntityManager em = emf.createEntityManager();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EntityTransaction tx = em.getTransaction();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tx.begin();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Message message = new Message("Hello World with JPA");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;em.persist(message);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;em.close();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Second unit of work&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EntityManager newEm = emf.createEntityManager();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EntityTransaction newTx = newEm.getTransaction();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newTx.begin();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List messages =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newEm.createQuery("select m from Message m order by m.text asc").getResultList();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println( messages.size() + " message(s) found:" );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (Object m : messages) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Message loadedMsg = (Message) m;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(loadedMsg.getText());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newTx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newEm.close();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Shutting down the application&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emf.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This example does not refer to any persistent framework directly. Instead, it uses symvolic names to get access to the framework in indirect way. In the abovementioned example we have "helloworld" name to refer to.&lt;br /&gt;&lt;br /&gt;So, who is doing the persistence work here? We can use various frameworks here, but they should comply with java persistence API. For example, Hibernate or Toplink.&lt;br /&gt;&lt;br /&gt;3. In this example we use Hibernate (http://hibernate.org) as persistence framework and hsqldb (http://hsqldb.org) as database. Let's take a look ad the hibernate configuration file (persistence.xml) where we describe "helloworld" factory:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/persistence&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;version="1.0"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- persistence.xml  --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;persistence-unit name="helloworld"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- The provider only needs to be set if you use several JPA providers        --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;provider&amp;gt;org.hibernate.ejb.HibernatePersistence&amp;lt;/provider&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;properties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Scan for annotated classes and Hibernate mapping XML files --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.archive.autodetection" value="class, hbm"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- SQL stdout logging --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.show_sql" value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.format_sql" value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="use_sql_comments" value="true"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.connection.url" value="jdbc:hsqldb:file:persistence-db/test"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.connection.username" value="sa"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.hbm2ddl.auto" value="create"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.c3p0.min_size" value="5"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.c3p0.max_size" value="20"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.c3p0.timeout" value="300"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.c3p0.max_statements" value="50"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="hibernate.c3p0.idle_test_period" value="3000"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/persistence-unit&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/persistence&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This file should be located on your CLASSPATH within META-INF directory. "hibernate.hbm2ddl.auto" property will take care of creating database table automatically.&lt;br /&gt;&lt;br /&gt;4. Maven 2 file is responsible of downloading all dependent libraries, building correct CLASSPATH for the project and running the example (we use "exec:java" plugin for it):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;persistence-deps&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;persistence-deps&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.0.4&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;hsqldb&amp;lt;/groupId&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hsqldb&amp;lt;/artifactId&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.8.0.7&amp;lt;/version&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;3.2.2.ga&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-annotations&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;3.2.1.ga&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-entitymanager&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;3.2.1.ga&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-tools&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;3.2.0.beta9a&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;c3p0&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;c3p0&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;0.9.1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;defaultGoal&amp;gt;compile&amp;lt;/defaultGoal&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;exec-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;java&amp;lt;/goal&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mainClass&amp;gt;hello.HelloWorld&amp;lt;/mainClass&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;scriptlandia-repo&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Scriptlandia Maven2 repository&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://scriptlandia-repository.googlecode.com/svn/trunk/tools&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;5. Now, you can run compete example in one line:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;mvn compile exec:java&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Complete example is located &lt;a href="http://home.comcast.net/~shvets/blog/persistence-example.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-30115527806409473?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/30115527806409473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=30115527806409473' title='42 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/30115527806409473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/30115527806409473'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/04/how-to-build-java-presistence-example.html' title='How to build java presistence example with maven2'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>42</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-442846142942069209</id><published>2007-04-03T07:15:00.001-07:00</published><updated>2007-04-03T07:15:56.850-07:00</updated><title type='text'>How to compile and run Scala program with Ant and Maven 2</title><content type='html'>We have small scala program:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;// HelloWorld.scala&lt;br /&gt;&lt;br /&gt;object HelloWorld {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;def main(args: Array[String]) = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.println("Hello, world!")&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;and want to compile/run it. In order to do it, we have to perform some additional steps.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Compile/run with Ant&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;a). Scala is preinstalled&lt;br /&gt;&lt;br /&gt;You need to have "scala-library" and "scala compiler" libraries in order to compile Scala programs. &lt;br /&gt;You can download them from Scala web site (http://scala-lang.org). &lt;br /&gt;&lt;br /&gt;Your ant script will start with the following lines:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;!-- 1. Define common properties. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name="src.dir" value="src/main/scala"/&amp;gt;&lt;br /&gt;&amp;lt;property name="build.dir" value="target/classes"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name="repository.home" value="c:/maven-repository"/&amp;gt;&lt;br /&gt;&amp;lt;property name="scala-compiler.jar" value="${repository.home}/scala/scala-compiler/2.4.0/scala-compiler-2.4.0.jar"/&amp;gt;&lt;br /&gt;&amp;lt;property name="scala-library.jar" value="${repository.home}/scala/scala-library/2.4.0/scala-library-2.4.0.jar"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- 2. Define Scala CLASSPATH. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;path id="scala.classpath"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${scala-compiler.jar}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${scala-library.jar}"/&amp;gt;&lt;br /&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- 3. Define project CLASSPATH. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;path id="project.classpath"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;path refid="scala.classpath"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${build.dir}"/&amp;gt;&lt;br /&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- 4. Define scala compiler command. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;taskdef resource="scala/tools/ant/antlib.xml"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;classpath refid="scala.classpath"/&amp;gt;&lt;br /&gt;&amp;lt;/taskdef&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now you can compile sources by using "scalac" command:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;!-- 5. Compiles sources by using "scalac" command. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="compile"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${build.dir}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;scalac srcdir="${src.dir}" destdir="${build.dir}" classpathref="project.classpath" force="changed"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include name="**/*.scala"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/scalac&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Once compiled, you can run scala program:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;!-- 6. Runs scala executable. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="run" depends="compile"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;java classname="scala.tools.nsc.MainGenericRunner" fork="true"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;classpath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path refid="project.classpath"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/classpath&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="HelloWorld"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/java&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Run this command:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;ant run&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It will compile and then run scala example.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;b). scala is being installed by maven 2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you don't want to install scala libraries manually, you can use maven tasks for ant&lt;br /&gt;(see http://maven.apache.org/ant-tasks.html for further details):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;project name="scala-compile-test2" default="compile" basedir="." &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:artifact="antlib:org.apache.maven.artifact.ant"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. Define common properties. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="src.dir" value="src/main/scala"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="build.dir" value="target/classes"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. Define Scala CLASSPATH with the help of Maven 2. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--property name="repository.home" value="c:/maven-repository"/--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:localRepository id="local.repository" location="${repository.home}" layout="default"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:pom file="scala-compile-test2.maven" id="maven.project" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:dependencies pathId="scala.classpath" filesetId="compile.fileset" useScope="compile"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pom refid="maven.project"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/artifact:dependencies&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Steps 3-6 are the same as in previous example.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Compile/run with Maven2&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are 2 maven plugings to work with scala sources. First plugin is implemented as &lt;br /&gt;standard extension to the plexus compiler &lt;br /&gt;(http://svn.codehaus.org/plexus/plexus-components/trunk/plexus-compiler/plexus-compilers).&lt;br /&gt;&lt;br /&gt;The extension is located in the following repository:&lt;br /&gt;http://scriptlandia-repository.googlecode.com/svn/trunk/languages&lt;br /&gt;&lt;br /&gt;Another plugin for scala is implemented as regular maven plugin &lt;br /&gt;(see details here: http://millstone.iodp.tamu.edu/~blambi/maven-scala-plugin).&lt;br /&gt;&lt;br /&gt;a). plexus-compiler-scalac&lt;br /&gt;&lt;br /&gt;First, you have to specify the location of scala sources. We'll do it with the help of&lt;br /&gt;"build-helper-maven-plugin":&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;build-helper-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;add-source&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;add-source&amp;lt;/goal&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;src/main/scala&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/sources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Then you configure "maven-compiler-plugin" plugin:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;compilerId&amp;gt;scalac&amp;lt;/compilerId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include&amp;gt;**&amp;lt;/include&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.plexus&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;plexus-compiler-scalac&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;And don't forget about right repository:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;scriptlandia-repo&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Scriptlandia Maven2 repository&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://scriptlandia-repository.googlecode.com/svn/trunk/languages&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now, compilation is easy:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;mvn compile&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In order to run compiled code we'll use "exec" maven plugin:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;exec-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;java&amp;lt;/goal&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mainClass&amp;gt;HelloWorld&amp;lt;/mainClass&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;And run it:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;mvn exec:java&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;b). maven-scala-plugin &lt;br /&gt;&lt;br /&gt;This plugin contains 2 parts: compiler and runner. It requires small configuration:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;iodp.usio&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-scala-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mainClass&amp;gt;HelloWorld&amp;lt;/mainClass&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;compile&amp;lt;/phase&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;compile&amp;lt;/goal&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You also have to specify the location of this plugin:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pluginRepositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;maven2.iodp.usio&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;IODP Maven2 Repository&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://millstone.iodp.tamu.edu/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/pluginRepositories&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now you will be able to compile and run scala code now:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;gt;mvn scala:compile&lt;br /&gt;&lt;br /&gt;&amp;gt;mvn scala:run -DmainClass=HelloWorld&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-442846142942069209?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/442846142942069209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=442846142942069209' title='126 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/442846142942069209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/442846142942069209'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/04/how-to-compile-and-run-scala-program.html' title='How to compile and run Scala program with Ant and Maven 2'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>126</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-8238168287509107719</id><published>2007-03-28T07:38:00.000-07:00</published><updated>2007-03-28T07:50:23.577-07:00</updated><title type='text'>How to build completely dynamic example with Spring 2, Scriptlandia, Beanshell, Groovy and JRuby (revisited)</title><content type='html'>I made small modifications to previously explained example in order to use the custom dynamic language tags from Spring 2 to define dynamic-language-backed beans. Finally, the spring configuration file looks like&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:lang="http://www.springframework.org/schema/lang"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xsi:schemaLocation="&lt;br /&gt;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&lt;br /&gt;http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Creates cat. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;lang:groovy id="cat" script-source="classpath:Cat.groovy"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lang:property name="name" value="cat-name"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/lang:groovy&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Creates dog. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;lang:jruby id="dog" script-interfaces="Animal" script-source="classpath:Dog.ruby"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;refresh-check-delay="5000"&amp;gt; &amp;lt;!-- switches refreshing on with 5 seconds between checks --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lang:property name="name" value="dog-name"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/lang:jruby&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Creates cow. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;lang:bsh id="cow" script-interfaces="Animal" script-source="classpath:Cow.bsh"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lang:property name="name" value="cow-name"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/lang:bsh&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Creates ant (inline script). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;lang:groovy id="ant"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lang:inline-script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class Ant implements Animal {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String name&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void makeSound() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;println name + ": Shhh..."&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/lang:inline-script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lang:property name="name" value="ant-name" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/lang:groovy&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Creates animal farm. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;bean id="farm" class="AnimalFarm"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="animals"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ref bean="cat"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ref bean="dog"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ref bean="cow"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ref bean="ant"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The final version of example is located &lt;a href="http://home.comcast.net/~shvets/blog/animal-farm.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-8238168287509107719?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/8238168287509107719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=8238168287509107719' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/8238168287509107719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/8238168287509107719'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/03/how-to-build-completely-dynamic-example_28.html' title='How to build completely dynamic example with Spring 2, Scriptlandia, Beanshell, Groovy and JRuby (revisited)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-5597863751303025911</id><published>2007-03-19T14:49:00.001-07:00</published><updated>2007-03-19T15:02:30.733-07:00</updated><title type='text'>How to build completely dynamic example with Spring 2, Scriptlandia, Beanshell, Groovy and JRuby</title><content type='html'>Recently, I found this project: &lt;a href="http://www.vitarara.org/cms/groovyworks"&gt;GroovyWorks&lt;/a&gt;;.&lt;br /&gt;It tries to use together such things as Java, Groovy, Spring 2 and Struts 2. Because Struts actions are written as Groovy scripts, it is not required to restart web application for each and every change. It is possible because of dynamic nature of Groovy language.&lt;br /&gt;&lt;br /&gt;But still, it's not completely dynamic. Small portion of the system is written in Java and for each change in Java you have to recompile and redeploy your web application. Is it possible to make it completely dynamic?&lt;br /&gt;&lt;br /&gt;In the following lines I will explain how to build such completely dynamic code. It is standalone application, so Struts 2 is not required. But we still want to have IoC container. Spring 2 fits for our needs, especially with new struts-scripting library, that supports 3 popular languages: Groovy, JRuby and Beanshell.&lt;br /&gt;&lt;br /&gt;1. In order to work with scripts inside Spring 2 we have to create Java classes first. Let's create animal farm that consists of animals:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;// Animal.java&lt;br /&gt;&lt;br /&gt;public interface Animal {&lt;br /&gt;&lt;br /&gt;public void makeSound();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// AnimalFarm.java&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class AnimalFarm {&lt;br /&gt;private List animals;&lt;br /&gt;&lt;br /&gt;public AnimalFarm() {&lt;br /&gt;  System.out.println("New Animal farm has been created.");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setAnimals(List animals) {&lt;br /&gt;  this.animals = animals;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void wakeUp() {&lt;br /&gt;  for(int i=0; i &amp;lt; animals.size(); i++) {&lt;br /&gt;    Animal animal = (Animal)animals.get(i);&lt;br /&gt;&lt;br /&gt;    animal.makeSound();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;2. Now, we can implements different animals in different languages:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;// Cat.groovy&lt;br /&gt;&lt;br /&gt;class Cat implements Animal {&lt;br /&gt;&lt;br /&gt;void makeSound() {&lt;br /&gt;  println "Meow!"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Dog.rb&lt;br /&gt;&lt;br /&gt;require "java"&lt;br /&gt;&lt;br /&gt;include_class("Animal")&lt;br /&gt;&lt;br /&gt;class Dog &amp;lt; Animal&lt;br /&gt;def makeSound&lt;br /&gt;  puts "Bark!!!"&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;Dog.new&lt;br /&gt;&lt;br /&gt;// Cow.bsh&lt;br /&gt;&lt;br /&gt;void makeSound() {&lt;br /&gt;System.out.println("Moo...");&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;3. We'll keep all required libraries in the form of maven2 &lt;a href="http://home.comcast.net/~shvets/blog/pom.xml"&gt;dependencies file&lt;/a&gt;.&lt;br /&gt;Because current version of spring (2.0.3) is not compatible with jruby version 0.9.8&lt;br /&gt;(see bug &lt;a href="http://opensource.atlassian.com/projects/spring/browse/SPR-3255"&gt;SPR-3255&lt;/a&gt;),&lt;br /&gt;we have to keep reference to temporary repository:&lt;br /&gt;http://scriptlandia-repository.googlecode.com/svn/trunk/patches.&lt;br /&gt;&lt;br /&gt;4. All required beans are defined inside spring file:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- dynamo-test.xml --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;beans&amp;gt;&lt;br /&gt;&amp;lt;!-- Enables spring-scripting. --&amp;gt;&lt;br /&gt;&amp;lt;bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Creates cat. --&amp;gt;&lt;br /&gt;&amp;lt;bean id="cat" class="org.springframework.scripting.groovy.GroovyScriptFactory"&amp;gt;&lt;br /&gt;  &amp;lt;constructor-arg value="file:Cat.groovy" /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Creates dog. --&amp;gt;&lt;br /&gt;&amp;lt;bean id="dog" class="org.springframework.scripting.jruby.JRubyScriptFactory"&amp;gt;&lt;br /&gt;  &amp;lt;constructor-arg value="file:Dog.ruby" /&amp;gt;&lt;br /&gt;  &amp;lt;constructor-arg value="Animal" /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Creates cow. --&amp;gt;&lt;br /&gt;&amp;lt;bean id="cow" class="org.springframework.scripting.bsh.BshScriptFactory"&amp;gt;&lt;br /&gt;  &amp;lt;constructor-arg value="file:Cow.bsh" /&amp;gt;&lt;br /&gt;  &amp;lt;constructor-arg value="Animal" /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Creates animal farm. --&amp;gt;&lt;br /&gt;&amp;lt;bean id="farm" class="AnimalFarm"&amp;gt;&lt;br /&gt;  &amp;lt;property name="animals"&amp;gt;&lt;br /&gt;    &amp;lt;list&amp;gt;&lt;br /&gt;      &amp;lt;ref bean="cat"/&amp;gt;&lt;br /&gt;      &amp;lt;ref bean="dog"/&amp;gt;&lt;br /&gt;      &amp;lt;ref bean="cow"/&amp;gt;&lt;br /&gt;    &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;5. The trickiest part here is how to avoid compilation of java code, making code&lt;br /&gt;completely dynamic. To achieve it, we use janino library (http://www.janino.net/)&lt;br /&gt;with JavaSourceClassLoader. We load class from source file, retrieve it as array of bytes&lt;br /&gt;and then add this array as a class to our class loader.&lt;br /&gt;&lt;br /&gt;To load required classes/libraries to CLASSPATH we use Scriptlandia API (http://scriptlandia.sf.net).&lt;br /&gt;The complete example is represented below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;// dynamo-test.bsh&lt;br /&gt;&lt;br /&gt;org.sf.scriptlandia.ScriptlandiaHelper.addMavenDependencies("pom.xml");&lt;br /&gt;&lt;br /&gt;import org.sf.scriptlandia.launcher.ScriptlandiaLauncher;&lt;br /&gt;import org.codehaus.janino.*;&lt;br /&gt;&lt;br /&gt;import org.sf.scriptlandia.util.*;&lt;br /&gt;import org.codehaus.classworlds.ClassRealm;&lt;br /&gt;&lt;br /&gt;import org.springframework.context.ApplicationContext;&lt;br /&gt;import org.springframework.context.support.FileSystemXmlApplicationContext;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Dynamo {&lt;br /&gt;private ClassRealm classRealm;&lt;br /&gt;private ApplicationContext factory;&lt;br /&gt;&lt;br /&gt;public Dynamo(String basedir, String[] classNames, String beansFile) {&lt;br /&gt;  ScriptlandiaLauncher launcher = ScriptlandiaLauncher.getInstance();&lt;br /&gt;&lt;br /&gt;  classRealm = launcher.getMainRealm();&lt;br /&gt;&lt;br /&gt;  register(basedir, classNames);&lt;br /&gt;&lt;br /&gt;  factory = new FileSystemXmlApplicationContext(new String[] { basedir + "/" + beansFile });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void register(String basedir, String[] classNames) {&lt;br /&gt;  ScriptlandiaLauncher launcher = ScriptlandiaLauncher.getInstance();&lt;br /&gt;&lt;br /&gt;  ClassLoader sourceClassloader = new JavaSourceClassLoader(&lt;br /&gt;    launcher.getClass().getClassLoader(),  // parentClassLoader&lt;br /&gt;    new File[] { new File(basedir) }, // optionalSourcePath&lt;br /&gt;    (String) null,                     // optionalCharacterEncoding&lt;br /&gt;    DebuggingInformation.NONE          // debuggingInformation&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  for(int i=0; i &amp;lt; classNames.length; i++) {&lt;br /&gt;    loadClass(classNames[i], sourceClassloader);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Loads class specified by the name.&lt;br /&gt; */&lt;br /&gt;private void loadClass(String name, ClassLoader classLoader) {&lt;br /&gt;  String[] args = new String[] { name };&lt;br /&gt;&lt;br /&gt;  Map bytecodes = ReflectionUtil.invokePrivateMethod(&lt;br /&gt;    classLoader,&lt;br /&gt;    new Object[] { name },&lt;br /&gt;    JavaSourceClassLoader.class,&lt;br /&gt;    "generateBytecodes",&lt;br /&gt;    new Class[] { String.class });&lt;br /&gt;&lt;br /&gt;  classRealm.addConstituent(name, bytecodes.get(name));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public Object getBean(String beanName) {&lt;br /&gt;  return factory.getBean(beanName);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;  // Java classes that needs to be registered.&lt;br /&gt;  String[] classNames = new String[] {"Animal", "AnimalFarm" };&lt;br /&gt;  String basedir = System.getProperty("user.dir");&lt;br /&gt;&lt;br /&gt;  Dynamo dynamo = new Dynamo(basedir, classNames, "dynamo-test.xml");&lt;br /&gt;&lt;br /&gt;  AnimalFarm animalFarm = dynamo.getBean("farm");&lt;br /&gt;&lt;br /&gt;  animalFarm.wakeUp();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-5597863751303025911?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/5597863751303025911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=5597863751303025911' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5597863751303025911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5597863751303025911'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/03/how-to-build-completely-dynamic-example.html' title='How to build completely dynamic example with Spring 2, Scriptlandia, Beanshell, Groovy and JRuby'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-5885558238126973888</id><published>2007-03-08T07:21:00.000-08:00</published><updated>2007-03-08T07:31:22.152-08:00</updated><title type='text'>Building GUI frontend for Maven2 archetype plugin (Beanshell, Swing, Scriptlandia)</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;There are multiple archetypes available for developers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;standard Maven 2 distribution contains 5 archetypes:&lt;span style="font-weight: bold;"&gt; "archetype", "j2ee-simple", "mojo", "quickstart", &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;"site", "webapp"&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;AppFuse 2.0 project (http://appfuse.org) now is rewritten in form of different archetypes (8): &lt;span style="font-weight: bold;"&gt;"basic-jsf", "basic-spring", "basic-struts", "basic-tapestry", "modular-jsf", "modular-spring", &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;"modular-struts", "modular-tapestry"&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;WebTide site (http://www.webtide.com/resources.jsp) published archetypes for web development (10): &lt;span style="font-weight: bold;"&gt;"ActiveMQ", "DOJO", "DWR", "JSF", "SiteMesh", "Spring", "SpringJpa", "Struts", "Tapestry", "WebWork"&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;JPA 101 (http://jroller.com/page/cmaki?entry=jpa_maven_2_archetype) archetype (&lt;span style="font-weight: bold;"&gt;"hibernate-archetype"&lt;/span&gt;).&lt;/li&gt;&lt;/ul&gt;How to handle this amount of different types?&lt;br /&gt;&lt;br /&gt;I wrote simple front-end with the help of Swing and Beanshell that displays all input parameters for the project (group ID, artifact ID, version and arche-type). After selecting appropriate archetype and clicking on "Create archetype" button, new project will be created in the current directory.&lt;br /&gt;&lt;br /&gt;The source for this script is located here: &lt;a href="http://home.comcast.net/%7Eshvets/blog/archetypes.zip"&gt;create-archetype.bsh&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This program uses behind the scene &lt;a href="http://scriptlandia.sourceforge.net/scriptlandia/apidocs/org/sf/scriptlandia/ScriptlandiaHelper.html#executeMaven%28java.lang.String%5B%5D%29"&gt;Scriptlandia API&lt;/a&gt; to execute maven2 tool:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;ScriptlandiaHelper.executeMaven(args);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After this work is done, it's easy to create simple starters for different archetype implementations.&lt;br /&gt;&lt;br /&gt;For starting standard maven 2 archetypes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;// maven-archetype.bsh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;sourceRelative("create-archetype.bsh");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;String[] archetypes = {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt; "archetype", "j2ee-simple", "mojo", "quickstart", "site", "webapp"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;CreateArchetype frame = new CreateArchetype("WebTide");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypes(archetypes);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypeGroupId("org.apache.maven.archetypes");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypeArtifactIdPrefix("maven-archetype-");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypeVersion("1.0");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setVisible(true);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For starting AppFuse archetypes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;// appfuse-archetype.bsh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;sourceRelative("create-archetype.bsh");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;String[] archetypes = {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; "basic-jsf", "basic-spring", "basic-struts", "basic-tapestry",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; "modular-jsf", "modular-spring", "modular-struts", "modular-tapestry"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;CreateArchetype frame = new CreateArchetype("Appfuse");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypes(archetypes);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypeGroupId("org.appfuse");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypeArtifactIdPrefix("appfuse-");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypeVersion("1.0-m3");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setRemoteRepositories("http://static.appfuse.org/repository");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setVisible(true);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For starting WebTide archetypes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;// webtide-archetype.bsh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;// Resource: http://www.webtide.com/resources.jsp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;sourceRelative("create-archetype.bsh");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;String[] archetypes = {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; "ActiveMQ", "DOJO", "DWR", "JSF", "SiteMesh", "Spring", "SpringJpa", "Struts", "Tapestry", "WebWork"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;CreateArchetype frame = new CreateArchetype("WebTide");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypes(archetypes);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypeGroupId("com.webtide");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypeArtifactIdPrefix("maven-archetype-");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setArchetypeVersion("1.0");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setRemoteRepositories("http://scriptlandia-repository.googlecode.com/svn/trunk/tools");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;frame.setVisible(true);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For starting Jpa 101 archetype:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;// jpa-archetype.bsh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;// Resource: http://jroller.com/page/cmaki?entry=jpa_maven_2_archetype&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;sourceRelative("create-archetype.bsh");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;String[] archetypes = {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt; "hibernate-archetype"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;CreateArchetype frame = new CreateArchetype("JPA");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypes(archetypes);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypeGroupId("com.sourcebeat");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypeArtifactIdPrefix("jpa-");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setArchetypeVersion("1.0-SNAPSHOT");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setRemoteRepositories("http://scriptlandia-repository.googlecode.com/svn/trunk/tools");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;frame.setVisible(true);&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-5885558238126973888?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/5885558238126973888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=5885558238126973888' title='122 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5885558238126973888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/5885558238126973888'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/03/building-gui-frontend-for-maven2.html' title='Building GUI frontend for Maven2 archetype plugin (Beanshell, Swing, Scriptlandia)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>122</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-6081574337521941535</id><published>2007-03-07T04:03:00.000-08:00</published><updated>2007-03-07T04:11:59.414-08:00</updated><title type='text'>New version of Scriptlandia: 2.2.0 has been released!</title><content type='html'>This release includes new features and new supported languages. The full list of&lt;br /&gt;supported languages include:&lt;br /&gt;&lt;br /&gt;- Javascript (1.6R4);&lt;br /&gt;- Groovy (1.0);&lt;br /&gt;- Beanshell (2.0b5);&lt;br /&gt;- Jelly (1.0);&lt;br /&gt;- JRuby (0.9.8);&lt;br /&gt;- Jython (2.2b1);&lt;br /&gt;- Pnuts (1.1);&lt;br /&gt;- Jaskell (1.0);&lt;br /&gt;- JScheme (7.2);&lt;br /&gt;- TCL (1.4.0);&lt;br /&gt;- AWK (0.14);&lt;br /&gt;- f3 (?.?);&lt;br /&gt;- Fortress (?.?);&lt;br /&gt;- Scala (2.3.3);&lt;br /&gt;- Janino (2.5.5);&lt;br /&gt;- Scriptella (0.7);&lt;br /&gt;- Velocity (1.4);&lt;br /&gt;- Freemarker (2.3.9);&lt;br /&gt;- Ant (1.7.0);&lt;br /&gt;- Maven (2.0.5).&lt;br /&gt;&lt;br /&gt;What is it: Scriptlandia? It's the effort to build  environment on top of JVM. The user don't have&lt;br /&gt;to worry how to install or configure libraries for different scripting languages. It will be done&lt;br /&gt;automatically at installation and/or at execution time.&lt;br /&gt;&lt;br /&gt;This project is useful for doing fast prototyping in your favorite language without spending time&lt;br /&gt;on installation/configuration (aka CoC). It's also good for building simple command-line tools.&lt;br /&gt;&lt;br /&gt;How is it different from, say scripting-for-java project?&lt;br /&gt;&lt;br /&gt;1. It's not tied to Java 6 platform. You can use Java 5; it's possible to have this code ready for java 1.4.&lt;br /&gt;&lt;br /&gt;2. You can specify dependencies for the language in the form of maven 2 project file. As the result, these dependencies will be downloaded automatically from the server to your local repository.&lt;br /&gt;&lt;br /&gt;3. It's easy to build environment in which scripts are aware of each other. It can be done by adding new dependencies (not through ancient CLASSPATH approach).&lt;br /&gt;&lt;br /&gt;4. Language gear is available through the file extension. Thanks to jdic project, corresponding&lt;br /&gt;gear will be executed, based on extension.&lt;br /&gt;&lt;br /&gt;5. Based on extension, different convenient programs-launchers can be assigned to existing extensions like jar, war etc. As an example, if jar represents micro-edition application, suitable launcher will be started. In another example we can associate jar file with ant script and extend available commands for jar file (now execute command only, see jdk documentation), but everything whatever could be expressed as ant target.&lt;br /&gt;&lt;br /&gt;6. New extensions are introduced: .sl (scriptlandia) and .cw (classworld). They are used for starting arbitrary programs with correct dependencies specified.&lt;br /&gt;&lt;br /&gt;7. Ant and Maven scripts are first-class citizens: you can interpret them as another scripting languages.&lt;br /&gt;&lt;br /&gt;8. Scriptlandia is integrated with Nailgun server. It means that for simple scripts you can keep&lt;br /&gt;JVM in-memory, drastically reducing start-up time for running scripts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-6081574337521941535?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://scriptlandia.sourceforge.net/' title='New version of Scriptlandia: 2.2.0 has been released!'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/6081574337521941535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=6081574337521941535' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6081574337521941535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/6081574337521941535'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/03/new-version-of-scriptlandia-220-has.html' title='New version of Scriptlandia: 2.2.0 has been released!'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-4666734428337964466</id><published>2007-03-01T09:45:00.000-08:00</published><updated>2007-03-01T09:47:05.035-08:00</updated><title type='text'>Excellent introduction into Maven2 for beginners</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-4666734428337964466?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://today.java.net/pub/a/today/2007/03/01/building-web-applications-with-maven-2.html' title='Excellent introduction into Maven2 for beginners'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/4666734428337964466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=4666734428337964466' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/4666734428337964466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/4666734428337964466'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2007/03/excellent-introduction-into-maven2-for.html' title='Excellent introduction into Maven2 for beginners'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-116612517319252373</id><published>2006-12-14T11:34:00.000-08:00</published><updated>2006-12-14T11:39:33.466-08:00</updated><title type='text'>Nice critical analysis of maven 2 pros and cons</title><content type='html'>&lt;a href="http://weblogs.java.net/blog/zarar/archive/2006/12/the_pain_of_mig_1.html"&gt;The pain of migrating from Ant to Maven&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-116612517319252373?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/116612517319252373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=116612517319252373' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/116612517319252373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/116612517319252373'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/12/nice-critical-analysis-of-maven-2-pros.html' title='Nice critical analysis of maven 2 pros and cons'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-116605059260463164</id><published>2006-12-13T14:42:00.000-08:00</published><updated>2006-12-14T07:20:04.496-08:00</updated><title type='text'>New JiniExamples (2.1.001) Project</title><content type='html'>This new project is dedicated to &lt;b&gt;Jini Technology&lt;/b&gt;. It is reincarnation of my very old project for Jini ver. 1.0. Now it's adapted to Jini ver. 2.1.&lt;br /&gt;&lt;br /&gt;The project includes &lt;b&gt;22 examples&lt;/b&gt;, starting from simplest toward more practical examples. The advantages of this project over another similar projects are:&lt;br /&gt;- up to date examples;&lt;br /&gt;- ready to use &lt;b&gt;Ant scripts&lt;/b&gt; (zero configuration);&lt;br /&gt;- &lt;b&gt;Maven 2 project&lt;/b&gt; file for automatic downloads of required dependent files.&lt;br /&gt;&lt;br /&gt;As the result, even beginner could start examples before looking at actual sources for examples. And they are as simple as possible - I try to focus on one aspect only at the same time. &lt;br /&gt;&lt;br /&gt;Hope it accelerates development speed as well as attracts more interest to this underestimated technology.&lt;br /&gt;&lt;br /&gt;Structurally, all examples are divided into 3 groups:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simple Tests&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;# Common tests&lt;br /&gt;# Developing simple service&lt;br /&gt;# Simple Remote Service over JERI&lt;br /&gt;# Simple Remote Service over JERI started from configuration file&lt;br /&gt;# Client as servlet/JSP&lt;br /&gt;# Simple service as service UI&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Advanced Tests&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;# Client listening for events&lt;br /&gt;# Building event generator&lt;br /&gt;# Administrable service&lt;br /&gt;# Activatable Jeri service&lt;br /&gt;# Administrable and Activatable service&lt;br /&gt;# EventMailbox (mercury) example&lt;br /&gt;# Norm example&lt;br /&gt;# Fiddler example&lt;br /&gt;# JavaSpace example&lt;br /&gt;# JavaSpace (Blitz) examples&lt;br /&gt;# Federate example&lt;br /&gt;# Failover example&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Practical Examples&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;# Jini and NetLib library&lt;br /&gt;# Jini and Database&lt;br /&gt;# Speaker service (Speech API)&lt;br /&gt;# Jini Services for home (music, speech, time)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-116605059260463164?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://jiniexamples.sourceforge.net/' title='New JiniExamples (2.1.001) Project'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/116605059260463164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=116605059260463164' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/116605059260463164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/116605059260463164'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/12/new-jiniexamples-21001-project.html' title='New JiniExamples (2.1.001) Project'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-116481958268647234</id><published>2006-11-29T08:59:00.000-08:00</published><updated>2006-11-29T08:59:43.280-08:00</updated><title type='text'>Very good introduction into Scala Language</title><content type='html'>Scala is the new language that follows object-oriented and functional paradigms at the same time. There are some very useful links that could be introduction int the language:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/03/scala-everything-is-object.html"&gt; Scala: Everything is an Object!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/03/scale-up-with-scala.html"&gt;Scale up with Scala&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/04/scala-compose-classes-with-mixins.html"&gt; Scala: Compose Classes with Mixins&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/04/generics-in-scala-part-1_12.html"&gt; Generics in Scala - Part 1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/04/scala-hosts-friendly-visit_114588689788249985.html"&gt; Scala Hosts a Friendly Visitor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/08/xml-integration-in-java-and-scala.html"&gt; XML Integration in Java and Scala&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/08/closures-in-java-and-other-side-of.html"&gt; Closures in Java and The Other Side of Backwards Compatibility&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://debasishg.blogspot.com/2006/11/threadless-concurrency-on-jvm-aka-scala.html"&gt; Threadless Concurrency on the JVM - aka Scala Actors&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-116481958268647234?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/116481958268647234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=116481958268647234' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/116481958268647234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/116481958268647234'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/11/very-good-introduction-into-scala.html' title='Very good introduction into Scala Language'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-115877436313800110</id><published>2006-09-20T10:45:00.000-07:00</published><updated>2006-09-20T10:46:03.496-07:00</updated><title type='text'>Java Kernel (Browser Edition)</title><content type='html'>It looks like Sun is trying to make right steps:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.java.net/blog/enicholas/archive/2006/09/java_browser_ed.html"&gt;Ethan Nicholas's Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.artima.com/forums/flat.jsp?forum=276&amp;thread=175370"&gt;Feedback from Artima site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's not only about the size, it's more about well designed system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-115877436313800110?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/115877436313800110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=115877436313800110' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115877436313800110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115877436313800110'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/09/java-kernel-browser-edition_20.html' title='Java Kernel (Browser Edition)'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-115824456844749970</id><published>2006-09-14T07:34:00.000-07:00</published><updated>2006-09-14T07:36:09.026-07:00</updated><title type='text'>Another useful article about Maven 2 from Eric Redmond</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-115824456844749970?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.devx.com/Java/Article/32386/1954?pf=true' title='Another useful article about Maven 2 from Eric Redmond'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/115824456844749970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=115824456844749970' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115824456844749970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115824456844749970'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/09/another-useful-article-about-maven-2.html' title='Another useful article about Maven 2 from Eric Redmond'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-115634338419388730</id><published>2006-08-23T07:29:00.000-07:00</published><updated>2006-08-23T07:29:44.536-07:00</updated><title type='text'>Grails links</title><content type='html'>It seems that Grails project gains the momentum now. Some links:&lt;br /&gt;&lt;a href="http://grails.codehaus.org/"&gt;Grails Home&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.infoq.com/articles/grails-ejb-tutorial"&gt;Article about Grails: Grails + EJB Domain Models Step-by-Step&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-115634338419388730?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/115634338419388730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=115634338419388730' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115634338419388730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115634338419388730'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/08/grails-links.html' title='Grails links'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-115593769863790139</id><published>2006-08-18T14:45:00.000-07:00</published><updated>2006-08-18T14:48:19.250-07:00</updated><title type='text'>How to run Rails on JRuby</title><content type='html'>Im order to do it, you have to perform the following steps.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Install ruby interpreter into ${ruby.home} (e.g. c:\ruby-1.8.4-20). &lt;br /&gt;You can download latest version for Windows from here:&lt;br /&gt;&lt;br /&gt;http://rubyforge.org/frs/download.php/11926/ruby184-20.exe&lt;br /&gt;&lt;br /&gt;Test it (check ruby version):&lt;br /&gt;&lt;br /&gt;&amp;gt;ruby.exe -v&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ruby installation has packaging tool called gem. Test it's version:&lt;br /&gt;&lt;br /&gt;&amp;gt;gem.bat -v&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Install rails. You can do it in one command:&lt;br /&gt;&lt;br /&gt;&amp;gt;gem.bat --no-rdoc --no-ri --include-dependencies install rails &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you are behind the proxy, download gems separately and then install them individually:&lt;br /&gt;&lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri activesupport-1.3.1.gem&lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri activerecord-1.14.4.gem&lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri actionpack-1.12.5.gem&lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri actionmailer-1.2.5.gem &lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri actionwebservice-1.1.6.gem&lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri RbYAML-0.1.0.gem&lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri rails-1.1.6.gem&lt;br /&gt;&lt;br /&gt;All of these gem files could be downloaded from http://rubyforge.org site.&lt;br /&gt;&lt;br /&gt;You can also update gem tool to the latest version:&lt;br /&gt;&lt;br /&gt;&amp;gt;gem.bat install --no-rdoc --no-ri  rubygems-update-0.9.0.gem&lt;br /&gt;&lt;br /&gt;Test rails version:&lt;br /&gt;&lt;br /&gt;&amp;gt;rails.bat -v&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Install jruby library into ${jruby.home} folder (e.g. c:\jruby-0.9.1). &lt;br /&gt;Prepare jruby.bat script file:&lt;br /&gt;&lt;br /&gt;SET RUBY_HOME=c:\ruby-1.8.4-20&lt;br /&gt;SET JRUBY_HOME=c:\jruby-0.9.1&lt;br /&gt;&lt;br /&gt;SET CLASSPATH=%JRUBY_HOME%\lib\jruby.jar;%JRUBY_HOME%\lib\jvyaml.jar;%JRUBY_HOME%\lib\plaincharset.jar;%JRUBY_HOME%\lib\asm.jar&lt;br /&gt;&lt;br /&gt;java -Djruby.home=%RUBY_HOME% -Djruby.shell="cmd.exe" -Djruby.script=jruby.bat -classpath %CLASSPATH% org.jruby.Main &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The trick here is that we use native ruby libraries from ruby installation (not from jruby installation).&lt;br /&gt;&lt;br /&gt;Now you can execute all commands, required for building/running Rails application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. Create new project (testrails). Keep in mind that the project will be created in the current directory:&lt;br /&gt;&lt;br /&gt;&amp;gt;jruby.bat c:\ruby-1.8.4-20\bin\rails testrails&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Newly generated project has already some commands inside, so we need to change the current directory:&lt;br /&gt;&lt;br /&gt;&amp;gt;cd testrails&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. Modify testrails\config\database.yml to point to your database. By default, it's MySQL database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. Start the database. Create database for devepoment: testrails_development&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. Generate the model&lt;br /&gt;&lt;br /&gt;&amp;gt;jruby.bat .\script\generate controller MyTest&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. Generate the controller&lt;br /&gt;&lt;br /&gt;&amp;gt;jruby.bat .\script\generate controller MyTest&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9. Start the WEBrick server&lt;br /&gt;&lt;br /&gt;&amp;gt;start jruby.bat .\script\server&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10. Test if server is started properly in the browser:&lt;br /&gt;&lt;br /&gt;&amp;gt;http://localhost:3000/my_test&lt;br /&gt;&lt;br /&gt;Now you should see your view.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Rails on JRuby is very slow. Let's wait for improvements from JRuby team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-115593769863790139?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/115593769863790139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=115593769863790139' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115593769863790139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115593769863790139'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/08/how-to-run-rails-on-jruby.html' title='How to run Rails on JRuby'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-115074736213644729</id><published>2006-06-19T13:00:00.000-07:00</published><updated>2006-06-19T13:02:42.616-07:00</updated><title type='text'>How to pre-compile JSP pages for Weblogic8 with Ant</title><content type='html'>It can be done in similar way as for Tomcat Application Server (see this &lt;a href="http://scriptlandia.blogspot.com/2006/04/how-to-pre-compile-jsp-pages-for.html"&gt;link&lt;/a&gt;). The only difference is: we have another JSP compiler which takes different input parameters and expects JSP pages in well specified locations. It does not "like" JSP pages within WEB-INF folder, so you need to follow this rule. Otherwise you have to copy files with "wrong" locations into "right" locations.&lt;br /&gt;&lt;br /&gt;1. Specify "project.classpath" for your project. It will include all jars required to compile or run your project:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;path id="project.classpath"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;2. Specify "weblogic.jsp.classpath". You need to have Weblogic Web Server installed ar ${weblogic.home}. You also need to specify, where you have your implementation of logging system ("${repository.home}/log4j").&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;path id="weblogic.jsp.classpath"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. You have to include jars from your project. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path refid="project.classpath"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. Weblogic jsp compiler and dependent classes (including JavaEE/Servlet/JSP interface classes). --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="${weblogic.home}/server/lib"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include name="weblogic.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3. This library is required by Weblogic jsp compiler (not in weblogic installation!). --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="${repository.home}/saxpath"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include name="saxpath-1.0-FCS.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4. Weblogic jsp compiler internally uses Java compiler. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="${java.home}/lib"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include name="tools.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="${java.home}/../lib"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include name="tools.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 5. Implementation of logging system (if it is not in "project.classpath" yet). --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="${global.repository.home}/log4j"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include name="log4j-1.2.8.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;3. Now we can generate Java sources for JSP files. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="jsp.src.dir" value="&amp;lt;the root for your JSP files&amp;gt;"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="jsp.package.name" value="&amp;lt;the package name for your JSPs, like com.mycompany.jsp&amp;gt;"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="build.dir" value="target/build"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="jsp.generated.src.dir" value="${build.dir}/jsp_sources"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="jsp.classes.dir" value="${build.dir}/jsp_classes"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="tomcat.jsp.generate"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${jsp.generated.src.dir}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${jsp.classes.dir}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;java classname="org.apache.jasper.JspC" fork="yes"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;classpath refid="tomcat.jsp.classpath" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-uriroot ${jsp.src.dir} -d ${jsp.generated.src.dir} -p ${jsp.package.name} -webapp ${jsp.src.dir}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/java&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name ="weblogic.jsp.generate"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${jsp.generated.src.dir}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${jsp.classes.dir}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;java classname="weblogic.jspc" fork="yes"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;classpath refid="weblogic.jsp.classpath" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sysproperty key="weblogic.jsp.windows.caseSensitive" value="false"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-forceGeneration -keepgenerated -compileAll -webapp ${jsp.src.dir} -d ${jsp.generated.src.dir}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/java&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It is very important to set "weblogic.jsp.windows.caseSensitive" to "false". At the same step Weblogic will compile Java sources into Java classes (-forceGeneration and -keepgenerated). Compiled JSP java classes will be located in same folders as JSP compiled classes. We will separate them on next step.&lt;br /&gt;&lt;br /&gt;You don't have to specify package name for JSP pages. JSP compiler will assign default "jsp_servlet" package name for all JSP pages. Each folder will be converted with the "_" prefix plus original name, each jsp page into "__" prefix plus original name.&lt;br /&gt;&lt;br /&gt;4. Now, it's better to separate generated Java sources from compiled files.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name ="weblogic.jsp.compile" depends="weblogic.jsp.generate"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description="Separates sources from classes"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;move todir="${jsp.classes.dir}/jsp_servlet"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="${jsp.generated.src.dir}/jsp_servlet"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include name="**/*.class"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/move&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If, on this step you don't have compiler errors, your source code (JSP part) is not broken.&lt;br /&gt;&lt;br /&gt;When you assemble war file, you should include everything from  ${jsp.src.dir} folder except JSP files and their includes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-115074736213644729?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/115074736213644729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=115074736213644729' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115074736213644729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/115074736213644729'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/06/how-to-pre-compile-jsp-pages-for.html' title='How to pre-compile JSP pages for Weblogic8 with Ant'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114925939248032682</id><published>2006-06-02T07:38:00.000-07:00</published><updated>2006-06-02T07:43:34.593-07:00</updated><title type='text'>How to handle JSP Error Page</title><content type='html'>At first glance it looks like a very straightforward task.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Each JSP page should use "errorPage" attribute. For example:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%-- /example.jsp --%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page errorPage="/WEB-INF/templates/errorPage.jsp"%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%--  some JSP content --%&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you don't want to repeat this for each JSP page, use Tiles template or specify error page in "web.xml" file:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;error-page&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exception-type&amp;gt;java.lang.Throwable&amp;lt;/exception-type&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;location&amp;gt;/WEB-INF/templates/errorPage.jsp&amp;lt;/location&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/error-page&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This description registers "errorPage.jsp" JSP page as error page for all JSP pages within web application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. You need to create error page, which displays runtime exceptions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%-- /WEB-INF/templates/errorPage.jsp --%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page isErrorPage="true" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&amp;nbsp;&amp;nbsp;out.println("Exception: " + exception);&lt;br /&gt;%&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By using "isErrorPage" attribute you declare this JSP page as error page. As a result, you have access to "exception" JSP variable (in addition to regular "application", "session", &lt;br /&gt;"request", etc.).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is basic. The problem happened, when your JSP page generates big output (bigger than page buffer) before the exception. In this case your error page will be appended to the current content instead of displaying in the new page.&lt;br /&gt;&lt;br /&gt;To overcome the problem you can:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.A. Play with "buffer" attribute. Say, you know, that the size of your page will never be more than 1MB. In this case add these attributes to the page:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%-- /example2.jsp --%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page errorPage="/WEB-INF/templates/errorPage.jsp"%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page buffer="1024kb"%&amp;gt;&lt;br /&gt;&amp;lt;%@ page autoFlush="false"%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%--  some JSP content --%&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This approach is not perfect, because you cannot guarantee the maximum page size. Another drawback is that page will be refreshed only after completing the operation. This could hurt user's perception.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.B.1. Use custom javascript code to clear flushed already output. By using "document.getElementById()" function we canget reference to the body and rewrite it:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%-- /WEB-INF/templates/errorPage.jsp, ver.1 --%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page isErrorPage="true" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function newPage() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var exception = '&amp;lt;%= exception %&amp;gt;';&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var body = document.getElementById("body");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;body.innerHTML =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;lt;html&amp;gt;" +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"  &amp;lt;body&amp;gt;" +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"    Exception: " + exception +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"  &amp;lt;/body&amp;gt;" +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;lt;/html&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;body/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This solution fits for simple error pages only. If you want to display full-featured error page, you have to look for another solution (see 3.B.2).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.B.2. Redirect to another page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This scenario is based on 3.B.1 solution. Now, instead of preparing the content to display, we'll submit the form, redirecting the flow to the requested page. In order to get the reference to javascript's "document" obect and clear it, we'll use document.open()" function:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%-- /WEB-INF/templates/errorPage.jsp, ver.2 --%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page isErrorPage="true" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&amp;nbsp;&amp;nbsp;// We want to have exception available on the redirected page.&lt;br /&gt;&amp;nbsp;&amp;nbsp;session.setAttribute("javax.servlet.error.exception", &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.getAttribute("javax.servlet.error.exception"));&lt;br /&gt;%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function newPage(action) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var newDoc = document.open("text/html", true);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(newDoc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var errorFormName = 'errorForm';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var txt =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;lt;html&amp;gt;" +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"  &amp;lt;body&amp;gt;" +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"    &amp;lt;form id='" + errorFormName + "' method='get'/&amp;gt;" +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"  &amp;lt;/body&amp;gt;" +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;lt;/html&amp;gt;";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newDoc.write(txt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newDoc.close();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var form = newDoc.getElementById(errorFormName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;form.action = action;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;form.submit();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newPage("someURL"); // direct execution of javascript custom function&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;body/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This solution does not work properly yet. The problem is, that at the time of javascript execution the html page is not completely generated yet. As the result, "document.open()" call will return "null" object and the conten for the redirection will not be generated. See 3.B.3 for the solution.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.B.3. Using timer object.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This scenario is based on 3.B.2 solution. It is exactly the same, the only difference is how we call "newPage()" function. Instead of direct call we'll do it indirectly from the timer:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%-- /WEB-INF/templates/errorPage.jsp, ver.3 --%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page isErrorPage="true" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&amp;nbsp;&amp;nbsp;// We want to have exception available on the redirected page.&lt;br /&gt;&amp;nbsp;&amp;nbsp;session.setAttribute("javax.servlet.error.exception", &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.getAttribute("javax.servlet.error.exception"));&lt;br /&gt;%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function newPage(action) { ... }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var timer = new Timer("timer");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timer.setScript("newPage('someURL')");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timer.start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;body/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Timer is the special custom javascript class that performs call to a given script periodically until the script returns "true" value. After this, the timer will stop execution.&lt;br /&gt;&lt;br /&gt;You can download inplementation for the timer from here:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;http://home.comcast.net/~shvets/blog/timer.js&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now JSP error page work properly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114925939248032682?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114925939248032682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114925939248032682' title='85 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114925939248032682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114925939248032682'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/06/how-to-handle-jsp-error-page.html' title='How to handle JSP Error Page'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>85</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114850748543065912</id><published>2006-05-24T14:49:00.000-07:00</published><updated>2006-05-24T14:52:32.896-07:00</updated><title type='text'>Search Engine for Maven 2 (and other Java artifacts)  from SourceLabs.</title><content type='html'>CJAR is the combination of Maven2 structured repository of Java artifacts with powerful Lucene based search engine and related tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114850748543065912?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://area51.sourcelabs.com/cjar/' title='Search Engine for Maven 2 (and other Java artifacts)  from SourceLabs.'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114850748543065912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114850748543065912' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114850748543065912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114850748543065912'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/05/search-engine-for-maven-2-and-other.html' title='Search Engine for Maven 2 (and other Java artifacts)  from SourceLabs.'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114840001953855039</id><published>2006-05-23T08:49:00.000-07:00</published><updated>2006-05-23T09:03:08.356-07:00</updated><title type='text'>CafeBabe bytecode editor v.1.4 - welcome back!</title><content type='html'>This is my very old project - I started it probably in 1997-1998.&lt;br /&gt;&lt;br /&gt;By using CafeBabe you can view/edit the content of Java bytecodes. Also it understands the format of serialized files. Initially the project had some oprimization/obfuscation tools. I removed them in favor of simplicity.&lt;br /&gt;&lt;br /&gt;Project contains libraries that can be used separately:&lt;br /&gt;&lt;br /&gt;* classfile - parsing of Java class file; &lt;br /&gt;* serfile - parsing of Java *.ser file;&lt;br /&gt;* MDI - represents Multi Document Interface implementation;&lt;br /&gt;* Net Lib - library for working with sockets (similar to servlet API, but not attached to any container).&lt;br /&gt;&lt;br /&gt;Project is well modularized and uses Maven 2 as the build (...) tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114840001953855039?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cafebabe.sf.net' title='CafeBabe bytecode editor v.1.4 - welcome back!'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114840001953855039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114840001953855039' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114840001953855039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114840001953855039'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/05/cafebabe-bytecode-editor-v14-welcome.html' title='CafeBabe bytecode editor v.1.4 - welcome back!'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114839919122753799</id><published>2006-05-23T08:42:00.000-07:00</published><updated>2006-05-23T08:46:31.680-07:00</updated><title type='text'>Scriptlandia 2.1.0 has been released.</title><content type='html'>Latest update of the Scriptlandia scripting environment, version 2.1.0.&lt;br /&gt;&lt;br /&gt;It includes support for such extensions as *.jad, *cwd (classworld file), *.class, *.apt-jelly, *.apt-fmt.&lt;br /&gt;&lt;br /&gt;The library of examples has new examples to show what this environment can do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114839919122753799?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://scriptlandia.sf.net/' title='Scriptlandia 2.1.0 has been released.'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114839919122753799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114839919122753799' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114839919122753799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114839919122753799'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/05/scriptlandia-210-has-been-released.html' title='Scriptlandia 2.1.0 has been released.'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114806677348888251</id><published>2006-05-19T12:24:00.000-07:00</published><updated>2006-05-19T12:26:22.390-07:00</updated><title type='text'>How to use Ant, Maven2 and Scripting Languages together</title><content type='html'>I have used Ant tool to organize build process for a long period of time. It's pretty convenient and helps you to organize a lot of useful actions around compilation, packaging, deployment etc. &lt;br /&gt;&lt;br /&gt;After some period of time I found that it is very convenient to use "script" task to extend basic functionality of Ant tool or dynamically customize it. For example, Javascript or Beanshell scripting languages are perfect selection for doing this.&lt;br /&gt;&lt;br /&gt;The only one thing that Ant doesn't take care of is the project dependency resolution for libraries used within your project. Maven tool is especially designed to solve this problem.&lt;br /&gt;&lt;br /&gt;As the result, the following architecture could cover all or the most of possible scenarios  for describing build process: Ant + Maven + Some Scripting Language (Beanshell, Javascript, Groovy etc.)&lt;br /&gt;&lt;br /&gt;Let me introduce basic steps that help you to solve the problem.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Ant tool should be aware of Maven. In order to achieve this, download "Maven Tasks for Ant library" (e.g. maven-artifact-ant-2.x.x-dep.jar) and install it into ${ant.home}/lib directory.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Once Maven Tasks for Ant are installed, we can start using them (in project.xml). First of all, describe the namespace for maven tasks:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project name="myProject" default="run" basedir="." &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:artifact="antlib:org.apache.maven.artifact.ant"&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Specify the location of your local Maven repository ("${repository.home}"). Usually it is ${user.home}/.m2, but you can choose any other location. Maven will download dependent libraries and save them inside this repository:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="repository.home" value="c:/local-maven-repository"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:localRepository id="local.repository" location="${repository.home}" layout="default"/&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. Load the Maven project file and assign some id for the project:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:pom file="pom.xml" id="maven.project" /&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. Export various classpath variables from the Maven. In the following example we have access to compile-time, run-time and test-time classpath variables:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="resolve.dependencies"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pom refid="maven.project"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/artifact:dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pom refid="maven.project"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/artifact:dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pom refid="maven.project"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/artifact:dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. Now you can use Ant tasks/targets the same way as before. You don't need to build classpath manually, it will be built dynamically based on the information from "pom.xml" maven file.&lt;br /&gt;&lt;br /&gt;You also should be aware of some commonly used properties inside Maven. For example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;${maven.project.build.sourceDirectory} -&amp;gt; src/main/java &lt;br /&gt;${maven.project.build.directory}  -&amp;gt; target&lt;br /&gt;${maven.project.build.outputDirectory} -&amp;gt; target/classes&lt;br /&gt;${maven.project.name} - the project name&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can find out other properties here: http://maven.apache.org/maven-model/maven.html.&lt;br /&gt;&lt;br /&gt;Let's create basic Ant targets, like clean-compile-jar-run:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="jar.file" value="${maven.project.build.directory}/${maven.project.name}.jar"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="clean" description="Removes all compiled classes"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;delete dir="${maven.project.build.directory}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;target name="compile" depends="resolve.dependencies" description="Compiles java sources"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${maven.project.build.outputDirectory}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;javac destdir="${maven.project.build.outputDirectory}"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;includeAntRuntime="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug="${debug}"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;optimize="${optimize}"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deprecation ="${deprecation}"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;classpath refid="compile.classpath"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;src path="${maven.project.build.sourceDirectory}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/javac&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="jar" depends="compile" description="Prepare packaging for the project"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;jar destfile="${jar.file}"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="${maven.project.build.outputDirectory}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/jar&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="run" depends="jar"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;java jar="${jar.file}" fork="true" failonerror="true" maxmemory="128m"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;classpath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;path refid="runtime.classpath"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${jar.file}""/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/classpath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/java&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="run.script"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script language="beanshell"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print("Hello, World!");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. Your dependencies for the project are expressed in the form of "pom.xml" maven file:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;your.group.id&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;your.artifact.id&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;your.version&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;YourName&amp;lt;/name&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Here you have to describe all your dependencies. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;log4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;log4j&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.2.12&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;By using this approach we can build scripts of any level of complexity without introducing Java compilation at all. Such programs will contain light-weight code, related to implementation only. All heavy-weight parts of the program will be conveniently located in the repository.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114806677348888251?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114806677348888251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114806677348888251' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114806677348888251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114806677348888251'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/05/how-to-use-ant-maven2-and-scripting.html' title='How to use Ant, Maven2 and Scripting Languages together'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114753089300796116</id><published>2006-05-13T07:28:00.000-07:00</published><updated>2006-05-13T07:34:53.246-07:00</updated><title type='text'>How to make JavaEE project with Maven2</title><content type='html'>You want to support multiple modules in your project. Suppose you plan to have these modules:&lt;br /&gt;&lt;br /&gt;- Java Module (one or more);&lt;br /&gt;- EJB Module (dependent on Java Module);&lt;br /&gt;- WEB Application Module (dependent on Java and EJB Modules);&lt;br /&gt;- Enterprise Application Module (dependent on Java, EJB and Web Application Module).&lt;br /&gt;&lt;br /&gt;First of all, you have to create multi-module project. It is special type of maven project - it does not produce any artifact. Its main purpose is to host modules - single maven projects - and to perform group operations for all modules. &lt;br /&gt;&lt;br /&gt;Each single maven project should be aware of parent project. The same is true for parent maven project - it has to be aware about all the children.&lt;br /&gt;&lt;br /&gt;The following steps describe whole process of creating such a project.&lt;br /&gt;&lt;br /&gt;1. Create multi-project with the following directory structure:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;myMultiProject&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myJavaModule1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myJavaModule2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEJBModule1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEJBModule2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myWebApplicationModule1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myWebApplicationModule2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEnterpriseApplicationModule&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;2. Create maven project "pom.xml" files inside parent directory and inside each child project. Each "pom.xml" file contains specific to given project information.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;myMultiProject&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myJavaModule1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myJavaModule2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEJBModule1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEJBModule2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myWebApplicationModule1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myWebApplicationModule2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEnterpriseApplicationModule&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pom.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can auto-generate "pom.xml" files by using special "archetype:create" command. Only these archetypes are supported now: "quickstart", "webapp", "site", "mojo" and "marmalade-mojo". For our process we can use only 2 first archetypes.&lt;br /&gt;&lt;br /&gt;Run these commands:&lt;br /&gt;&lt;br /&gt;- for parent multi-project (in the directory where you plan to hst whole project):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;gt;mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=myMultiProjectGroupId -DartifactId=myMultiProjectArtifactId -DpackageName= -Dversion=1.0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This command creates the directory with the name specified as artifactId: "myMultiProjectArtifactId". You have to change "packaging" value from "jar" to "pom" inside "pom.xml".&lt;br /&gt;&lt;br /&gt;You have to change current directory to "myMultiProjectArtifactId" before running all following commands.&lt;br /&gt;&lt;br /&gt;- for Java Module:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;gt;mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=myMultiProjectGroupId.myMultiProjectArtifactId -DartifactId=myJavaModule1 -DpackageName=my.new.package -Dversion=1.0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This command creates "myJavaModule1" with minimal set of directories/files for "quickstart" archetype.&lt;br /&gt;&lt;br /&gt;- for EJB Module:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;gt;mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=myMultiProjectGroupId.myMultiProjectArtifactId -DartifactId=myEJBModule1 -DpackageName=my.new.package -Dversion=1.0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This command creates "myJavaModule" with minimal set of directories/files for "quickstart" archetype.&lt;br /&gt;&lt;br /&gt;- for Web Application Module:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;gt;mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=myMultiProjectGroupId.myMultiProjectArtifactId -DartifactId=myWebApplicationModule1 -DpackageName=my.new.package -Dversion=1.0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This command creates "myWebApplicationModule1" with minimal set of directories/files for "webapp" archetype.&lt;br /&gt;&lt;br /&gt;- for Enterprise Application Module:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;gt;mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=myMultiProjectGroupId.myMultiProjectArtifactId -DartifactId=myEnterpriseApplicationModule -DpackageName=my.new.package -Dversion=1.0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This command creates "myEnterpriseApplicationModule" with minimal set of directories/files for "quickstart" archetype. &lt;br /&gt;&lt;br /&gt;As you can see, for Java, EJB, Enterprise Application Modules and Multi-Project we use "quickstart" archetype and for Web Application - "webapp" archetype. &lt;br /&gt;&lt;br /&gt;The cyclic dependency between parent and children projects should be expressed in the following way: for parent project we have to use "modules" tag, for children projects - "parent" tag.&lt;br /&gt;&lt;br /&gt;Parent project's structure looks like this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--  1. Specify group ID, artifact ID and version for the parent project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myMultiProjectArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;myMultiProjectVersion&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--  2. Specify "pom" type. This type indicates that this project is parent multi-project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;pom&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3. List all children projects names (name is directory name as well). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modules&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module&amp;gt;myJavaModule1&amp;lt;/module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module&amp;gt;myJavaModule2&amp;lt;/module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module&amp;gt;myEJBModule1&amp;lt;/module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module&amp;gt;myEJBModule2&amp;lt;/module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module&amp;gt;myWebApplicationModule1&amp;lt;/module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module&amp;gt;myWebApplicationModule2&amp;lt;/module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module&amp;gt;myEnterpriseApplicationModule&amp;lt;/module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/modules&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Child project's structure looks like this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--  1. Specify group ID, artifact ID and version for child project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId.myMultiProjectArtifactId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myJavaArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;myJavaModuleVersion&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--  2. Specify the type of the project: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"jar", "war", "ear". "ejb", "ejb3", "rar", "par", "pom", "maven-plugin" --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--  3. Specify parameters and the location of the parent project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;parent&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myMultiProjectArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;myMultiProjectVersion&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;relativePath&amp;gt;../pom.xml&amp;lt;/relativePath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/parent&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Java Module&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Below is typical "pom.xml" content for Java Module:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. Current project description. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. Reference to parent project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3. Dependencies on another libraries, projects etc. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4. Specify the content of generated artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.1. Specify the final name of the artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;finalName&amp;gt;myJavaModule1FinalName&amp;lt;/finalName&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;defaultGoal&amp;gt;package&amp;lt;/defaultGoal&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.2. Specify the location of sources (for non-standard location). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${basedir}/src/main/java --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sourceDirectory&amp;gt;../src/java&amp;lt;/sourceDirectory&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.3. Specify the location of the filter file (if filtering is used). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filters&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filter&amp;gt;target/filter.properties&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/filters&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.4. Specify the location of resources (for non-standard location). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${basedir}/src/main/resources --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;../src/resources&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filtering&amp;gt;true&amp;lt;/filtering&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclude&amp;gt;*web*.xml&amp;lt;/exclude&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5. Specify used Java version. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.6. Specify files to include. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include&amp;gt;**/com/**&amp;lt;/include&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/includes&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.7. Specify files to exclude (if required). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclude&amp;gt;com/sun/**/*.java&amp;lt;/exclude&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;4. EJB Module&lt;br /&gt;&lt;br /&gt;EJB Nodule is dependent on Java Module:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. Current project description. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;ejb&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. Reference to parent project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3. Dependencies on another libraries, projects etc. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.1. Specify dependencies on external libraries. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.2. Specify dependencies on EJB libraries. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;javax.ejb&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;ejb&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.2.1. This library is provided by EJB Container. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.3. Specify dependencies on internal libraries. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId.myMultiProjectArtifactId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myJavaModule1ArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myJavaModuleVersion&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.3.1. This library is required at runtime. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4. Specify the content of generated artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.1. Specify the final name of the artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;finalName&amp;gt;myEJBModule1FinalName&amp;lt;/finalName&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;defaultGoal&amp;gt;package&amp;lt;/defaultGoal&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.2. Specify the location of sources (if you have non-standard location). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${basedir}/src/main/java --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sourceDirectory&amp;gt;../../src/java&amp;lt;/sourceDirectory&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.3. We don't want to filter for this module: "filters" section is empty. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.4. Specify the location of resources (for non-standard location). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${basedir}/src/main/resources --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;../src/java/META-INF&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;targetPath&amp;gt;META-INF&amp;lt;/targetPath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filtering&amp;gt;false&amp;lt;/filtering&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclude&amp;gt;*application*.xml&amp;lt;/exclude&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5. Specify used Java version. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.6. Specify files to include. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include&amp;gt;**/ejb/**&amp;lt;/include&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/includes&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.7. Nothing to exclude. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. WEB Application Module&lt;br /&gt;&lt;br /&gt;Web Application Module is dependent on Java and EJB Modules.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. Current project description. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;war&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. Reference to parent project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3. Dependencies on another libraries, projects etc. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.1. Specify dependencies on external libraries. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.2. Specify dependency on servlet API library. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;servlet-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.4&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.2.1. This library is provided by Web Container. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.3. Specify dependency on JSP API library (if required). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;jsp-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.3.1. This library is provided by WEB Container. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.4. Specify dependency on other web libraries: tags, struts, tiles etc... (if required). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.5. Specify dependency on database driver (if required). --&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;oracle&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;oracle-driver&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;9.2.0.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.6. Specify dependencies on EJB libraries (if required). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;javax.ejb&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;ejb&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.6.1. This library is provided by EJB Container. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.7. Specify dependencies on internal libraries. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId.myMultiProjectArtifactId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myJavaModule1ArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myJavaModule1Version&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.7.1. This library is required at runtime. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId.myMultiProjectArtifactId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myEJBModule1ArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myEJBModule1Version&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.7.2. This library is required at runtime. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4. Specify the content of generated artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.1. Specify the final name of the artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;finalName&amp;gt;myWebApplicationModule1FinalName&amp;lt;/finalName&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;defaultGoal&amp;gt;package&amp;lt;/defaultGoal&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.2. Specify the location of sources (if you have non-standard location). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${basedir}/src/main/java --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sourceDirectory&amp;gt;../src/java&amp;lt;/sourceDirectory&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.3. We don't want to filter for this module: "filters" section is empty. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.4. Specify the location of resources (for non-standard location). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${basedir}/src/main/resources --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;../src/config&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filtering&amp;gt;false&amp;lt;/filtering&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include&amp;gt;*.properties&amp;lt;/include&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;../src/resources&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filtering&amp;gt;false&amp;lt;/filtering&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5. Specify used Java version. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.6. Specify files to include. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/includes&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.7. Specify files to exclude (if required). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/excludes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-war-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.8. Specify the location of Web Application directory (if non-standard). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${basedir}/src/main/webapp --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;warSourceDirectory&amp;gt;../src/web&amp;lt;/warSourceDirectory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;6. Enterprise Application Module&lt;br /&gt;&lt;br /&gt;This module performs main assembly work plus adds some application-level resources, like "application.xml" file. You have to list all the modules to be included into "ear" file in "dependencies" section. Each module should be marked with the corresponding type: "jar", "war", "ejb", "ejb3", "ejb-client", "rar", "par", "sar".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. Current project description. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;ear&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. Reference to parent project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3. Dependencies on another modules within the multi-module project. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.1. Dependency on Java Module. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;type&amp;gt;jar&amp;lt;/type&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.2. We need to include this module into application.xml; required by EJB module. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;includeInApplicationXml&amp;gt;true&amp;lt;/includeInApplicationXml&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.3. Dependency on EJB Module. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;type&amp;gt;ejb&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3.4. Dependency on Web Application Module. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;type&amp;gt;war&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4. Specify the content of generated artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.1. Specify the final name of the artifact. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;finalName&amp;gt;myEnterpriseApplicationModuleFinalName&amp;lt;/finalName&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;defaultGoal&amp;gt;package&amp;lt;/defaultGoal&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.2. We don't want to filter for this module: "filters" section is empty. --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.3. Specify the location of resources (for non-standard location). --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Defailt is: ${project.build.outputDirectory} --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- The file: application.xml will be automatically generated. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;../src/java/META-INF&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;targetPath&amp;gt;META-INF&amp;lt;/targetPath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filtering&amp;gt;false&amp;lt;/filtering&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;include&amp;gt;weblogic-application.xml&amp;lt;/include&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/includes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.4. Specify used Java version. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-ear-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5. Specify modules to include. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;modules&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.1. Include Java Module. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;javaModule&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId.myMultiProjectArtifactId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myJavaModule1ArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myJavaModule1Version&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.1.1. Only if you want different file name inside "ear" file. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bundleFileName&amp;gt;myBundleJavaModule1FileName&amp;lt;/bundleFileName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/javaModule&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.2. Include EJB Module. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ejbModule&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId.myMultiProjectArtifactId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myEJBModule1ArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myEJBModule1Version&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.2.1. Only if you want different file name inside "ear" file. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bundleFileName&amp;gt;myBundleEJBModule1FileName&amp;lt;/bundleFileName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ejbModule&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.3. Include Web Application Module. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;webModule&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;myMultiProjectGroupId.myMultiProjectArtifactId&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myWebApplicationModule1ArtifactId&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;myWebApplicationModule1Version&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.3.1. Only if you want different file name inside "ear" file. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bundleFileName&amp;gt;myBundleWebApplicationModule1FileName&amp;lt;/bundleFileName&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.3.2. Specify the context root if you need different name. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Default is: "/${pom.artifactId} --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;contextRoot&amp;gt;iris&amp;lt;/contextRoot&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/webModule&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 4.5.4. Maven will also treat dependent 3-rd-party libraries as modules.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You have to exclude them or redirect to "APP-INF/lib" directory. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;javaModule&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;antlr&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;antlr&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bundleDir&amp;gt;APP-INF/lib&amp;lt;/bundleDir&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/javaModule&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/modules&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. Parent multi-project&lt;br /&gt;&lt;br /&gt;Parent project can be used as convenient way to execute group commands, When you run particular command on the project, it executes this command for all children projects. Maven is able to discover the correct execution order and to detect circular dependencies. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. Parent multi-project description. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;pom&amp;lt;/packaging&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. Chlidren modules description. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;modules&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/modules&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;defaultGoal&amp;gt;package&amp;lt;/defaultGoal&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 3. Specify used Java version. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. Usage&lt;br /&gt;&lt;br /&gt;Now you can execute group commands, for example:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;gt;mvn compile&lt;br /&gt;&amp;gt;mvn install&lt;br /&gt;&amp;gt;mvn site&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;These commands perform operations for each module sequentially.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114753089300796116?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114753089300796116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114753089300796116' title='85 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114753089300796116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114753089300796116'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/05/how-to-make-javaee-project-with-maven2.html' title='How to make JavaEE project with Maven2'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>85</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114651363672078562</id><published>2006-05-01T12:45:00.000-07:00</published><updated>2006-05-01T13:00:36.743-07:00</updated><title type='text'>How to make JavaME project with Ant</title><content type='html'>I prepared Ant script that can be used for the most of Java ME projects. It encapsulates all low-level detail dealing with tools/callses from Java ME platform.&lt;br /&gt;&lt;br /&gt;1. Specify project name and default target:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;project name="MyFirstMidlet" default="compile" basedir="."&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Define useful properties that will be used throughout the project:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="java.mobile.home" value="c:/Java/j2me-2.3"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="midlet.class.name" value="${ant.project.name}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="src.dir" value="src"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="target.dir" value="target"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="midlet.command.line" value=""/&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Specify the classpath that includes core mobile API and required extension APIs, e.g.:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;path id="mobile.classpath"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/cldcapi11.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/midpapi20.jar"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/wma20.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/mmapi.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/j2me-ws.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/jsr75.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/jsr082.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/jsr184.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/jsr179.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/jsr177.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pathelement location="${java.mobile.home}/lib/jsr211.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/path&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;4. We need to create string version of our classpath. It will be used for executables, like "preverified.exe" and "emulator.exe":&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="mobile.classpath" refid="mobile.classpath"/&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;5. Prepare "compile" target. Keep in mind that target attribute should be on "1.1" level:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="compile"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${target.dir}/classes"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;javac srcdir="${src.dir}" destdir="${target.dir}/classes"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bootclasspathref="mobile.classpath"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source="1.1" target="1.1"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;6. Compiled classes should be "preverified". It means that each class file in "classes" directory will have corresponding "preverified" class file in "preverified" directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="preverify" depends="compile"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${target.dir}/preverified"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exec executable="${java.mobile.home}/bin/preverify"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-classpath ${mobile.classpath}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-d ${target.dir}/preverified"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="${target.dir}/classes"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exec&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;7. Resulting jar file will contain "preverified" classes and resources from "res"&lt;br /&gt;directory:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="jar" depends="preverify"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mkdir dir="${target.dir}/bin"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;jar basedir="${target.dir}/preverified"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jarfile="${target.dir}/bin/${ant.project.name}.jar"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;manifest="bin/MANIFEST.MF"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;fileset dir="res"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/jar&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;copy file="bin/${ant.project.name}.jad"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tofile="${target.dir}/bin/${ant.project.name}.jad"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. In order to run generated artifact you have to launch the emulator. You can run&lt;br /&gt;emulator as executable file or as java class.&lt;br /&gt;&lt;br /&gt;- as executable:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="run2" depends="jar"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exec executable="${java.mobile.home}/bin/emulator"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- device: DefaultColorPhone, DefaultGrayPhone, MediaControlSkin, QwertyDevice  --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-Xdevice:DefaultColorPhone"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-Xdescriptor:${basedir}/${target.dir}/bin/${ant.project.name}.jad"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-classpath ${mobile.classpath};${basedir}/${target.dir}/bin/${ant.project.name}.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exec&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- as java class:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;lt;target name="run" depends="jar"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;java fork="yes" classname="com.sun.kvem.environment.EmulatorWrapper"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sysproperty key="kvem.home" value="${java.mobile.home}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sysproperty key="java.library.path" value="${java.mobile.home}/bin"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sysproperty key="sun.java2d.ddlock" value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sysproperty key="sun.java2d.gdiblit" value="false"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-Xdevice:DefaultGrayPhone"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-Xdescriptor:${basedir}/${target.dir}/bin/${ant.project.name}.jad"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="-classpath ${mobile.classpath};${target.dir}/bin/${ant.project.name}.jar"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="${midlet.class.name}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="${midlet.command.line}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg line="0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/java&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/target&amp;gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114651363672078562?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114651363672078562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114651363672078562' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114651363672078562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114651363672078562'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/05/how-to-make-javame-project-with-ant.html' title='How to make JavaME project with Ant'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114607795824455858</id><published>2006-04-26T11:50:00.000-07:00</published><updated>2006-04-26T11:59:18.296-07:00</updated><title type='text'>How to generate checksum files for Maven 2 repository</title><content type='html'>Sometimes you want to add libraries to your Maven 2 repository manually.&lt;br /&gt;This tool will help you to generate checksum files recursively, starting from current directory.&lt;br /&gt;&lt;br /&gt;Tool is located &lt;a href="http://home.comcast.net/~shvets/blog/checksum.ant"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can use &lt;a href="http://scriptlandia.sf.net"&gt;Scriptlangia&lt;/a&gt; in order to simplify launching of this tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114607795824455858?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114607795824455858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114607795824455858' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114607795824455858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114607795824455858'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/how-to-generate-checksum-files-for.html' title='How to generate checksum files for Maven 2 repository'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114599985624305437</id><published>2006-04-25T14:00:00.000-07:00</published><updated>2006-04-26T10:52:56.190-07:00</updated><title type='text'>Beanshell plugin for maven2</title><content type='html'>Plugin for running beanshell scripts in the same way as maven-antrun-plugin does. Based on the source from maven-antrun-plugin plugin.&lt;br /&gt;&lt;br /&gt;Source code is located here:&lt;a href="http://home.comcast.net/~shvets/Downloads/maven-beanshell-plugin-src-0.1.zip"&gt; maven-beanshell-plugin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;in order to use the plugin you have to add new repository to the list of your repositories:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;... &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;scriptlandia-maven2&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;scriptlandia-maven2&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://scriptlandia.sourceforge.net/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Then, configure the plugin:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.maven&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;maven-beanshell-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;validate&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;validate&amp;lt;/phase&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;source&amp;gt;test.bsh&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--content&amp;gt;print("Hello, World!");&amp;lt;/content--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;run&amp;lt;/goal&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114599985624305437?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114599985624305437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114599985624305437' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114599985624305437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114599985624305437'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/beanshell-plugin-for-maven2.html' title='Beanshell plugin for maven2'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114599879963014560</id><published>2006-04-25T13:58:00.000-07:00</published><updated>2006-04-25T13:59:59.640-07:00</updated><title type='text'>New maven2 book (free, pre-release): Better Builds with Maven</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114599879963014560?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mergere.com/common/reg.jsp?form_source=m-m2book&amp;form_landing=m-Products' title='New maven2 book (free, pre-release): Better Builds with Maven'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114599879963014560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114599879963014560' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114599879963014560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114599879963014560'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/new-maven2-book-free-pre-release.html' title='New maven2 book (free, pre-release): Better Builds with Maven'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114574903530591189</id><published>2006-04-22T15:43:00.000-07:00</published><updated>2006-04-22T17:30:14.633-07:00</updated><title type='text'>Scriptlandia Project Home Page</title><content type='html'>Welcome to the Scriptlandia World!&lt;br /&gt;&lt;br /&gt;I started this project two years ago (&lt;a href="http://sourceforge.net/projects/antlets"&gt;Antlets&lt;/a&gt;). The idea was to simplify running various scripts written in scripting languages (Beanshell, Groovy, Jelly etc.) for JVM under Windows and Unix environment. &lt;br /&gt;&lt;br /&gt;We have a plenty of scripting engines, each has the launcher/starter program. In order to run the script, you have to remember the name of the launcher program. In case if you need to add new libraries to your script, it's not so easy. If you want to have scripts in different languages to be aware of each other, it's even more difficult.&lt;br /&gt;&lt;br /&gt;Scriptlandia is built in top of &lt;a href="http://classworlds.codehaus.org/"&gt;ClassWorlds&lt;/a&gt; framework, a convenient way of solving classloader problems in one unified way. Your batch/shell scripts will become as simple as possible and addition of new libraries will happen outside of them.&lt;br /&gt;&lt;br /&gt;By the size this project is very small (~70K). It uses &lt;a href="http://maven.apache.org"&gt;Maven2&lt;/a&gt; as the delivery mechanizm to download all required parts. It has to deliver libraries for running Beanshell, Groovy etc. from Maven2 repositories.&lt;br /&gt;&lt;br /&gt;After installing the Scriptlandia you will be able to launch beanshell, groovy, jelly, velocity scripts in one click. You can do the same for jar files. If jar file is written for Java Micro Edition, the system will recognize it and the file will be started in mobile phone emulator. See examples archive for more details. This file: &lt;a href="http://scriptlandia.sourceforge.net/README.txt"&gt;README.txt&lt;/a&gt; contains complete description of the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114574903530591189?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://scriptlandia.sf.net' title='Scriptlandia Project Home Page'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114574903530591189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114574903530591189' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114574903530591189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114574903530591189'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/scriptlandia-project-home-page.html' title='Scriptlandia Project Home Page'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114571455899240127</id><published>2006-04-22T07:01:00.000-07:00</published><updated>2006-04-22T07:02:39.230-07:00</updated><title type='text'>Princeton JUG site</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114571455899240127?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.weekendwithexperts.com/princetonjug/' title='Princeton JUG site'/><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114571455899240127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114571455899240127' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114571455899240127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114571455899240127'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/princeton-jug-site.html' title='Princeton JUG site'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114536997633037861</id><published>2006-04-18T07:18:00.000-07:00</published><updated>2006-04-18T10:44:55.446-07:00</updated><title type='text'>Maven2 dedicated sites</title><content type='html'>&lt;a href="http://www.mavenblogs.org/"&gt;&lt;br /&gt;Maven Blogs site.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mavenbook.xwiki.com"&gt;&lt;br /&gt;Maven Book site.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://jetty.mortbay.org/jetty6/maven-plugin/index.html"&gt;&lt;br /&gt;Jetty6 and Maven2.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.ucalgary.ca/page/LearningCommons/Documentation/Project_Versioning_-_Best_Practices"&gt;&lt;br /&gt;Project Versioning with Maven.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://swik.net/Maven"&gt;&lt;br /&gt;Maven News from Sourcelabs.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114536997633037861?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114536997633037861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114536997633037861' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114536997633037861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114536997633037861'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/maven2-dedicated-sites.html' title='Maven2 dedicated sites'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114494156333722047</id><published>2006-04-13T08:11:00.000-07:00</published><updated>2006-04-13T12:50:38.096-07:00</updated><title type='text'>Using Maven2 from Hollow World</title><content type='html'>&lt;a href="http://communitygrids.blogspot.com/2005/11/using-maven-2-part-1.html"&gt;&lt;br /&gt;Part 1.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://communitygrids.blogspot.com/2005/12/using-maven-2-part-2.html"&gt;&lt;br /&gt;Part 2.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://communitygrids.blogspot.com/2005/12/using-maven-2-part-3.html"&gt;&lt;br /&gt;Part 3.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://communitygrids.blogspot.com/2006/01/maven-part-4-plugin-fun.html"&gt;&lt;br /&gt;Part 4.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://communitygrids.blogspot.com/2006/01/using-maven-2-part-5-payoff-at-last.html"&gt;&lt;br /&gt;Part 5.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://communitygrids.blogspot.com/2006/02/maven-2-notes-part-6-multiproject_06.html"&gt;&lt;br /&gt;Part 6.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114494156333722047?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114494156333722047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114494156333722047' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114494156333722047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114494156333722047'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/using-maven2-from-hollow-world.html' title='Using Maven2 from Hollow World'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114476778595630149</id><published>2006-04-11T07:58:00.000-07:00</published><updated>2006-04-12T12:47:41.220-07:00</updated><title type='text'>Useful articles about Maven 2</title><content type='html'>&lt;a href="http://www.javaworld.com/javaworld/jw-12-2005/jw-1205-maven.html"&gt;An introduction to Maven 2.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-02-2006/jw-0227-maven.html"&gt;Get the most out of Maven 2 site generation.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codehaus.org/%7Ejvanzyl/maven-presentations/Maven2.ppt"&gt;PP presentation about Maven 2 from Jason van Zyl.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.morlhon.net/blog/index.php/2006/04/11/72-play-with-maven-from-ant"&gt;Play with Maven from Ant.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.morlhon.net/blog/index.php/2005/11/15/52-step-by-step-maven-2-simple-plugin"&gt;Step by step maven 2 simple plugin creation.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cvs.peopleware.be/training/maven/maven2/"&gt;Maven 2 student course.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jroller.com/page/learningcurve?entry=compiling_jsf_spring_hibernate_project"&gt;Compiling JSF/spring/hibernate project in Maven.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114476778595630149?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114476778595630149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114476778595630149' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114476778595630149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114476778595630149'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/useful-articles-about-maven-2.html' title='Useful articles about Maven 2'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114418033238725441</id><published>2006-04-04T12:50:00.000-07:00</published><updated>2006-04-04T13:04:34.650-07:00</updated><title type='text'>How to pre-compile JSP pages for Tomcat with Ant</title><content type='html'>JSP pre-compilation is very important part of the build process. Even if you don't want to use pre-compiled pages in your production environment (it's for specific application server (AS) only), it can guarantee the integrity of your source. &lt;br /&gt;&lt;br /&gt;With regular approach you make changes to JSP pages, then copy/deploy them to AS and only at this time possible error will be discovered. In contrast, JSP pre-compilation will give you this knowledge at compile time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How to do the pre-compilation? I will explain it with the help of Ant build tool.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Specify "project.classpath" for your project. It will include all jars required to compile or run your project:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;path id="project.classpath"&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;2. Specify "tomcat.jsp.classpath". You need to have Tomcat Web Server installed somewhere. For this example I use tomcat, embedded into JBoss Application Server ("${jboss.home}").&lt;br /&gt;&lt;br /&gt;You also need to specify where you have your implementation of logging system &lt;br /&gt;("${repository.home}/log4j").&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;  &amp;lt;path id="tomcat.jsp.classpath"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- 1. You have to include jars from your project. --&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;path refid="project.classpath"/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- 2. Tomcat jsp compiler (jasper) by itself. --&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;fileset dir="${jboss.home}/server/default/deploy/jbossweb-tomcat55.sar"&amp;gt;&lt;br /&gt;      &amp;lt;include name ="jasper-compiler.jar"/&amp;gt;&lt;br /&gt;      &amp;lt;include name ="jasper-compiler-jdt.jar"/&amp;gt;&lt;br /&gt;      &amp;lt;include name ="jasper-runtime.jar"/&amp;gt;&lt;br /&gt;      &amp;lt;include name ="commons-logging.jar"/&amp;gt;&lt;br /&gt;      &amp;lt;include name ="commons-el.jar"/&amp;gt;&lt;br /&gt;      &amp;lt;include name ="jsp-api.jar"/&amp;gt;      &lt;br /&gt;    &amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- 3. This library is required by jasper. --&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;fileset dir="${ant.home}/lib"&amp;gt;&lt;br /&gt;      &amp;lt;include name ="ant.jar"/&amp;gt;&lt;br /&gt;    &amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- 4. JavaEE/Servlet/JSP interface classes. --&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;fileset dir="${jboss.home}/server/default/lib"&amp;gt;&lt;br /&gt;      &amp;lt;include name ="jboss-j2ee.jar"/&amp;gt;&lt;br /&gt;      &amp;lt;include name ="javax.servlet.jar"/&amp;gt;&lt;br /&gt;      &amp;lt;include name ="javax.servlet.jsp.jar"/&amp;gt;      &lt;br /&gt;    &amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- 5. Implementation of logging system (if it is not in "project.classpath" yet). --&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;fileset dir="${repository.home}/log4j"&amp;gt;&lt;br /&gt;      &amp;lt;include name ="log4j-1.2.8.jar"/&amp;gt;&lt;br /&gt;    &amp;lt;/fileset&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/path&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;3. Now we can generate Java sources for JSP files:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;  &amp;lt;property name="jsp.src.dir" value="&amp;lt;the root for your JSP files&amp;gt;"/&amp;gt;&lt;br /&gt;  &amp;lt;property name="jsp.package.name" value="&amp;lt;the package name for your JSPs, like com.mycompany.jsp&amp;gt;"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="build.dir" value="target/build"/&amp;gt;&lt;br /&gt;  &amp;lt;property name="jsp.generated.src.dir" value="${build.dir}/jsp_sources"/&amp;gt;&lt;br /&gt;  &amp;lt;property name="jsp.classes.dir" value="${build.dir}/jsp_classes"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;target name="tomcat.jsp.generate"&amp;gt;&lt;br /&gt;    &amp;lt;mkdir dir="${jsp.generated.src.dir}"/&amp;gt;&lt;br /&gt;    &amp;lt;mkdir dir="${jsp.classes.dir}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;java classname="org.apache.jasper.JspC" fork="yes"&amp;gt;&lt;br /&gt;      &amp;lt;classpath refid="tomcat.jsp.classpath" /&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;arg line="-uriroot ${jsp.src.dir} -d ${jsp.generated.src.dir} -p ${jsp.package.name} -webapp ${jsp.src.dir}" /&amp;gt;&lt;br /&gt;    &amp;lt;/java&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;4. After the generation of Java classes from JSPs, we need to compile them. The "depend" task is responsible for "smart" recompilation of JSP-Java files.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;  &amp;lt;target name="tomcat.jsp.compile" depends="tomcat.jsp.generate"&lt;br /&gt;          description="Generates java classes from jsp files, then compiles them"&amp;gt;&lt;br /&gt;    &amp;lt;depend srcdir="${jsp.src.dir}"&lt;br /&gt;            destdir="${jsp.classes.dir}"&lt;br /&gt;            cache="${build.dir}"&lt;br /&gt;            closure="true"&amp;gt;&lt;br /&gt;      &amp;lt;classpath refid="tomcat.jsp.classpath"/&amp;gt;&lt;br /&gt;    &amp;lt;/depend&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;javac destdir="${jsp.classes.dir}" debug="off" optimize="false"&amp;gt;&lt;br /&gt;        &amp;lt;classpath refid="tomcat.jsp.classpath"/&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;src path="${jsp.generated.src.dir}"/&amp;gt;&lt;br /&gt;        &amp;lt;include name ="com/**/*.java"/&amp;gt;&lt;br /&gt;    &amp;lt;/javac&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If on this step you don't have compiler errors, your source code (JSP part) is not broken.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114418033238725441?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114418033238725441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114418033238725441' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114418033238725441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114418033238725441'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/04/how-to-pre-compile-jsp-pages-for.html' title='How to pre-compile JSP pages for Tomcat with Ant'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25134699.post-114381710102179828</id><published>2006-03-31T06:51:00.000-08:00</published><updated>2006-03-31T06:58:21.033-08:00</updated><title type='text'>Blog's birthday,</title><content type='html'>At the beginning it was a word. Then the blog was born...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25134699-114381710102179828?l=scriptlandia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scriptlandia.blogspot.com/feeds/114381710102179828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=25134699&amp;postID=114381710102179828' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114381710102179828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25134699/posts/default/114381710102179828'/><link rel='alternate' type='text/html' href='http://scriptlandia.blogspot.com/2006/03/blogs-birthday.html' title='Blog&apos;s birthday,'/><author><name>Alexander Shvets</name><uri>http://www.blogger.com/profile/03587543964238748674</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='30' src='http://bp3.blogger.com/_Lf4_bJUfZAM/R7Cbwmnz5kI/AAAAAAAAAAM/M8RuiwTUhjc/S220/alex1.JPG'/></author><thr:total>1</thr:total></entry></feed>
