<?xml version="1.0"?>
<!-- name="generator" content="blosxom/2.0" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
  <channel>
    <title>Stefan Bodewig's Weblog   </title>
    <link>http://stefan.samaflost.de/blog</link>
    <description>Mixed Content</description>
    <language>en</language>

<item>
  <title>What's New in Ant 1.8.0?</title>
  <link>http://stefan.samaflost.de/blog/en/Apache/Ant/whats_new_in_180.html</link>
  <description>
&lt;p&gt;Antoine Levy-Lambert has recently built the first release candidate
  for Ant 1.8.0
  and &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/ant-dev/201001.mbox/%3C4B43C4A5.8070103@gmx.de%3E&quot;&gt;called
  for a vote&lt;/a&gt;, so we should be close to the first Ant release since
  eighteen months.  This release mostly brings enhancements and bug
  fixes to many tasks and types (this is the real strength of Ant
  IMHO) but there also are a few core changes, the full list
  is &lt;a href=&quot;http://svn.apache.org/repos/asf/ant/core/tags/ANT_180_RC1/WHATSNEW&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My personal top five changes (I know there are six items, but the
  first one doesn't count ;-):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://issues.apache.org/bugzilla/buglist.cgi?query_format=advanced&amp;bug_status=RESOLVED&amp;bug_status=CLOSED&amp;component=Build%20Process&amp;component=Core&amp;component=Core%20tasks&amp;component=Documentation&amp;component=Optional%20SCM%20tasks&amp;component=Optional%20Tasks&amp;component=Other&amp;component=Wrapper%20scripts&amp;resolution=FIXED&amp;target_milestone=1.8.0&amp;product=Ant&quot;&gt;More
      than 275&lt;/a&gt; fixed Bugzilla issues.&lt;/li&gt;

  &lt;li&gt;Lexically scoped local properties, i.e. properties that are only
    defined inside a target, sequential block or similar environment.
    This is very useful inside of &lt;code&gt;&amp;lt;macrodef&amp;gt;&lt;/code&gt;s where
    a macro can now define a temporary property that will disappear
    once the task has finished.&lt;/li&gt;

  &lt;li&gt;&lt;code&gt;&amp;lt;import&amp;gt;&lt;/code&gt; can now import from any file- or
    URL-providing resource - this
    includes &lt;code&gt;&amp;lt;javaresource&amp;gt;&lt;/code&gt;.  This
    means &lt;code&gt;&amp;lt;import&amp;gt;&lt;/code&gt; can read build file snippets
    from JARs or fixed server URLs.  There are several other
    improvements in the area of import.&lt;/li&gt;

  &lt;li&gt;Various improvements to the directory scanning code that help
    with symbolic link cycles (as can be found on MacOS X Java
    installations for example) and improve scanning performance.  For
    big directory trees the improvement
    is &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/ant-dev/200809.mbox/%3Cy1u4p48li29.fsf@v30161.1blu.de%3E&quot;&gt;dramatic&lt;/a&gt;.&lt;/li&gt;

  &lt;li&gt;The way developers can extend Ant's property expansion algorithm
    has been rewritten (breaking the older API) to be easier to use a
    be more powerful.  The whole local properties mechanism is
    implemented using that API and could be implemented in a separate
    library without changes in Ant's core.  Things like the
    yet-to-be-released &lt;a href=&quot;http://ant.apache.org/antlibs/props/index.html&quot;&gt;props
    Antlib&lt;/a&gt; can now provide often required &quot;scripty&quot; fuctions
    without touching Ant itself.

    &lt;br/&gt;

    At the same time the if and unless attributes have been rewritten
    to do the expected thing if applied to a property expansion
    (i.e. &lt;code&gt;if=&quot;${foo}&quot;&lt;/code&gt; will mean &quot;yes, do it&quot;
    if &lt;code&gt;${foo}&lt;/code&gt; expands to true, in Ant 1.7.1 it would mean
    &quot;no&quot; unless a property named &quot;true&quot; existed).  This adds &quot;testing
    conditions&quot; as a new use-case to property expansion.&lt;/li&gt;

  &lt;li&gt;A new top-level element &lt;code&gt;&amp;lt;extension-point&amp;gt;&lt;/code&gt;
  assists in writing re-usable build files that are meant to be
  imported.  &lt;code&gt;&amp;lt;extension-point&amp;gt;&lt;/code&gt; has a name and a
  dependency-list like &lt;code&gt;&amp;lt;target&amp;gt;&lt;/code&gt; and can be used like a
    &lt;code&gt;&amp;lt;target&amp;gt;&lt;/code&gt; from the command line or
    a dependy-list but the importing build file can add targets to
    the &lt;code&gt;&amp;lt;extension-point&amp;gt;&lt;/code&gt;'s depends list.

    &lt;br/&gt;
    In Ant 1.7.1 one would use something like
&lt;pre class=&quot;code&quot;&gt;
imported.xml:
&amp;lt;project name=&quot;imported&quot;...&amp;gt;
  ...
  &amp;lt;target name=&quot;setup&quot;&amp;gt;
    ...
  &amp;lt;/target&amp;gt;
  &amp;lt;target name=&quot;compile&quot; depends=&quot;setup&quot;&amp;gt;
    ...
  &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;

importing.xml
&amp;lt;project ...&amp;gt;
  ...
  &amp;lt;import file=&quot;imported.xml&quot;&amp;gt;
  &amp;lt;target name=&quot;setup&quot; depends=&quot;imported.setup&quot;&amp;gt;
    ... stuff that should happen before compile ...
  &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
    to define a pre-compilation stage by target overriding.  With
    some planning it can be improved to
&lt;pre class=&quot;code&quot;&gt;
imported.xml:
&amp;lt;project name=&quot;imported&quot;...&amp;gt;
  ...
  &amp;lt;target name=&quot;setup&quot;&amp;gt;
    ...
  &amp;lt;/target&amp;gt;
  &amp;lt;target name=&quot;ready-to-compile&quot; depends=&quot;setup&quot;/&amp;gt;
  &amp;lt;target name=&quot;compile&quot; depends=&quot;ready-to-compile&quot;&amp;gt;
    ...
  &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;

importing.xml
&amp;lt;project ...&amp;gt;
  ...
  &amp;lt;import file=&quot;imported.xml&quot;&amp;gt;
  &amp;lt;target name=&quot;ready-to-compile&quot; depends=&quot;imported.ready-to-compile&quot;&amp;gt;
    ... stuff that should happen before compile ...
  &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
    In Ant 1.8.0 one would write this as
&lt;pre class=&quot;code&quot;&gt;
imported.xml:
&amp;lt;project name=&quot;imported&quot;...&amp;gt;
  ...
  &amp;lt;target name=&quot;setup&quot;&amp;gt;
    ...
  &amp;lt;/target&amp;gt;
  &amp;lt;extension-point name=&quot;ready-to-compile&quot; depends=&quot;setup&quot;/&amp;gt;
  &amp;lt;target name=&quot;compile&quot; depends=&quot;ready-to-compile&quot;&amp;gt;
    ...
  &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;

importing.xml
&amp;lt;project ...&amp;gt;
  ...
  &amp;lt;import file=&quot;imported.xml&quot;&amp;gt;
  &amp;lt;target name=&quot;pre-compile&quot; extensionOf=&quot;ready-to-compile&quot;&amp;gt;
    ... stuff that should happen before compile ...
  &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;
  &lt;/pre&gt;

    and the &lt;code&gt;pre-compile&lt;/code&gt; target was added
    to &lt;code&gt;ready-to-compile&lt;/code&gt; dependeny-list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;extension-point&lt;/code&gt; and some changes
  in &lt;code&gt;import&lt;/code&gt; and its new cousin &lt;code&gt;include&lt;/code&gt; have
  been inspired by &lt;a href=&quot;http://www.easyant.org/trac&quot;&gt;Easyant&lt;/a&gt;
  which can now use an un-patched version of Ant together with a
  custom &lt;code&gt;ProjectHelper&lt;/code&gt; to create a build system quite
  different from Ant's original ideas.  &lt;code&gt;ProjectHelper&lt;/code&gt; is the mechanism that allowed
  me
  to &lt;a href=&quot;http://stefan.samaflost.de/blog/en/Apache/Ant/ant_javafront.html&quot;&gt;sketch&lt;/a&gt;
  &lt;a href=&quot;http://svn.apache.org/repos/asf/ant/sandbox/javafront/&quot;&gt;JavaFront&lt;/a&gt;
  or Nicolas Lalev&amp;#xe9;e to
  write &lt;a href=&quot;http://svn.apache.org/repos/asf/ant/sandbox/groovyfront/&quot;&gt;GroovyFront&lt;/a&gt;
  which lets you write build files in Groovy.&lt;/p&gt;</description>
</item>
<item>
  <title>Uncle Stefan</title>
  <link>http://stefan.samaflost.de/blog/en/personal/family/uncle_stefan.html</link>
  <description>
&lt;p&gt;When my Mum called us this morning to tell us that my brother's
first daughter was born my kids celebrated &quot;finally I'm a cousin&quot;.&lt;/p&gt;

&lt;p&gt;Welcome Carina - being born on 11/11 will not always be easy in the
rhine area - and congratulations Claudia and Maik.&lt;/p&gt;</description>
</item>
<item>
  <title>Ant-Task for .NET Build Tools 1.0.1</title>
  <link>http://stefan.samaflost.de/blog/en/dotNet/anttask_for_netbuildtools_1.0.1.html</link>
  <description>
&lt;p&gt;The &lt;a href=&quot;http://stefan.samaflost.de/blog/en/Java/GWT/gwttasks_0.2.html&quot;&gt;GWT
Tasks stuff&lt;/a&gt; made me work through some very old TODO items that
have seriously been sitting in my inbox unanswered far too long.&lt;/p&gt;

&lt;p&gt;More than three years ago I wrote
an &lt;a href=&quot;http://stefan.samaflost.de/blog/en/dotNet/ant_for_nant_and_msbuild.html&quot;&gt;Ant
task to be used inside NAnt or MSBuild build files&lt;/a&gt; and apparently
some people actually use it.  About a year ago Martin Harper told me
that only lower case Ant properties worked but I never got around
looking into it.&lt;/p&gt;

&lt;p&gt;It turned out that I foolishly used
used &lt;code&gt;System.Collections.Specialized.StringDictionary&lt;/code&gt; to
store the properties, which is not case sensitive.  While I was at at
it, I moved the whole class up to .NET 2.0 using generics and provided
a Visual Studio solution.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://stefan.samaflost.de/code/nant-msbuild-AntTask/&quot;&gt;Here&lt;/a&gt;
  is a new drop of source code as well as a pre-compiled DLL
  containing the task.  The DLL has been compiled against NAnt 0.8.5
  using VS 2008 - if you need any other combination (or a version not
  compiled against NAnt), please grab the source ZIP and compile it
  yourself.&lt;/p&gt;

&lt;p&gt;The source is also available from
  a &lt;a href=&quot;http://www.darcs.net/&quot;&gt;darcs&lt;/a&gt; repository:&lt;/p&gt;

&lt;pre&gt;
darcs get &lt;a href=&quot;http://stefan.samaflost.de/repos/anttask/&quot;&gt;http://stefan.samaflost.de/repos/anttask/&lt;/a&gt;
&lt;/pre&gt;</description>
</item>
<item>
  <title>Gump Gets git Support for its Birthday</title>
  <link>http://stefan.samaflost.de/blog/en/Apache/Gump/gump_git.html</link>
  <description>
&lt;p&gt;The &lt;a href=&quot;http://gump.apache.org/&quot;&gt;Apache Gump&lt;/a&gt; project is
  five years old today and its birthday present is support for
  git.&lt;/p&gt;

&lt;p&gt;To be honest I started working on git support when I saw JUnit
  &lt;a href=&quot;http://tech.groups.yahoo.com/group/junit/message/21341&quot;&gt;moving
  away from Sourceforge&lt;/a&gt; a few weeks ago - and I didn't realize
  Gump's birthday was upcoming until last week.  Still it is a nice
  coincidence and made a good tag line.&lt;/p&gt;

&lt;p&gt;The Python code to use git has been in trunk for a a few days and I
  merged it into the code base
  running &lt;a href=&quot;http://vmgump.apache.org/gump/public/index.html&quot;&gt;main
  Gump&lt;/a&gt; yesterday.  Of course I managed to break the four lines of
  Python code I didn't run via Pylint, twice.  Sorry for the broken
  Gump runs last night.&lt;/p&gt;

&lt;p&gt;Norman Maurer helped me out when I had trouble getting git
  installed on
  the &lt;a href=&quot;http://gump.zones.apache.org/gump/test/index.html&quot;&gt;Solaris
  Zone&lt;/a&gt; (one of many people I owe a beer in Amsterdam) and I hope I
  now have a working version of git on vmgump.  When all things look
  good I'll turn the switch on JUnit.&lt;/p&gt;

&lt;p&gt;Next up will be darcs, Mercurial and Bazaar - but since we don't
  really have any project using them, it is a rather low priority
  project to me.&lt;/p&gt;</description>
</item>
<item>
  <title>GWT Tasks 0.2</title>
  <link>http://stefan.samaflost.de/blog/en/Java/GWT/gwttasks_0.2.html</link>
  <description>
&lt;p&gt;Back when &lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;GWT&lt;/a&gt; was
  all new and shiny (almost three years ago), I played with it
  and &lt;a href=&quot;http://stefan.samaflost.de/blog/en/Java/GWT/gwt_ant_tasks.html&quot;&gt;put
  together a tiny library of Ant tasks&lt;/a&gt; - nothing earth-shattering,
  really basically only a few &lt;code&gt;macrodef&lt;/code&gt;s over
  Ant's &lt;code&gt;java&lt;/code&gt; task.&lt;/p&gt;

&lt;p&gt;Strangely I still get quite a few hits by searches for &quot;GWT and
  Ant&quot;, so it seems as if nobody else has given GWT and Ant
  integration a try.&lt;/p&gt;

&lt;p&gt;I don't use GWT.  Not at all.  When I create webapps at $JOB GWT
  isn't the right choice, either its technology is no fit
  (&lt;a href=&quot;http://www.webone.de/&quot;&gt;we&lt;/a&gt; mainly are a .NET shop after
  all) or the layout requirements can't be achieved by any component
  based framework I've tried (so far it is Velocity at the view layer
  for me).&lt;/p&gt;

&lt;p&gt;Almost exactly two years ago Fernando Meyer sent me a patch to the
  Antlib that changed the hard coded directory names for source and
  destination into attributes on the &lt;code&gt;gwt:shell&lt;/code&gt;
  and &lt;code&gt;gwt:compile&lt;/code&gt; tasks.  About a year ago I was asked
  how one could increase the memory size
  for &lt;code&gt;gwt:compile&lt;/code&gt;.  Somewhere very deeply buried on my
  TODO list I took note of them.&lt;/p&gt;

&lt;p&gt;When I woke up this morning Apache's svn was read-only and suddenly
  I had time (I planned to hack on Gump) but no ASF project to keep me
  occupied so I finally managed to integrate Fernando's patch and make
  room for arbitrary extension arguments.&lt;/p&gt;

&lt;p&gt;Code and sources
  are &lt;a href=&quot;http://stefan.samaflost.de/code/gwttasks/&quot;&gt;here&lt;/a&gt; and
  while I was at it, there is
  a &lt;a href=&quot;http://stefan.samaflost.de/repos/gwttasks/&quot;&gt;darcs
  repository&lt;/a&gt;&lt;a href=&quot;#darcs-get-gwttasks&quot;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; for it (I've been
  using &lt;a href=&quot;http://www.darcs.net/&quot;&gt;darcs&lt;/a&gt; for years and didn't
  feel like installing a different SCM backend).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gwt:compile&lt;/code&gt; and &lt;code&gt;gwt:shell&lt;/code&gt; have new
  attributes &lt;code&gt;sourcedir&lt;/code&gt; that default to the old hard-coded
  value &quot;src&quot; for the source directory and both have a new nested
  element &lt;code&gt;jvmargs&lt;/code&gt; that can be used to pass arbitrary
  nested elements supported by
  Ant's &lt;a href=&quot;http://ant.apache.org/manual/CoreTasks/java.html&quot;&gt;&lt;code&gt;java&lt;/code&gt;&lt;/a&gt;
  task to the underlying task.  I.e. one can now write&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
    &amp;lt;gwt:compile outDir=&quot;www&quot; gwtHome=&quot;${gwt.home}&quot;
                 classBase=&quot;de.samaflost.gwt.Foo&quot;&amp;gt;
      &amp;lt;gwt:jvmargs&amp;gt;
        &amp;lt;jvmarg value=&quot;-Xmx1024m&quot;/&amp;gt;
      &amp;lt;/gwt:jvmargs&amp;gt;
    &amp;lt/gwt:compile&amp;gt;
&lt;/pre&gt;

&lt;p&gt;in order to bump the max memory to one
  gig.  &lt;code&gt;gwt:shell&lt;/code&gt; now also has an optional &lt;code&gt;bindir&lt;/code&gt;
  attribute defaulting to the old hard-coded &quot;bin&quot;.&lt;/p&gt;

&lt;p&gt;The Antlib has seen some minimal manual testing against GWT 1.5.&lt;/p&gt;

&lt;p&gt;It should be obvious that I don't really maintain these tasks, and
  to be honest I don't expect I'll ever do.  If anybody wants to fork
  the code, reuse it, whatever, feel free to do so.  If you are
  planning to maintain a more useful Ant integration than my hackish
  version did, please let me know so I can send people looking for
  &quot;GWT and Ant&quot; your way.&lt;/p&gt;

&lt;a name=&quot;darcs-get-gwttasks&quot;&gt;&lt;p class=&quot;footnote&quot;&gt;[1] The directory is
not browseable, use&lt;/p&gt;
&lt;pre&gt;
darcs get http://stefan.samaflost.de/repos/gwttasks/
&lt;/pre&gt;
&lt;p class=&quot;footnote&quot;&gt;in order to grab the contents.&lt;/p&gt;&lt;/a&gt;</description>
</item>
  </channel>
</rss>