<?xml version="1.0" encoding="iso-8859-1"?>



<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:cc="http://web.resource.org/cc/"
  xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://blogs.codehaus.org/people/brett/">
<title>Brett Porter</title>
<link>http://blogs.codehaus.org/people/brett/</link>
<description>Thoughts on Maven and Java from my corner of Sydney, Australia</description>
<dc:language>en-us</dc:language>
<dc:creator></dc:creator>
<dc:date>2006-06-16T16:11:41+10:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=2.661" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001366_blog_moved.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001356_free_maven_2_book_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001345_the_serious_side_of_the_dilbert_blog.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001342_continuum_gets_a_speed_boost_and_a_face_lift.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001337_vmware_player_saves_the_day.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001336_re_is_all_religion_moronic.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001334_test_ng_and_cobertura_in_maven_2.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001313_want_to_get_rich_stay_married.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001306_developing_with_jetty_where_have_you_been_all_my_life.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001299_how_can_you_help_improve_the_maven_repository.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001280_intellij_tips_discovered_after_weirdness_in_the_debugger.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001264_time_for_apachecon.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001252_job_opportunity_at_mergere.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001230_test_post_from_blog_entry_poster.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001199_maven_20_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001187_maven_20_almost_there.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001179_maven_20_beta_2_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001177_weekly_beta_releases_coming_up.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001173_maven_20_beta_1_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001168_maven_11_beta_2_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001138_glassfish_sun_jars_may_soon_be_in_the_maven_repository.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001122_maven_20_alpha_3_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001118_javaone_beer_jug_maven_and_activemq.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001115_maven2_over_the_hump.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001112_maven_11_beta_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001110_re_why_do_you_hate_maven.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001105_slides_maven_and_continuum.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001099_speaking_at_sydney_jug_tonight.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001091_what_is_wrong_with_mavens_documentation.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001090_writing_beanshell_plugins_for_maven_20.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001085_maven_20_alpha_2_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001082_automatic_plugin_updates_in_maven.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001066_storing_your_maven_repository_in_cvssubversion.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001058_transitive_dependencies_in_ant.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001045_improved_snapshots_in_maven2.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001038_maven_20_technology_preview_release.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001023_ivy_do_we_really_need_more_metadata.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/001010_new_maven_site_is_live.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000920_wacky_bugs.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000911_maven_102_out_roll_on_maven_11.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000824_blog_stacking_in_javablogs.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000790_maven_structure_primer.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000786_ann_maven_10_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000770_maven_10_rc4_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000733_maven_is_not_just_a_bunch_of_ant_tasks.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000731_re_moving_away_from_maven.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000728_maven_10_rc3_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000691_maven_10_expected_this_lifetime.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000689_sitemesh_giving_it_another_look.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000678_why_do_you_hate_maven.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000664_mavens_javacompile_goal_is_not_found.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000660_maven_10_rc2_released.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000610_maven_rc2_ready_to_roll.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000546_good_free_rss_reader_for_outlook.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000277_picked_up_junit_in_action.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000258_sun_abandons_version_numbers_in_favour_of_rebranding.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000254_cactus_not_as_spiny_as_it_sounds.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000241_mike_cannonbrookes_on_tss_and_webwork.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000237_jmeter_to_the_rescue.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000220_maven_article_and_progress.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000221_maven_rc1_released_the_march_to_10_continues.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000233_maven_rc1_approaches.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000232_the_official_fiction.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000231_neat_stuff_in_intellij.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000230_dbunit.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000229_maven_what_im_working_on.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000228_committing_to_maven.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000227_new_intellij_aurora_build.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000226_taking_maven_for_granted.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000225_maven_intellij_aurora_plugin.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000224_intellij_aurora.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000223_ajug_and_maven.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/brett/archives/000222_blogging_in.html" />
</rdf:Seq>
</items>

</channel>

<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001366_blog_moved.html">
<title>Blog Moved</title>
<link>http://blogs.codehaus.org/people/brett/archives/001366_blog_moved.html</link>
<description><![CDATA[<p>I've moved my blog to <a href="http://blogs.maven.org/brett">blogs.maven.org</a>.</p>

<p>I'll attempt to redirect the old feed later, but in case it gets mucked up or randomly disappears later, you might want to change your subscriptions now.</p>

<p>I've also now got a <a href="http://technorati.com/claim/er54jcff7b" rel="me">Technorati Profile</a></p>]]></description>
<dc:subject></dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-06-16T16:11:41+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001356_free_maven_2_book_released.html">
<title>Free Maven 2 Book Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001356_free_maven_2_book_released.html</link>
<description><![CDATA[<p><img style="margin-left: 2em; margin-bottom: 1em; float: right;" alt="BetterBuildsWithMaven.jpg" src="http://blogs.codehaus.org/people/brett/archives/images/bbwm.jpg/BetterBuildsWithMaven.jpg" border="0" height="194" width="150" />Well, "Better Builds with Maven" is finally out there.<br /><br /><a href="http://library.mergere.com/">http://library.mergere.com/</a><br /><br />The book is the first about Maven 2, and was written by Maven developers myself, Jason van Zyl, John Casey, Vincent Massol, and Carlos Sanchez. The chapters include:<br /><ul><li>An introduction to Maven 2.0</li><li>Creating, compiling and packaging your first project</li><li>Best practices and real-world examples</li><li>Building J2EE Applications</li><li>Extending builds by creating your own Maven plugins</li><li>Monitoring the health of source code, testing, dependencies and releases</li><li>Team collaboration and utilising Continuum for continuous integration</li><li>Converting existing Ant builds to Maven</li></ul>If you happened to get the pre-release before today, the book has been updated - you can download it again from the website.<br /><br /></p>]]></description>
<dc:subject></dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-04-27T11:51:16+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001345_the_serious_side_of_the_dilbert_blog.html">
<title>The serious side of the Dilbert Blog</title>
<link>http://blogs.codehaus.org/people/brett/archives/001345_the_serious_side_of_the_dilbert_blog.html</link>
<description><![CDATA[<p>I've really been enjoying the <a href="http://dilbertblog.typepad.com/the_dilbert_blog/">Dilbert Blog</a> since discovering it a little while back. There are entries pretty much daily to go along with the Dilbert comic, and Scott Adams' same sense of humour comes through, though this time applied to the real world (though it's easy to argue that the Dilbert comic is very close to the real world too sometimes!) It's often laugh-out-loud type stuff.<br /><br />It was good to see him take a more serious, less cynical, side today in writing about James Blake's comeback in professional tennis. It's a really great story - <a href="http://dilbertblog.typepad.com/the_dilbert_blog/2006/03/winning.html">check it out</a>. It's great to see there are still professional sportsman such as Federer who can be humble despite their tremendous ability. Being an Australian, I still like to see Australians win contests, but I have a hard time cheering for Lleyton Hewitt (who is also mentioned in the story) with the way he behaves on court. Compare that to somone like Pat Rafter who didn't quite reach the same heights, but is a far more memorable player for the attitude he brought to the game.<br /></p>]]></description>
<dc:subject>General</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-03-25T10:04:18+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001342_continuum_gets_a_speed_boost_and_a_face_lift.html">
<title>Continuum gets a speed boost and a face lift</title>
<link>http://blogs.codehaus.org/people/brett/archives/001342_continuum_gets_a_speed_boost_and_a_face_lift.html</link>
<description><![CDATA[<p><a href="http://maven.apache.org/continuum">Continuum</a> 1.0.3 is just around the corner, and I'm glad to mention a couple of really good improvements have cropped up recently.</p>

<p>Apart from the other <a href="http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&pid=10540&fixfor=12330">long list of fixes</a> so far, Emmanuel has been hard at work cleaning up the JDO code, resulting in massive speed improvements on the project page, as well as when queuing and executing builds.</p>

<p>Joel and Emmanuel also applied a new skin to the web interface, which you can see below. It's a lot more trim...</p>

<p><p style="text-align: center"><br />
<a href="http://blogs.codehaus.org/people/brett/archives/images/continuum_full.html" onclick="window.open('http://blogs.codehaus.org/people/brett/archives/images/continuum_full.html','popup','width=959,height=816,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img alt="continuum_small.png" src="http://blogs.codehaus.org/people/brett/archives/continuum_small.png" width="320" height="272" border="0" /><br />
</a><br />
</p></p>

<p>If you are interested in checking it out, the latest *development* build is <a href="http://maven.zones.apache.org/~continuum/builds/branches/continuum-1.0.x/continuum-20060322.223000.tar.gz">available here</a>.</p>

<p>This will be the stable release for a little while, as Continuum 1.1 rolls on with the conversion to WebWork2, a number of UI improvements to make it easier to use, integration of Geronimo's GBuild for distributed builds, and a number of other minor features.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-03-23T15:18:44+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001337_vmware_player_saves_the_day.html">
<title>VMWare Player saves the day</title>
<link>http://blogs.codehaus.org/people/brett/archives/001337_vmware_player_saves_the_day.html</link>
<description><![CDATA[<p>I got back into doing a small feature enhancement for <a href="http://maven.apache.org/continuum">Continuum</a> the other day. There was just one problem - after I built Continuum myself and ran it, my machine dropped to a blue screen of death and rebooted. (Yes, I'm back on Windows). This was pretty strange, as running Continuum that others built work just fine, and I really didn't have time to investigate it any further.<br /><br />What to do? Pretty hard to develop if you can't run something you build. I don't really have a separate development server at my disposal right now.<br /><br />Luckily, I'd gone VMWare image crazy just a few days before. I was testing out startup scripts, so I've used <a href="http://www.ffnn.nl/pages/articles/linux/vmware-player-image-creation.php">this information</a> to create a stack of VM images - from my old versions of Windows I have lying around to Darwin and OpenSolaris. I also had the Ubuntu VM already downloaded from the VMWare site. Up until a couple of months ago I'd been using Ubuntu but I got tired of the network problems I was having, so it was good to have it around again.<br /><br />That was the best solution I could come up with. I now have my home directory on the Ubuntu VM mounted over samba so I can edit like its local, run it in the VM, browse from my own browser, and debug using remote debugging like I'd have to anyway. The speed difference really isn't noticable - the only annoying thing is coordinating the capture of the pointer inside that window.<br /><br />So, an odd setup, but actually quite a nice one if you like Linux from the command line and Windows for your apps (and drivers).<br /></p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-03-17T11:13:52+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001336_re_is_all_religion_moronic.html">
<title>Re: Is all religion moronic?</title>
<link>http://blogs.codehaus.org/people/brett/archives/001336_re_is_all_religion_moronic.html</link>
<description><![CDATA[<p>Ugo Cei asks "<a href="http://agylen.com/2006/03/15/is-all-religion-moronic/">Is all religion moronic?</a>"<br /><br />Not usually a topic for this blog, but I've been thinking about this recently myself and wanted to comment. And not because I'm a South Park fan (it's been many years since I watched it and I was a little surprised they were still trotting out new episodes :)<br /><br />I actually agree with the original viewpoint that it's hypocritical to have different standards. People shouldn't be judged by other people for their beliefs, and they all deserve respect no matter how much they disagree with your own.<br /><br />Ugo goes on to say, "But then I started wondering: Is there any difference between believing that we are inhabited by the souls of billions of aliens who were murdered 75 millions of years ago and believing that Jesus's mother was a virgin when she gave birth to him?&nbsp; Both are clearly made up stories..."<br />I wondered what makes them "clearly made up"? Is it a lack of any evidence? In the case of Jesus, is it simply that the evidence relies on the miraculous?<br /><br />I definitely think that faith is required in any religion.&nbsp; However, I'd disagree that religion is always "based on unproven statements that must be believed on faith alone, suspending all rational discussions".&nbsp; Religions dramatically affect the way people live their lives, and should be held up equally to close scrutiny. There should be no room for blind faith.&nbsp; It's true, God's existence can only be proven by starting with the assumption that he exists. That certainly requires a leap of faith to believe! But I think it's important that faith has a basis in real evidence.<br /><br />So, I'm a Christian, yet I agree with the blog title - does that mean I'm a moron? I sure hope not, but perhaps I should explain why, just to be sure.<br /><br />For me, Christianity explains the world I see around me. Yes, faith is required, but it's backed up by the Bible and historical evidence, and by evidence from the natural world - some things that you "just know" to be true from your birth without being given an explanation, such as the existence of good and evil. Most of all, it's evident in the difference it has made in my own life and the lives of those around me.<br /><br />It still seems like a big leap. But contrast that to the leap of faith required to assume that there is no God at all. Which is the greater miracle - a virgin birth from a God that created the whole process, or an ordered universe that came into existence from nothingness by chance? In either case the evidence will only get you so far before you need to stretch your boundaries.<br /><br />Now, to the point of the blog title, yes - all religion is moronic. This, of course, depends on how "religion" is defined, but I find it is commonly used to represent people trying to get to God, or otherwise doing something themselves. However, if a powerful God exists (or another supreme being), to think that there is anything we could do to reach out and affect them is completely self-absorbed, and just plain stupidity. Tradition, ceremonies, rules, gifts - all would be completely insufficient to really have any effect.<br /><br />Religious activity is usually a means of disciplined self improvement. In that regard, it always fails! There are countless examples to be seen in the world today. They were always destined to fail, though - a powerful God that wants justice can demand no less than perfection. Now, I've always known I should be doing good, but still manage to mess it up daily. I know that I can never be perfect. But there's no such thing as "good enough" on a scale of good and evil. Otherwise, where would the line possibly be drawn?<br /><br />This affirms my belief in Christianity - it's really not about "religion", or anything I can do. An endless pursuit of trying to become perfect would be hopeless. But, if the Bible is to be believed, then admitting that I can't do it myself and asking forgiveness is all I have to do - and in fact, all I can do. God wants honesty, integrity, fairness, and a relationship. Everything else (ceremonies, tradition, obedience to rules) should only be our expression of thanks, not a chore only tolerated to score points or receive some blessing. That, to me, seems real - it's an appropriate response to a powerful God rather than a half-baked attempt at trying to do more good things.<br /><br />There'll be no reward for the quantity or quality of a person's religiousness. Rather, by admitting fault and having faith, the reward is that God will never turn his back on you. The alternative? To turn my back on God, and eventually get exactly what I want - a lonely world without God, stripped of anything that was good. Nothing beautiful, nothing fun, nothing satisfying. Or worse, complete non-existence. I know which I'd prefer.<br /><br />If that's not the truth, then I may well be a moron. Just another 28 year old with an imaginary friend. But in my opinion, it would have been far more moronic to pass up a chance at that free gift of forgiveness, to risk ending up spending eternity completely alone, kicking myself for being so stubborn.<br /><br />What do you think?<br /></p>]]></description>
<dc:subject>Christianity</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-03-17T00:43:19+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001334_test_ng_and_cobertura_in_maven_2.html">
<title>Test NG and Cobertura in Maven 2</title>
<link>http://blogs.codehaus.org/people/brett/archives/001334_test_ng_and_cobertura_in_maven_2.html</link>
<description><![CDATA[<p><a href="http://testng.org"><b>TestNG</b></a> has been on my "must play with that some day" list for quite some time.  Though I'm yet to write any significant tests with it, I was lucky to recently get some exposure to it to prod me along. This came in the form of support for Maven 2 contributed by Jesse Kuhnert, who not only did the initial patch but continually and patiently prodded me to look at it. I'd also listened to Cédric's JavaPosse podcast (or at least the first half, it seems to cut all the old ones off in the middle). I'd also started to get the IDEA plugin, assuming I got the right one<br />
since the web page just said "get the plugin from the plugin list", and there are two, neither of which seem to be related to the project. The other was a generator and I now have the little TestNG logo in the configurations dialog, so I think I'm good to go.</p>

<p>The main reason I had put it off for so long was that I hadn't yet learned much about actually using TestNG and I knew I was going to have to make some changes to our test runner code called Surefire that has been around a long time and not evolved with the Maven 2 architecture. The patch for TestNG worked out of the box, but didn't (couldn't) integrate with other features. </p>

<p>There were some rough edges along the way. Since the patch was using a few internal APIs from TestNG that were public, upgrading through releases that had come since constantly broke the code. Might be time to introduce them to <a href="http://clirr.sf.net"><b>Clirr</b></a>, another of my favourite new toys :)</p>

<p>However, the refactoring is now done and the TestNG code all revisited, and we've landed support that is comparable to JUnit (3) and the basic POJO test runner that is built in. It supports all of the fork modes (none, once for the whole suite, or fork for each test set), but more importantly integrates with anything else in the build lifecycle, such as <a href="http://cobertura.sf.net"><b>Cobertura</b></a>, without any additional configuration. This required very little TestNG specifics, so hopefully the basis is now there for other providers, as we start to see requests for JUnit 4 roll in. This is pretty satisfying, as we get to see the fulfilment of Maven's promised build knowledge reusability in action.</p>

<p>Once released, using TestNG tests is just a matter of including:<br />
<div class="source"><br />
&lt;dependencies&gt;<br />
&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.testng&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;testng&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;version&gt;4.6.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;scope&gt;test&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;classifier&gt;jdk15&lt;/classifier&gt;<br />
&nbsp; &lt;/dependency&gt;<br />
&lt;/dependencies&gt;</p>

<p></div></p>

<p><br />
And from there you can run the usual mvn test, mvn cobertura:cobertura, mvn clover:clover, etc. Of course, you can customise them to enable things such as parallel test execution and using TestNG's XML suite definition files instead of the normal includes/excludes mechanism.</p>

<p>Another great thing is that you can try out TestNG immediately, even with your JUnit tests in place - the test runner finds each Java file and sets the JUnit flag for tests if appropriate so that they can be mixed in the directory with TestNG tests.</p>

<p>There are some <a href="http://mail-archives.apache.org/mod_mbox/maven-dev/200603.mbox/%3c44098A02.5090104@apache.org%3e">instructions</a> for those that might be game enough to test it before the release, but it is not quite there yet and there are still <a href="http://jira.codehaus.org/browse/MSUREFIRE">some minor bugs</a> to be resolved. Hopefully, these won't hold it up for too long.</p>

<p>All in all, I think this is a great development and I certainly anticipate trying out TestNG on my current project. Just as soon as I get through all the mail I haven't read while I was playing around with it.</p>

<p>Technorati Tags: <a href="http://technorati.com/tag/maven" rel="tag">maven</a></p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-03-06T21:39:05+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001313_want_to_get_rich_stay_married.html">
<title>Want to get rich? Stay married</title>
<link>http://blogs.codehaus.org/people/brett/archives/001313_want_to_get_rich_stay_married.html</link>
<description><![CDATA[<p>Riding in an elevator today I saw this headline come up on screen... those who stay married on average have double the income of those who are single or divorced.<br /><br />What do you know, 1 + 1 = 2 after all.<br /><br />That aside, the dual meaning of the headline struck me more - getting and staying married certainly leads to a richer life, even if that's not the case financially.<br /><br /><br /><br /></p>]]></description>
<dc:subject>General</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-01-19T11:04:21+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001306_developing_with_jetty_where_have_you_been_all_my_life.html">
<title>Developing with Jetty: Where Have You Been All My Life?</title>
<link>http://blogs.codehaus.org/people/brett/archives/001306_developing_with_jetty_where_have_you_been_all_my_life.html</link>
<description><![CDATA[<p>Do yourself a favour - check out <a href="http://jetty.mortbay.org/jetty6/">Jetty6</a>.<br /><br />It's been a while since I've done any form of webapp development, so I'm a bit rusty. The last place I worked at ran Tomcat servers (quite successfully), so development was naturally done against the same, with the occasional foray into Resin. But both suffered from the problem that fairly regularly, someone would get their dev environment misconfigured and spend some time troubleshooting where it had all gone wrong. It was inevitably something simple and completely unrelated to the NullPointerException or some other runtime exception that had popped up in the logs or in the browser.<br /><br />With IDEA having Tomcat support built in, when I was starting to test the new webapp I naturally fell back to the old habit of firing that up. And then, no end of of problems:<br /><ul><li>The Windows install of Tomcat omits all the startup scripts because you get a service, and you'd never want anything else, right? The IDEA support requires the scripts, so I grab the tarball instead.</li><li>Errors on startup. SEVERE: Error filterStart. I know that means an exception in the filters I have configured. I'd like to know what it is. But the only way I'm extracting it is with a breakpoint and startup in debug mode (yes, this was my fault, but a little more helpful error message would be nice).</li><li>Ok, everything working. Webapp redeploys most of the time, in about 15-20 seconds after making changes. Sometimes it needs a stop/start cycle to pick it up though.</li><li>Somehow I manage to get a NullPointerException on startup when it was working before. Googling seems to indicate this is an invalid ROOT.xml, as I see a user getting reprimanded for not bothering to do validation on the XML. Sorry, but a NullPointerException is a bug, user error or not. I can't find the cause, the XML is valid and I've deleted IDEA's cache of the tomcat base to no avail.<br /></li></ul>The IDEA support for Tomcat is actually quite good, but I just didn't have time for this. This was with a default configuration!<br /><br />Luckily, Jetty6 to the rescue. I've heard much about it recently and I know they just did a <a href="http://jetty.mortbay.org/jetty6/maven-plugin/howto.html">Maven 2 plugin</a> that sounded cool. I wasn't really aiming to learn another new technology, but thought it was worth a shot since it was on my todo list and I wasn't getting anywhere. Less than 5 minutes later, the environment is running flawlessly with features I've had to fumble around to set up for other containers in the past:<br /><ul><li>web resources read directly from the source tree, so you can edit, save, refresh without any deploying, etc.</li><li>detects changes on a scheduled interval (I'm using 10 seconds), reloads the webapp if classes/descriptors/libs change. It reloads <span style="font-style: italic;">fast</span> and I haven't seen it fall over on it yet.</li><li><span style="font-style: italic;">Very </span>little setup required.</li></ul>What setup was required?<br /><br />First, the normal Maven2 stuff: run the archetype command to generate a skeleton webapp project, start adding web content, and run mvn package to build the WAR. I'd done all this before using Tomcat today. Because of the way I was using Tomcat, I wasn't using mvn package, but had used mvn idea:idea to generate the appropriate webapp IDEA module and was letting it do all the exploded webapp creation in the Maven layout, so I could continue to use that as is.<br /><br />To set up Jetty6, I added this to the POM:<br /><br />
<div class="code"><pre>&lt;plugin&gt;<br />
  &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;<br />
  &lt;artifactId&gt;maven-jetty6-plugin&lt;/artifactId&gt;<br />
  &lt;configuration&gt;<br />
    &lt;scanIntervalSeconds&gt;10&lt;/scanIntervalSeconds&gt;<br />
    &lt;contextPath&gt;/&lt;/contextPath&gt;<br />
  &lt;/configuration&gt;<br />
&lt;/plugin&gt;</pre></div><br /><br />The rest of the defaults were fine. Then:<br /><pre>mvn jetty6:run</pre>Jetty is now sitting on localhost:8080 with the webapp running, listening for changes.<br /><br />This is my ideal set up for development, and I don't see myself going back any time soon. A huge thanks to the Greg and Jan for their work on this. I'm really looking forward to using it some more.<br /> <br /></p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-01-10T22:01:41+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001299_how_can_you_help_improve_the_maven_repository.html">
<title>How can you help improve the Maven repository?</title>
<link>http://blogs.codehaus.org/people/brett/archives/001299_how_can_you_help_improve_the_maven_repository.html</link>
<description><![CDATA[<p>Both <a href="http://www.1060.org/blogxter/entry?publicid=9EE3794599F42C4E1D9BF2F2FE655180&amp;token=">Steve</a> and <a href="http://weblogs.goshaky.com/weblogs/page/lars?entry=improving_your_build_tool">Lars</a> have been talking about how they think Maven repositories could be improved. Lots of good points, lots I agree with, lots I'd have already done if there were more hours in the day :)<br /><br />I'm sure there are plenty of folks out there that have thoughts of their own on this topic. So, if that's you, how can you help?<br /><br />There are a few different categories of people that can help in their own ways.<br /><ol><li><span style="font-style: italic;">Open source library and framework developers and release managers</span> - Even if you don't use Maven yourself, chances are your users do. Treat that support as importantly as any other feature request. You can submit your own Maven metadata, and even have your releases automatically published to the Maven repository system. Here are the <a href="http://maven.apache.org/project-faq.html">instructions for both</a>. It's also important to consider how your choice of dependencies affects your users. Putting all your functionality into one library is a distribution convenience, but can cause confusion for users about what the dependencies really are if they only use a part. Give them a choice. Produce libraries with discrete, independant functionality and clear dependencies (including clear version requirements), <span style="font-weight: bold;">and</span> produce the convenient bundled archive with the lot.<br /></li><li><span style="font-style: italic;">Developers interested in working on an application</span> - participate in the Maven Repository Manager. We are building an application that does all the fun things like reporting on bad data, converting Maven 1.x repositories, and doing searches and browsing of the repository. You can comment on the brief <a href="http://docs.codehaus.org/display/MAVEN/Repository+Manager">feature and design notes</a>. You can help us fix or implement <a href="http://jira.codehaus.org/browse/MRM">issues in the repository manager</a>, or <a href="http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&amp;mode=hide&amp;pid=10500&amp;sorter/order=DESC&amp;sorter/field=priority&amp;resolution=-1&amp;component=11338">in Maven itself</a>. Vote for the ones important to you. Or discuss your ideas on <span style="font-style: italic;">dev@maven.apache.org</span> with the other developers.<br /></li><li><span style="font-style: italic;">Users of the Maven repository</span> - <a href="http://maven.apache.org/guides/mini/guide-maven-evangelism.html">Help us fix metadata</a> with usability problems. Even better, get the project you are using to buy into the problem and help fix it.<br /></li></ol>One of Maven's biggest strengths is the repository, it's size and openness to input from users and project owners. However, one of Maven's biggest pain points is the repository, it's size and openness to input from users and project owners :)<br /><br />The good news is that you can help - we've gotten plenty and have seen quite an improvement since Maven 2.0 was released. There's still work to do, but we are moving forward.<br /></p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2006-01-06T11:45:04+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001280_intellij_tips_discovered_after_weirdness_in_the_debugger.html">
<title>IntelliJ Tips Discovered after Weirdness in the Debugger</title>
<link>http://blogs.codehaus.org/people/brett/archives/001280_intellij_tips_discovered_after_weirdness_in_the_debugger.html</link>
<description><![CDATA[<p>It's been a fruitful hour or so realising some things about how IntelliJ works and how the debugger behaves differently to running the code outright.</p>

<p><span style="font-weight: bold;">Lesson 1</span>: The appearance (or lack) of <span style="font-style: italic; text-decoration: underline; color: rgb(51, 51, 255);">&lt;Click to see difference&gt;</span> in Junit results is not random. It only appears when you are comparing Strings in assertEquals - for objects, you get the traditional "expected &lt;....&gt; but was &lt;....&gt;". So if your String methods are consistent with equals(), then you can put a .toString() in your assertEquals to get this to appear. Or, a better solution:</p>

<p><span style="font-weight: bold;">Lesson 2:</span> You can copy the text between &lt;...&gt; in the junit output to the clipboard, then select the second set, right click and say "Compare with clipboard". This gives you effectively the above without modifying your assertion questionably.</p>

<p><span style="font-weight: bold;">Lesson 3:</span> The debugger changes the way your code executes, but only if you step through. Specifically, if toString() has side effects.</p>

<p>This one bears more explaining. My tests failed under Maven. My tests failed when run from IntelliJ. My tests failed when I run through the IntelliJ debugger without breaks. But as soon as I set a breakpoint and then continue execution, test succeeds. I'm trying to figure out why equals() is broken (its failing, but toString() produces identical results and displays all the elements), but stepping through is not going to help.</p>

<p>Why would it be different when stepping into the debugger? Because some of the variables were lazily initialised, and this was done in toString() via a call to a getter, but not equals() which was just using the variable reference. The debugger, when stepping, calls toString() on methods. This probably also highlights why its not a hot idea for toString() to have side effects :)</p>

<p>Things I should have known already, but weren't immediately obvious at the time.</p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-12-23T13:26:03+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001264_time_for_apachecon.html">
<title>Time for ApacheCon</title>
<link>http://blogs.codehaus.org/people/brett/archives/001264_time_for_apachecon.html</link>
<description><![CDATA[<p>There'll no doubt be a flood of these on www.planetapache.org over the next few days, but I'll get in early. Tomorrow, I'm off to this year's ApacheCon.</p>

<p>Still a few days to go yet, but I've got a long trip and a few stops to make first. This is actually the first opportunity I've had, so I'm looking forward to it, and I've never been to San Diego - good to be doing something different.</p>

<p>Look forward to seeing you there!</p>]]></description>
<dc:subject>Apache</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-12-05T21:20:56+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001252_job_opportunity_at_mergere.html">
<title>Job Opportunity at Mergere</title>
<link>http://blogs.codehaus.org/people/brett/archives/001252_job_opportunity_at_mergere.html</link>
<description><![CDATA[<p>Mergere has an opportunity for a developer in our product development team, developing our software lifecycle management system, based on Apache Maven and Continuum. </p>

<p>The role includes responsibility for all aspects of a project, including helping to identify requirements, designing and documenting specifications, implementing and testing solutions, and managing time lines for the successful and timely delivery of the projects.</p>

<p>Mergere offers a flexible, distributed work environment. We follow the best practices of Community-oriented Realtime Engineering (CoRE) to increase project visibility and lower communication overheads. </p>

<p>Resumes should be sent to brett *at* mergere *dot* com. OpenDocument, PDF or plain text formatted are preferred.</p>

<p>Specific Responsibilities:</p>

<p>*  Design and implementation of Mergere products</p>

<p>*  Adhere to the product plans throughout project life cycle</p>

<p>*  Identify possible project risks and implement corrective action to ensure project success</p>

<p>*  Work with Mergere sales, marketing, architects, and quality assurance, to ensure successful project completion</p>

<p>*  Work with Mergere community-oriented engineering team that participate in relevant open source projects</p>

<p>*  Work with Mergere client technical services to ensure products meet the requirements of clients</p>

<p>*  Participate in ongoing design and process improvements related to planning, development, and delivery of Mergere solutions</p>

<p>*  Participate in improving Mergere business practices and processes<br />
 </p>

<p>Required Skills:</p>

<p>*  4+ years experience in software development</p>

<p>*  Strong Java programming and design skills</p>

<p>*  Knowledge of different development methodologies</p>

<p>*  Details and results oriented</p>

<p>*  Efficient and effective when working independently, with cross-functional teams.</p>

<p>*  Excellent communication (verbal, written and presentation) and interpersonal skills</p>

<p>*  Proven technical and organizational skills</p>

<p>*  Thrive on working in a fast-paced environment</p>

<p>*  Effective problem solver</p>

<p>*  A driven and positive personality</p>

<p>*  Able and willing to learn Mergere product offerings</p>

<p> <br />
Beneficial Skills:</p>

<p>*  Experience in using Apache Maven and related tools</p>

<p>*  Active involvement with a Java Open Source community</p>

<p>*  Able and willing to travel 4-6 weeks per year</p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-11-28T21:37:42+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001230_test_post_from_blog_entry_poster.html">
<title>test post from blog entry poster</title>
<link>http://blogs.codehaus.org/people/brett/archives/001230_test_post_from_blog_entry_poster.html</link>
<description><![CDATA[<p><p>this is a <strong>test post.</strong></p><p><br />
Unfortunately, I don't think I can set a <em>category.</em></p></p>]]></description>
<dc:subject></dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-11-14T12:29:09+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001199_maven_20_released.html">
<title>Maven 2.0 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001199_maven_20_released.html</link>
<description><![CDATA[<p>Seems it was the day of the 2.0's. Slightly overdue but worth the wait, Maven 2.0 is now out. See the <a href="http://maven.apache.org/maven2/release-notes.html">release notes</a> for a list of changes and new features. This is a significant improvement over 1.0.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-10-21T06:18:52+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001187_maven_20_almost_there.html">
<title>Maven 2.0 - almost there</title>
<link>http://blogs.codehaus.org/people/brett/archives/001187_maven_20_almost_there.html</link>
<description><![CDATA[<p><a href="http://maven.apache.org/maven2/">Maven 2.0 Beta 3</a> is out.</p>

<p>There's plenty happening for Maven right now. This release is the second last beta as we approach the final release in the next couple of weeks. More of the original plugins are now available, and most boast improved functionality on top of the enhancements to the Maven engine itself. If you can't do it with this beta, you won't be able to do it with the final. It's bugfixes, better error reporting and doco from here on out.</p>

<p>The web site today sports a new look, much nicer than the boxish default look that has been around for the last couple of years.</p>

<p>We knew from Maven 1.0 that people didn't mind delving into the betas to find out what was going on, but given the bad experience many had with them last time around, I expected that it would be a bit quieter for Maven 2.0. </p>

<p>I was wrong.</p>

<p>We've had a huge amount of interest since the first beta was released - some using the ant tasks, some migrating from ant, some coming from maven 1.x. Hopefully we've given them a better experience this time around, with the releases being very consistent right through the betas.</p>

<p>Back in June, JavaOne was indicative of the current trend for Maven. Plenty of folks dropped by the <a href="http://www.mergere.com/">Mergere</a> booth to say hi and let us know how they were using Maven. Glassfish was announced and its use of Maven was a talking point, and the 2 BOF's we held were packed out. What I thought was a dud time turned out to have people sitting on the floor with about 90 people squeezing into the small presentation room on both occasions. And only once was that for the free beer.</p>

<p>Maven is popular. As the recent <a href="http://www.onjava.com/pub/a/onjava/2005/09/21/onjava-2005-survey-results-1.html?page=2">ONJava survey</a> said - 19% of respondants use it. But its still the tool you'll love to hate - as one respondant to the same survey <a href="http://www.onjava.com/pub/a/onjava/2005/09/28/onjava-2005-survey-results-2.html?CMP=OTC-FP2116136014">also said</a>. </p>

<p>Maven 2.0 will probably be no different, but hopefully this time only due to the fear of change rather than any technical limitations. I hope to write more on that tomorrow.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-10-05T17:39:25+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001179_maven_20_beta_2_released.html">
<title>Maven 2.0 Beta 2 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001179_maven_20_beta_2_released.html</link>
<description><![CDATA[<p>Maven 2.0 Beta 2 is now out</p>

<p>Download: <a href="http://maven.apache.org/maven2/download.html">http://maven.apache.org/maven2/download.html</a></p>

<p>The main improvements in this release are:</p>

<p>* Bug fixes in the reporting API to allow the clover plugin to work in more scenarios<br />
* Bug fixes in the artifact collector for version ranges<br />
* Improvements to offline mode</p>

<p>This release is considered stable with a feature set comparable to Maven 1.0. Further betas and the final are expected to be backwards compatible, with a primary goal of bugfixes, usability improvements, and documentation.</p>

<p>The current roadmap is to make weekly beta releases to encourage faster turnaround for issues found by the<br />
community.</p>

<p>This core release is independent of the plugins available. Further releases of plugins will be made separately.<br />
See <a href="http://docs.codehaus.org/display/MAVEN/Maven+Plugin+Matrix">Maven Plugin Matrix</a> for more information.</p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:</p>

<p>* the <a href="http://maven.apache.org/maven2/">web site</a><br />
* the <a href="http://maven.apache.org/mail-lists.html">maven-user mailing list</a></p>

<p>For news and information, see:</p>

<p>* <a href="http://www.mavenblogs.com/">Maven Blogs</a></p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-09-28T07:59:00+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001177_weekly_beta_releases_coming_up.html">
<title>Weekly Beta Releases Coming Up...</title>
<link>http://blogs.codehaus.org/people/brett/archives/001177_weekly_beta_releases_coming_up.html</link>
<description><![CDATA[<p>Now that we're into the end game for Maven 2.0, we'll be producing weekly betas for installation and testing to try and get more timely feedback on fixes, and to avoid people falling back to building from the latest Subversion which is a moving target.</p>

<p>Beta-2, out today, contains a number of bugfixes, especially to do with dependency resolution.</p>

<p>Beta-3 will focus on polishing up the exception handling and any remaining major issues.</p>

<p>Beta-4 is expected to be close to the final release, with all blocking issues fixed.</p>

<p>At this point, we're keen to get some stable releases out there - there are lots of people looking to put it into production now so it is time to start locking it down. We also expect to deliver regular releases over the following weeks to resolve any minor issues, while work commences on the 2.1 feature release.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-09-27T01:23:44+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001173_maven_20_beta_1_released.html">
<title>Maven 2.0 Beta 1 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001173_maven_20_beta_1_released.html</link>
<description><![CDATA[<p>Maven 2.0 Beta 1 and its sibling dependency management ant tasks are now out!</p>

<p>Download it from <a href="http://maven.apache.org/maven2/download.html">http://maven.apache.org/maven2/download.html</a></p>

<p>This release includes <a href="http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=10500&styleName=Html&version=11040">206 bug fixes and enhancements</a> since the previous release on 26 June.</p>

<p>The main new features in this release are:</p>

<p>* Further improved dependency management: full support for dependency ranges<br />
* Reactor project aggregation support and summary<br />
* File system discovery of POMs and artifacts to reduce build time and use of local and remote repositories<br />
* Repository metadata support<br />
* System scope dependency support<br />
* Eclipse compiler support, ability to fork compiler<br />
* Ability to automatically bundle sources and javadoc with deployments<br />
* Maven 1.x repository support<br />
* Allow use of setters in mojos for field population<br />
* Ability to separate snapshot repository<br />
* Ability to set minimum Maven version requirement for projects and plugins <br />
* Build extension support<br />
* Bugfixes and enhancements</p>

<p>This release is considered stable with a feature set comparable to Maven 1.0. Further betas and the final are expected to be backwards compatible, with a primary goal of bugfixes, usability improvements, and documentation.</p>

<p>A large number of plugins will be released in the coming week to match the primary Maven 1.0 plugin set.<br />
See <a href="http://docs.codehaus.org/display/MAVEN/Maven+Plugin+Matrix">Maven Plugin Matrix</a> for more information.</p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:</p>

<p>* the <a href="http://maven.apache.org/maven2/">web site</a><br />
* the <a href="http://maven.apache.org/mail-lists.html">maven-user mailing list</a></p>

<p>For news and information, see:</p>

<p>* <a href="http://www.mavenblogs.com/">Maven Blogs</a></p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-09-17T04:52:52+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001168_maven_11_beta_2_released.html">
<title>Maven 1.1 Beta 2 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001168_maven_11_beta_2_released.html</link>
<description><![CDATA[<p>Just pushed out Maven 1.1 Beta 2 to the mirrors. Notable improvements:<br />
- problems with deployment have been fixed<br />
- support for forkmode="once" on tests<br />
- validation of the POM before building<br />
- latest plugin updates</p>

<p>-&gt; <a href="http://maven.apache.org/start/release-notes-1.1-beta-2.html">Release Notes</a></p>

<p>-&gt; <a href="http://maven.apache.org/start/download.html">Download</a></p>

<p>This knocks quite a few minutes off the Geronimo build in my environment, so give it a whirl and let us know if it works for you so we can push towards a final 1.1 release!</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-09-12T17:08:19+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001138_glassfish_sun_jars_may_soon_be_in_the_maven_repository.html">
<title>Glassfish: Sun JARs may soon be in the Maven repository</title>
<link>http://blogs.codehaus.org/people/brett/archives/001138_glassfish_sun_jars_may_soon_be_in_the_maven_repository.html</link>
<description><![CDATA[<p>This is some of the best news I've had all year :)</p>

<p>It seems the next releases of <a href="http://mail-archives.apache.org/mod_mbox/geronimo-dev/200507.mbox/%3cNBBBJGEAGJAKLIDBKJOPOEPMCJAC.noel@devtech.com%3e">JavaMail and Activation binaries will be available under CDDL</a>, and I hear other spec jars are going down that same path.</p>

<p>If I understand the license correctly, this means they can be distributed from the Maven repository at Ibiblio, as long as they carry a notice that indicates where the source can be located.</p>

<p>I'll definitely be following this closely. It may even be worth building our own snapshot of these libraries from sources and pushing them up to ibiblio, though personally I'd prefer to wait for an official release rather than risk proliferating a temporary version.</p>

<p>Given that Glassfish builds with Maven, maybe we can add them to the list of repository sync partners and releases would be pushed out automatically in the same way as other open source organisations - who knows.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-07-28T15:03:51+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001122_maven_20_alpha_3_released.html">
<title>Maven 2.0 Alpha 3 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001122_maven_20_alpha_3_released.html</link>
<description><![CDATA[<p>The Apache Maven team are proud to announce the third alpha release of Maven 2.0.</p>

<p>Download it from <a href="http://maven.apache.org/maven2/download.html">http://maven.apache.org/maven2/download.html</a></p>

<p>This release includes <a href="http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=10500&styleName=Html&version=11021">83 bug fixes and enhancements</a> since the previous release on 13 May.</p>

<p>Maven 2.0 is a rewrite of the popular Maven application to achieve a number of goals, and to provide a stable basis to take it into the future. While it can be considered quite stable, and future versions are now expected to retain a high amount of backwards compatibility, this is still a technology preview, and not yet complete or considered ready for a production environment.</p>

<p>The main new features in this release are:<br />
<ul><br />
<li>Improved dependency management</li><br />
<li>Build profiles for environment specific settings and dependencies</li><br />
<li>Finalised <a herf="http://maven.apache.org/maven2/lifecycle.html">build lifecycle</a></li><br />
<li>Proper handling of derived dependency type such as sources, javadocs and ejb clients</li><br />
<li>Beanshell plugin support</li><br />
<li>Improved reporting support, including internationalisation.</li><br />
<li>Improvements to the Ant tasks</li><br />
<li>Better plugin management, with the ability to select specific versions for use</li><br />
<li>Various plugin improvements</li><br />
</ul></p>

<p>This release is very near to being feature complete, and the next release will be a feature complete beta-1.</p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:</p>

<p>    * the web site: <a href="http://maven.apache.org/maven2/">http://maven.apache.org/maven2/</a><br />
    * the maven-user mailing list: <a herf="http://maven.apache.org/mail-lists.html">http://maven.apache.org/mail-lists.html</a></p>

<p>For news and information, see:</p>

<p>    * Maven Blogs: <a herf="http://www.mavenblogs.com/">http://www.mavenblogs.com/</a></p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-06-24T15:19:34+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001118_javaone_beer_jug_maven_and_activemq.html">
<title>JavaOne Beer JUG - Maven and ActiveMQ</title>
<link>http://blogs.codehaus.org/people/brett/archives/001118_javaone_beer_jug_maven_and_activemq.html</link>
<description><![CDATA[<p>Looks like there a few fun gatherings happening at JavaOne next week. I'm a first-timer, so I'm looking forward to it.</p>

<p>&lt;plug&gt;<br />
I'll be at the free "<a href="http://www.simulalabs.com/JUGevent-register.php">beer JUG</a>" on the Tuesday night at 6pm, where the Maven devs will be talking about Maven 2.0 and Continuum, and the ActiveMQ folks will be talking about their latest development. There's also appetizers, an open beer and wine bar, and free t-shirts.<br />
&lt;/plug&gt;</p>

<p>I thought I'd get the word out - hope to see you there, and during the conference drop by the Mergere booth and say hi!</p>

<p><small>(apologies to javablogs readers who see this twice... I've filed it! http://jira.atlassian.com/browse/BLOG-156)</small></p>

<p><hr/></p>

<p>**Seating is limited -- Register Now to Attend**<br />
 <br />
WHAT:	Open Source "BEER JUG" Event!<br />
WHEN:	6.28.05 - Tuesday Night 6:00pm after JavaOne<br />
WHERE:	Sheraton Palace Hotel (2 Blocks North of Moscone)</p>

<p>This free event includes appetizers, open beer and wine bar, and t-shirts for all attendees!<br />
 <br />
Learn about the newest versions of ActiveMQ and Maven, including: new features, component changes, core capabilities, and best practices. Get the scoop first-hand from the projects' primary contributors, and speak with other developers who are implementing these Open Source technologies into business solutions. Presenters include: 	 <br />
 <br />
Jason van Zyl, Project Chair at Maven and Continuum<br />
James Strachan, Project Lead at ActiveMQ<br />
Winston Damarillo, CEO, Simula Labs and Founder, Gluecode Software</p>

<p><a href="http://www.simulalabs.com/JUGevent-register.php">http://www.simulalabs.com/JUGevent-register.php</a></p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-06-22T18:18:07+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001115_maven2_over_the_hump.html">
<title>Maven2 - Over the Hump</title>
<link>http://blogs.codehaus.org/people/brett/archives/001115_maven2_over_the_hump.html</link>
<description><![CDATA[<p>After finishing up a couple of recent tasks, I came to the realisation that Maven2 has reached the "hump" that you have to live with when writing in revolution mode instead of evolution. </p>

<p>I think it is now possible to do everything you could do in Maven 1.0 in Maven 2, as far as the core is concerned (and of course, a whole lot more!)</p>

<p>The main change that triggered this for me was the finalisation of the <a href="http://maven.apache.org/maven2/lifecycle.html">build lifecycle</a>. While we've been adding a lot of new features, this one was important to facilitate some use cases in Maven1 that were previously unavailable to Maven2 plugin writers.</p>

<p>This is a good milestone to hit, as the external API for plugin writers has now stabilised and some additional efforts can be put in there to rewrite the popular Maven1 plugins and reports to leverage the improvements of Maven2, so that users can see the same benefits.</p>

<p>The Maven 2.0 alpha-3 release is due out on Wednesday, including those changes and more. </p>

<p>In addition, the dependency management has started to undergo its usability improvements and will shortly have the version ranges and conflict resolution that has been on the todo list so long. And of course, this will also be available automatically in the Ant tasks (which have already undergone a number of other improvements for this release as well) and the standalone Java code you can use yourself.</p>

<p>This is a big release as we are very close to being feature complete for the 2.0 core, and entering beta testing with the July release (that is, bugfixes, cosmetic improvements and above all documentation - avoiding API, usage and metadata changes).</p>

<p>So if you've been thinking of trying Maven2 out, watch out for the release this week. We'd love to hear what you think about it and it is the best time to get your feedback in for the 2.0 release cycle.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-06-21T02:54:51+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001112_maven_11_beta_released.html">
<title>Maven 1.1 Beta released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001112_maven_11_beta_released.html</link>
<description><![CDATA[<p>The Maven 1.1 Beta is now out. Most will be interested in the reduced memory consumption and Ant 1.6 support, but there are a few other updates and bugfixes as well as all the latest stable plugin releases. It appears stable and should be usable today in most places using Maven 1.0.2.</p>

<p>From the release notes...</p>

<p><a href="http://maven.apache.org/start/download.html">http://maven.apache.org/start/download.html</a></p>

<p>This release focuses on the following objectives:<br />
<ul><br />
 <li>Integration of Maven 2 technologies such as Maven Wagon, Maven SCM and the new model code</li><br />
 <li>Ant 1.6.5 support</li><br />
 <li>Upgrade to later releases of dependencies, in particular Jelly</li><br />
 <li>Significant improvements in memory usage</li><br />
 <li>Improved POM layout</li><br />
 <li>Bugfixes</li><br />
</ul></p>

<p>With just a <a href="http://maven.apache.org/reference/backwards-compatibility.html">few exceptions</a>, Maven 1.1 is backwards compatible with Maven 1.0.</p>

<p>For a full list of changes, please see <a href="http://jira.codehaus.org/secure/ReleaseNote.jspa?version=11371&amp;styleName=Html&amp;projectId=10030&amp;Create=Create" class="externalLink" title="External Link">JIRA</a>.</p>

<p><b>IMPORTANT: </b> You must ensure that Maven 1.1 is first in your path if you want to have it installed side-by-side with Maven 1.0.2</p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:<br />
<ul><br />
<li>the FAQ: <a href="http://maven.apache.org/faq.html">http://maven.apache.org/faq.html</a></li><br />
<li> the maven-user mailing list: <a href="http://maven.apache.org/mail-lists.html">http://maven.apache.org/mail-lists.html</a></li><br />
</ul><br />
</p><p><br />
For news and information, see:<br />
<ul><br />
<li>Maven Blogs: <a href="http://www.mavenblogs.com/" class="externalLink" title="External Link">http://www.mavenblogs.com/</a></li><br />
</ul></p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-06-17T04:56:51+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001110_re_why_do_you_hate_maven.html">
<title>Re: Why do you Hate Maven?</title>
<link>http://blogs.codehaus.org/people/brett/archives/001110_re_why_do_you_hate_maven.html</link>
<description><![CDATA[<p>A year ago, I posed the question "Why do you Hate Maven?". A lot of those issues have since been addressed - if not in later Maven 1 releases, in Maven 2. This post inspired a mail on the users list listing some other issues, and whether they saw Maven 2 solving them.</p>

<p>It is always good to hear in-depth feedback, both positive experiences and negative ones, that are framed in a way that help shape a better future for Maven. So with that in mind, I thought I'd respond, and since it started in the blogosphere (and the author had originally intended to reply on the blog), I figured I'd respond here too.</p>

<p>It was definitely encouraging to note that even with the limitations discovered in Maven 1, those posing such questions still like it, and choose to use it - so its not so much a matter of hating Maven, but more of wishing it did what it does better.</p>

<p>Anyway, here goes...</p>

<blockquote>
ISSUE: Multiproject handling is a "tacked on option" whose interaction with other goals becomes problematic.

<p>M2: Appears to have been addressed in M2.<br />
</blockquote></p>

<p>This is correct here on both counts. Multiple project builds really was just a collection of separate builds. Improvements in Maven2 to cover this include<br />
- building module lists into the POM as a first class entity<br />
- the ability for a plugin to behave contextually if it is building a single project, or is an aggregating top level project<br />
- knowledge of other builds being performed in the reactor so that they can be used instead of repository data, eventually allowing "m2 compile" to work across a series of projects, without the need to install each</p>

<blockquote>
ISSUE: The Clean goal isn't clean. Requires all dependencies to be available before deletion.

<p>M2: Appears to have been addressed in M2.<br />
</blockquote></p>

<p>Again, this is spot on. Maven2 lets each goal declare whether it needs the dependencies, and if so, which set (compile, runtime, or test).</p>

<blockquote>
ISSUE: The majority of the functionality is undocumented and therefore, inaccessible at speed.
With the exception of a _small_ number of _core_ tasks there is almost no documentation. 
I currently have all the plugins expanded in a subdirectory so that I have an online dictionary of jelly and java code and properties and goals.
</blockquote>

<p>There is certainly no argument here, and was the topic of a recent blog entry on what might be wrong with Maven's documentation. Poor plugin documentation is a particular problem. I'm hopeful the documentation on the site is enough to get started and perform a reasonable percentage of the main tasks, but delving into advanced topics certainly requires a bit of digging and a post to the users list quite often. The artchitecture is also problematic to document as is: explaining the effects of a postGoal in a particular plugin in Maven1 is particularly challenging, as is comparing the differences between a goal, a jelly tag, or just a property.</p>

<blockquote>
M2: It may or may not be addressed in M2 but it looks like the basic explanantions of lifecycle are there and it looks like it may be easier for me to help update the documentation built on top of that foundation.
</blockquote>

<p>M2 is still in its alpha stages, so the documentation can be expected to be lean. We tend to write things as they become stable to avoid writing documentation that will change on experimental features. That stage is now coming to an end, and it is necessary to start fleshing out the main site, and set a good foundation for the reference documentation in the plugins, as well as common uses. In general, how Maven2 works is much more clearly defined and so easier to explain.</p>

<p>Definitely yet to be proven whether a good job will be done here, but I think the Maven team have an idea of what is necessary.</p>

<blockquote>
Ideology

<p>Maven's best practices often don't address corporate real world headaches. Even when I agree with them I bump up against the problems inherent with what an existing corporate practise and/or current tool sets.<br />
</blockquote></p>

<p>This is a tricky one. It would be silly to call them best practices if they weren't really best practices for the real world :)</p>

<p>There are two commons causes here. One is a misunderstanding of what Maven's best practices really are. (I'll emphasise this isn't a response to the poster in question, but a general observation). This, again, comes back to a failing in our documentation. But quite often a question on the users list starting out thinking Maven is incapable of working with their project ends with the light bulb appearing above the head as it clicks. The same approach needs to be taken to builds as for coding: you can't start with a solution and try and fit the problem to it, yet it happens all the time.</p>

<p>The other is probably integration with existing practices and tools. There are definitely some particular cases where limitations come up, and this is something that needs to be looked at case by case, and how we can better facilitate Maven and those tools working together. Maven does need to be inflexible in some ways to ensure everything works as designed, but this shouldn't really stop something from being done, as long as you are still looking at this from the POV of what you want done, not how to do it.</p>

<p>With feedback on what those issues are, hopefull Maven will be a better default fit to more and more real world practices, but still retain the benefits it provides in giving known build patterns.</p>

<blockquote>
ISSUE: The attaching of the test and install goals in such a way that they cannot be separated easily and cleanly AND The assumption that testing can occur immediately after compilation and installation... without a deployment.

<p>M2: I am not yet clear that this is resolved in M2.<br />
</blockquote></p>

<p>The way we have looked to resolve this in m2 is to improve the definition. We have unit tests which are run before packaging as they always have been, and we have what we are calling integration tests that are run after packaging and might require some deployment into the server as is given here.</p>

<p>There were a few different reasons to complain about tests being intrinsically hooked into packaging in Maven1 - none of these reasons are valid, that I know of, in Maven2 as those issues have been resolved, without needing to actually prevent the tests being run.</p>

<blockquote>
ISSUE: The one project, one artifact rule is a great rule for configuration management BUT it puts the onus of managing complexity on the developer rather than the tool.

<p>The ability for a project to be able to register that it produces N artifacts and list those artifacts, ids, types, etc, would make a huge difference.</p>

<p>M2:  I have seen no sign that this is simpler in M2.<br />
</blockquote></p>

<p>In this case, it really depends on what you are trying to achieve. In Maven, the project is a fundamental unit of work, and has a unique identifier that is used for dependencies as well as building and publishing the project. Now, in the case where you have a group of coupled artifacts, such that there is a "main one" and then a series of others that only exist because of the main one - Maven2 allows that. Examples are an ejb and its client library, a taglib JAR with its tld files, and so on.</p>

<p>However, when it comes to building code where they might be separated then Maven's identification relies on being able to tell them apart, so they must be separate projects. These separate projects have their own list of dependencies, which is hopefully smaller given that there is a clear functionality separation, and this makes the final dependency management easier as the closer of a libraries dependencies is more concise and more likely to be correct straight up.</p>

<p>To make maintaining these separate projects easier, Maven2 makes use of its multiple project support and better inheritence so that they can all still be worked with together, and keeps the project files quite small and simple to maintain.</p>

<blockquote>
ISSUE: The versioning of artifacts is VERY much a "one size fits rarely" UNLESS you are in total control of all of your codebase. If there is any place where a specific artifact name doesn't work or cannot contain a version at deployment time (.NET strongly named assemblies come to mind - painfully) then there are rarely workarounds that don't take many hours to implement and integrate into the process.

<p>M2:  I have seen no sign that this is simpler in M2.<br />
</blockquote></p>

<p>This is one of the more common misconceptions - that the version in the repository has to match the version used when you build. This should not be the case. It is important anything going into Maven's repository has a version so it can tell the difference between two different versions of the same artifact, and to make builds reproducible in the future when that artifact changes. However, no matter how you reference it and it is stored in the repository, this should not affect what it is called when the artifact is actually deployed. Classic cases are DLLs and EARs which rely on specific, unversioned names.</p>

<blockquote>
ISSUE: Repositories assume WORA semantics for the artifacts. Building systems that require special dependencies for one platform but not for another is problematic.

<p>M2:  This appears to be handled at the repository side by the new M2 repos structure. I am not clear about the use of Maven to build multiple configurations.<br />
</blockquote></p>

<p>This has been taken care of in recent code in Maven2 which allows defining several build profiles within your project. They are cumulative, and let you specify different dependencies, configuration, and possibly different build processes for different environments. Typical triggers for applying certain profiles are the JDK being used, the target operating system, and whether it is a dev, test, QA or production build.</p>

<blockquote>
ISSUE: Using multiple source paths in a single projecty is a headache. It has most often come up in the code generation arena but also when dealing with tools that require the source tree to be processed to be available AND cannot filter the source files to be processed by package name.

<p>M2: I am not sure if this is addressed in M2.<br />
</blockquote></p>

<p>This has been addressed in Maven2, again without comprimising the original encouragement to keep one source tree for one artifact.</p>

<p>There is a generate-sources phase in the build process, where you can register any goals that do so, and plug the new directories into the project for compilation automatically.<br />
There is a process-sources phase before compilation, that takes the above source roots and can filter them or process them as needed.</p>

<p>So, all in all there were some great questions here that have probably been answered in pieces over time, but that I'm encouraged to say we are making positive movement in Maven2 without losing sight of the biggest advantages of using Maven in the first place to get understandable, consistent builds based on proven patterns.</p>

<p>If anyone has any further feedback on these, or other gripes you've never seen answered, or maybe even some positive encouragement, I'd be happy to take a stab at answering them.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-06-14T19:12:37+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001105_slides_maven_and_continuum.html">
<title>Slides: Maven and Continuum</title>
<link>http://blogs.codehaus.org/people/brett/archives/001105_slides_maven_and_continuum.html</link>
<description><![CDATA[<p>The slides from my presentation to the Sydney JUG last week are now online. It's an overview of Maven's concepts, the new features of Maven 2.0, the dependency management tasks for Ant, and a short introduction to Continuum.</p>

<p><a href="https://sydneyjug.dev.java.net/files/documents/922/15554/sjug20050601.pdf">https://sydneyjug.dev.java.net/files/documents/922/15554/sjug20050601.pdf</a></p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-06-07T18:22:52+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001099_speaking_at_sydney_jug_tonight.html">
<title>Speaking at Sydney JUG Tonight</title>
<link>http://blogs.codehaus.org/people/brett/archives/001099_speaking_at_sydney_jug_tonight.html</link>
<description><![CDATA[<p>I've been given the opportunity to present on Maven 2.0 and Continuum at the Sydney Java Users Group tonight at 6pm.</p>

<p>I'd encourage people in Sydney to get along to the group if they can. It's free, and they usually have some great speakers there, me being the exception :)</p>

<p>All the details are at:<br />
http://sydneyjug.dev.java.net/</p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-06-01T12:40:34+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001091_what_is_wrong_with_mavens_documentation.html">
<title>What is Wrong with Maven&apos;s Documentation?</title>
<link>http://blogs.codehaus.org/people/brett/archives/001091_what_is_wrong_with_mavens_documentation.html</link>
<description><![CDATA[<p>I'm still reading recently on a couple of blogs that Maven's documentation is not very good. This is pretty hard to hear, because I rewrote a significant chunk of it at the end of last year :)</p>

<p>When I asked the question <a href="http://blogs.codehaus.org/people/brett/archives/000678_why_do_you_hate_maven.html">Why do you Hate Maven?</a> last year, I got some good responses, it led to some changes, and I don't think most of those arguments hold any more.</p>

<p>I'm hoping the same can happen with the Maven documentation. Do you think it isn't very good? Is it a preconceived idea from before it was redone? Or is there something seriously wrong with it now? Hard to find information, incomplete, out of date? Is it the main site, or the plugins?</p>

<p>I'm the first to admit that we should have hit the ground running with Maven 2.0, but there has been a definite decision to focus on getting top quality docs together during the betas when all the features are stable. So if there are some lessons to be learned, now would be a great time to do it.</p>

<p>And if you're going to say you are sick of square, red and grey - I'm with you. It's time for a change :)</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-05-20T14:06:09+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001090_writing_beanshell_plugins_for_maven_20.html">
<title>Writing Beanshell Plugins for Maven 2.0</title>
<link>http://blogs.codehaus.org/people/brett/archives/001090_writing_beanshell_plugins_for_maven_20.html</link>
<description><![CDATA[<p>The Beanshell support for Maven 2.0 landed earlier this week. All in all quite simple to get going (just a few hours, with no prior beanshell expertise), which bodes well for adding other scripting languages later as all the scaffolding is already there.

</p><p>The following script below is an example:</p>

<div class="code"><pre>
/**
 * Beanshell mojo integration test.
 * @goal it0020
 */

import org.apache.maven.plugin.Mojo;
import org.apache.maven.script.beanshell.BeanshellMojoAdapter;
import org.codehaus.plexus.util.FileUtils;

execute()
{
    logger.info( "Executing it0020..." );
    print( "info level?" );
    FileUtils.fileWrite( outDir.getAbsolutePath() + "/out.txt", 
        "This is a Beanshell test" );
}

/**
 * Output directory for files.
 *
 * @parameter expression="${project.build.directory}" type="java.io.File"
 * @required
 */
setOutDir( file )
{
    outDir = file;
}

return new BeanshellMojoAdapter( (Mojo) this, this.interpreter );
</pre></div>

<p>Each script file contains one "mojo" (a term originally coming from Maven POJO used to describe a single goal within a plugin). Several scripts can be included in a single plugin.

</p><p>The bshdoc comments in here are used to generate a plugin descriptor for Maven, rather than editing the XML by hand. The opening comment gives the description and goal name.

</p><p>The <code>execute()
</code>
 method is what is called each time the goal is run Any valid beanshell can be used here, and as you can see there is a built in <code>logger
</code>
 variable that can be used for output (as can <code>print
</code>
). Note that the script is instantiated each time, so any state stored globally is not retained. This may be made configurable in the future.

</p><p>Any <code>setXXX
</code>
 methods declare the input variables which can be configured from the POM and are used to build the plugin descriptor. Note that at present the methods are not actually called, the variables are just inserted. The expression and type give the default value and what to coerce it to.

</p><p>Finally, the return statement is required to make sure that Maven gets back the contents with the right interface so it can be executed.

</p><p>Currently, this all needs to be bundled up in a JAR like other plugins. I think that there would be a strong demand to edit on the fly for scripted plugins, so there may need to be development-only support for editing these in place or even into a running instace.

</p><p>It is quite similar to a Java plugin, so it may be that people still opt for those unless they are looking for a way to edit on the fly, have some existing code, or particularly want something loosely typed.

</p><p>Of course, you can also mix and match (eg include Java code, and call that from your beanshell script or vice-versa).

</p><p>Any thoughts? How would others like to see this work?</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-05-20T10:41:37+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001085_maven_20_alpha_2_released.html">
<title>Maven 2.0 Alpha 2 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/001085_maven_20_alpha_2_released.html</link>
<description><![CDATA[<p>The Apache Maven team are proud to announce the second alpha release of Maven 2.0.</p>

<p>Download it from <a href="http://maven.apache.org/maven2/download.html">http://maven.apache.org/maven2/download.html</a>.</p>

<p>Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.</p>

<p>This release includes  <a href="http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&pid=10500&fixfor=11020">76 bug fixes and enhancements</a> since the first release on 8 April.</p>

<p>Maven 2.0 is a rewrite of the popular Maven application to achieve a number of goals, and to provide a stable basis to take it into the future. While it can be considered quite stable, and future versions are now expected to retain a high amount of backwards compatibility, this is still a technology preview, and not yet complete or considered ready for a production environment.</p>

<p>The main new features in this release are:</p>

<p>    * Basic site generation<br />
    * Improved error handling<br />
    * Automatic plugin updates<br />
    * Published Mojo and Plugin API<br />
    * Inclusion of Ant tasks for Maven 2.0</p>

<p>This release is expected to be much more architecturally stable, making early adoption a possiblity. At this point, there are still only the core plugins available.</p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:</p>

<p>    * the web site: http://maven.apache.org/maven2/<br />
    * the maven-user mailing list: http://maven.apache.org/mail-lists.html</p>

<p>For news and information, see:</p>

<p>    * Maven Blogs: http://www.mavenblogs.com/</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-05-14T01:30:59+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001082_automatic_plugin_updates_in_maven.html">
<title>Automatic Plugin Updates in Maven</title>
<link>http://blogs.codehaus.org/people/brett/archives/001082_automatic_plugin_updates_in_maven.html</link>
<description><![CDATA[<p>Want to <i>automatically update your Maven plugins</i> to the latest versions available? Well, with the Maven 2.0 alpha 2 release coming this week, you can.</p>

<p>The introduction of separate release timeframes for plugins some time back was a good move - for example, there have been several individual plugin updates made available since the last Maven 1.0.2 release in December, that users could download as soon as they were ready.</p>

<p>But one of the common questions received is how to find out what the latest versions of all the plugins are. To solve this, if a version is not specified Maven will now check daily (by default) for a new version, and download it if it is newer. This uses the same mechanism as for snapshots, so you can also check for updates on demand, and set the update interval to always, daily, interval or never. We hope to allow greater configurability of these updates in the following June release.</p>

<p><i>What about build reproducibility?</i> Obviously this is a concern, and for that reason any plugins related to the build is specified directly in the POM, and you have the ability to specify what version of a plugin you are using. Regardless of what releases are known of, that one will always be used to build your project.</p>

<p>This also assists when distributing your project to other people. <i>No more telling them what new plugins they need to install to build!</i> It all happens behind the scenes using the versions specified in the project.</p>

<p>Another feature that makes plugin use in Maven 2.0 really easy that you might not have noticed is the transparent discovery. Maven 2.0 actually doesn't come with any plugins installed - yet goals like "idea:idea" will <i>discover and download the IDEA plugin automatically</i>. This relies on a little magic specific to Maven plugins currently, but is also scheduled to be expanded to all plugins in the June release.</p>

<p>This really helps with usability in Maven 2.0... but if you've got any additional ideas about how you'd like to get plugin updates, feel free to drop us a line on the <a href="http://maven.apache.org/mail-lists.html">users list</a>.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-05-11T16:33:08+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001066_storing_your_maven_repository_in_cvssubversion.html">
<title>Storing your Maven Repository in CVS/Subversion</title>
<link>http://blogs.codehaus.org/people/brett/archives/001066_storing_your_maven_repository_in_cvssubversion.html</link>
<description><![CDATA[<p>A common sticking point with people looking at Maven is the concept of using a remote web repository (even if they can mirror it in their local network) rather than storing the dependencies in CVS along with their source code.</p>

<p>Usually when the arguments here take place, the benefits of putting them into an SCM (such as versioning, access control and auditing) are touted as reasons to store them with the project and live with the downsides of duplication, slower checkouts and updates, and reliance on SCM versioning that can leave you stranded when the files are later deployed and have nothing attached to them to indicate where they came from.</p>

<p>It is only the latter problems that Maven attempts to solve by having a repository, so why not have the best of both worlds?</p>

<p>I came to think of this when I saw the argument yet again on the users list and thought back to <br />
<a href="http://mail-archives.apache.org/mod_mbox/www-repository/200409.mbox/%3c415ADF2B.60608@latte.harvard.edu%3e">a discussion about using Subversion</a> as a remote repository.</p>

<p>Given it was a Friday, I decided to spare a couple of hours and <a href="http://svn.apache.org/viewcvs.cgi/maven/wagon/trunk/wagon-providers/wagon-scm/">implemented it. </a></p>

<p>It's pretty rough, but is a working prototype that makes Maven 1.1/2.0 downloads a checkout/update, and deploy is an add/commit. I see this would be useful for snapshot repositories, where you could use one filename instead of transforming the version, so getting the latest would literally be an svn update.</p>

<p>I don't know if I'll come to use it myself, but if anyone is interested in testing and working on the functionality, please drop by the <a href="http://maven.apache.org/mail-lists.html">developer mailing lists</a>.</p>

<p>Working with the new components of Maven makes things like this really easy - in the couple of hours I was able to reuse the existing upload/download mechanism, and wrap it around our SCM handlers, so CVS and SVN could both be plugged in. With a little testing so could clearcase, starteam or perforce which we have alpha providers for, or anything else someone cared to work on (we have had interest in developing a VSS provider, for example). All of this is reusable against all of the Maven plugins, and any related Ant tasks.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-05-02T13:19:12+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001058_transitive_dependencies_in_ant.html">
<title>Transitive Dependencies in Ant</title>
<link>http://blogs.codehaus.org/people/brett/archives/001058_transitive_dependencies_in_ant.html</link>
<description><![CDATA[<p>The Maven team have released a set of Ant tasks for performing dependency management within your Ant scripts. This includes:</p>

<ul>
  <li>Transitive dependencies</li>
  <li>Snapshot handling</li>
  <li>Scope tracking</li>
  <li>Deployment using SCP, SFTP, and file protocols</li>
</ul>

<p>The tasks are based on the Maven 2.0 artifact handling code, so behave identically. The version included is slightly newer, from the upcoming alpha-2 release.</p>

<p>This gives you access to the more than 8500 artifacts available in the Maven central repository, and the ability to utilise the published artifacts from other Maven 1.0 or Maven 2.0 built applications.</p>

<p>An example use:<br />
<code><br />
&lt;artifact:dependencies pathId="dependency.classpath"&gt;<br />
  &lt;dependency groupId="org.apache.maven.wagon" artifactId="wagon-provider-test" version="1.0-alpha-2"/&gt;<br />
&lt;/artifact:dependencies&gt;<br />

</code>
</p>

<p>Download: <a href="http://www.apache.org/dyn/closer.cgi/maven/binaries/maven-artifact-ant-2.0-alpha-1-dep.jar">http://www.apache.org/dyn/closer.cgi/maven/binaries/maven-artifact-ant-2.0-alpha-1-dep.jar</a><br />
User's guide: <a href="http://maven.apache.org/maven2/ant-tasks.html">http://maven.apache.org/maven2/ant-tasks.html</a></p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-04-25T23:30:06+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001045_improved_snapshots_in_maven2.html">
<title>Improved snapshots in Maven2</title>
<link>http://blogs.codehaus.org/people/brett/archives/001045_improved_snapshots_in_maven2.html</link>
<description><![CDATA[<p>Snapshots were something that I believed to be widely misunderstood in Maven 1.0, and this was because they tended to have a dual purpose.</p>

<p>I believe it is now a lot closer to the original intention.</p>

<p><h3>Snapshots as Dependencies</h3> From ther POM writer's perspective using a development library, a dependency always contains SNAPSHOT (eg 2.0-SNAPSHOT). However, snapshots are now deployed to the remote server as numbered versions, never as just the single filename. Repository metadata is used to store the timestamp and build number of the artifact, so that when the project resolves the SNAPSHOT reference, it gets the latest version. This version can later be stored in the POM to ensure a reproducible build, and a user can compare what version they have to the repository version to check if they are the same or not.</p>

<p>A big complaint was the frequency of download checks on SNAPSHOTs which can be quite slow - it would happen multiple times within a single Maven instance in some occasions. Maven 2.0 has improved on that - not only is it only checked once per Maven execution, the default is to only check once a day. Of course, the interval is configurable from the POM, and there is also a command line option to force it to check every Maven run as well. This can make it much like CVS updates: just update your dependencies when you are ready to integrate with everyone else.</p>

<p><h3>Developing with Snapshots</h3> For those building the SNAPSHOTs, it is also simpler. You specify something like 2.0-SNAPSHOT in your <code>&lt;version/&gt;
</code>
 tag (meaning you are working towards 2.0). This need only be changed at the point of release. Installation and deployment takes care of putting it in the right place - there is only one install and one deploy goal, no need to remember to deploy it as a snapshot like in Maven 1.x. Also, it is saved as a single file in the local repository, so you can develop freely without cluttering up your disk (as local installs occur a lot more frequently than remote builds).</p>

<p><h3>How it all works</h3> Vincent has spoken before about <a href="http://blogs.codehaus.org/people/vmassol/archives/000953_binary_dependency_builds.html">binary dependencies</a> and how they are useful. Maven 2.0's snapshot handling should make this option a lot more palatable.</p>

<p>There is still more work to do to be able to make different versions interact together, but we're well on the way.</p>

<p>For those interested, the <a href="http://docs.codehaus.org/pages/viewpage.action?pageId=22585">original design for SNAPSHOT handling</a> in Maven 2.0 is available.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-04-14T16:22:36+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001038_maven_20_technology_preview_release.html">
<title>Maven 2.0 Technology Preview Release</title>
<link>http://blogs.codehaus.org/people/brett/archives/001038_maven_20_technology_preview_release.html</link>
<description><![CDATA[<p>The first Maven 2.0 Technology Preview release is now out.</p>

<p><a href="http://maven.apache.org/maven2/index.html">http://maven.apache.org/maven2/index.html</a></p>

<p>We're looking forward to hearing your feedback, ideas, and (to a lesser extent :) bug reports.</p>

<p>If you need help with the release, please consult the documentation frequently as we continue to update it, and subscribe to the users@maven.apache.org mailing list. For more information, please see <a href="http://maven.apache.org/maven2/about.html#get-help">http://maven.apache.org/maven2/about.html#get-help</a></p>

<p>We welcome contributors to the Maven project - if you are interested in helping out, please see <a href="http://maven.apache.org/maven2/about.html#get-involved">http://maven.apache.org/maven2/about.html#get-involved</a></p>

<p>Thanks to everyone who has worked on this release!</p>

<p>-- The Apache Maven Team</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-04-09T03:35:17+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001023_ivy_do_we_really_need_more_metadata.html">
<title>Ivy: do we really need more metadata?</title>
<link>http://blogs.codehaus.org/people/brett/archives/001023_ivy_do_we_really_need_more_metadata.html</link>
<description><![CDATA[<p>I caught wind of a release of Ivy today, that lists among its new features a new <a href="http://www.jayasoft.fr/org/ivyrep/">repository</a> for project metadata.</p>

<p>Given that they are already using the Maven-developed repository for artifacts at Ibiblio, this struck me as pretty strange. Constructing metadata for over 7000 artifacts by hand is not something I'd want to take on, especially when most of it already exists in the Maven repository. And especially when you are just taking that metadata from the same source.</p>

<p>Let's compare an example:<br />
<a href="http://www.ibiblio.org/maven/commons-cli/poms/commons-cli-1.0.pom">http://www.ibiblio.org/maven/commons-cli/poms/commons-cli-1.0.pom</a><br />
and<br />
<a href="http://www.jayasoft.fr/org/ivyrep/apache/commons-cli/ivy-1.0.xml">http://www.jayasoft.fr/org/ivyrep/apache/commons-cli/ivy-1.0.xml</a><br />
(the XSL is actually a nice touch to make it browsable).</p>

<p>Now, the Maven descriptor can describe everything the Ivy one does except for who wrote the ivy descriptor (which doesn't seem all that useful other than for some really basic auditing if it were to be automated). There is a limitation in the POM that some data exists (license) in a super POM not published - but that problem is going to be addressed in the next Maven release, and could certainly be worked around when the metadata is published.</p>

<p>We also have <a href="http://www.ibiblio.org/maven/hibernate/poms/hibernate-2.1.4.pom">metadata for projects like Hibernate</a> that are not built using Maven - it is a requirement of upload to ibiblio.</p>

<p>The main difference seems to be the listing of the location of repositories that house the artifact. This seems a bit short sighted... do you add a new repository entry to every descriptor in the repository every time you add a mirror?</p>

<p>As a Maven developer, I would have liked to see the Ivy developers approach the Maven project about this and offer to help beef up our metadata, and use it rather than creating a whole new repository.</p>

<p>As a user, I'd prefer to get access to new dependencies as soon as they are released or uploaded, rather than having to submit two different requests (one to ibiblio and one to ivyrep).</p>

<p><b>Update: </b> Note that I'm not saying anything about Ivy or Maven's ability to do transitive dependencies - I'm aware that Ivy is doing this and the current release of Maven is not. However there is no reason - that I can see - that Ivy cannot use the existing metadata to implement that feature.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-03-31T13:32:49+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/001010_new_maven_site_is_live.html">
<title>New Maven Site is Live</title>
<link>http://blogs.codehaus.org/people/brett/archives/001010_new_maven_site_is_live.html</link>
<description><![CDATA[<p>The new Maven web site has now gone live at <a href="http://maven.apache.org/">http://maven.apache.org/</a>.</p>

<p>After pointing users at the staging site for some time now, this was a long overdue overhaul that hopefully makes documentation easier to find, and more complete.</p>

<p>There is still more to come, but all feedback and contributions are welcome. Feel free to comment here, on the Maven Users List, or add patches to JIRA.</p>

<p>Sorry - same old colour scheme this time around, but hopefully there'll be something new real soon now.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2005-03-15T17:18:14+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000920_wacky_bugs.html">
<title>Wacky Bugs</title>
<link>http://blogs.codehaus.org/people/brett/archives/000920_wacky_bugs.html</link>
<description><![CDATA[<p>Ever seen a really wacky bug that you just couldn't explain?</p>

<p>I had one of those panics earlier this week. After releasing Maven 1.0.2 with just a few small fixes discovered in the month since the last release, I was fairly confident that we could now close that branch. To the point that I deleted my branch checkout from my laptop, with CVS HEAD being the code I'd work on permanently.</p>

<p>Then after arriving at work the next day, I saw a number of complaints of a regression that caused Maven startup to be very slow. This being in an area of code that hadn't changed. What had gone wrong?</p>

<p>Luckily, it turned out that it just went away some hours later.</p>

<p>Why? Well, I built the distributions locally, then uploaded them from here. The code in question was checking timestamps - if an installed plugin was newer, unpack it locally and set the timestamp to "now". But I'm at +11 GMT, though apparently .zip and .exe don't record that - just the time. So the rest of the world hadn't caught up.</p>

<p>I found it funny in the end. Next time I'll have to build the releases 20 hours in advance :)</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-12-11T14:04:59+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000911_maven_102_out_roll_on_maven_11.html">
<title>Maven 1.0.2 out, roll on Maven 1.1...</title>
<link>http://blogs.codehaus.org/people/brett/archives/000911_maven_102_out_roll_on_maven_11.html</link>
<description><![CDATA[<p>Ok, so the Maven 1.0.2 release is out, most importantly fixing the property inheritence regression that found its way into Maven 1.0.1 (when you roll up 4 months of bugfixes in one release, I guess you're asking for that to happen :)<br />
There were a few fixes for dependency handling that were discovered after 1.0.1 that were also included, as well as updates to the java, ear, cruisecontrol and dashboard plugins.</p>

<p>A quiet release, but that is now the stable version that should persist for the next couple of months. Unless something goes horribly wrong, this will be the last Maven 1.0.x release.</p>

<p>Next up: Maven 1.1, which has some nice features coming while building on the current core so that projects will continue to build unmodified (with a few small, documented, exceptions). There will be a lot of changes under the hood too.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-12-07T23:20:04+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000824_blog_stacking_in_javablogs.html">
<title>blog stacking in javablogs?</title>
<link>http://blogs.codehaus.org/people/brett/archives/000824_blog_stacking_in_javablogs.html</link>
<description><![CDATA[<p>This arrived today (right now it can be viewed here: http://javablogs.com/ViewHotBlogEntries.action)<br />
<img alt="stacked.PNG" src="http://blogs.codehaus.org/people/brett/archives/stacked.PNG" width="586" height="596" border="0" /><br />
The blog is http://localhost:8080/. At the end of the day, all it means is that you lose the real "hot" entries because you can't get to this blog anyway :)<br />
The question is, is this an exploit of a bug in javablogs or has it been deliberately stacked by requesting it continually?</p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-08-31T17:40:38+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000790_maven_structure_primer.html">
<title>Maven Structure Primer</title>
<link>http://blogs.codehaus.org/people/brett/archives/000790_maven_structure_primer.html</link>
<description><![CDATA[<p>Here's something I wrote up a while back for work and have touched up recently that discusses the structure of Maven 1.x.</p>

<p><a href="http://blogs.codehaus.org/people/brett/presentations/Maven Structure Primer.ppt">Download file</a></p>

<p>While you wouldn't need it as a general user (although troubleshooting is helpful), its aimed more at someone digging seriously into plugin writing.</p>

<p>Definitely rough around the edges, but I hope it helps!<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-07-16T12:55:26+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000786_ann_maven_10_released.html">
<title>[ANN] Maven 1.0 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/000786_ann_maven_10_released.html</link>
<description><![CDATA[<p>The Apache Maven team is pleased to announce the release of Maven 1.0.</p>

<p>http://maven.apache.org/start/download.html<br />
(please be patient as the release may not have propogated to all mirrors yet)</p>

<p>Maven is a project management and project comprehension tool. Maven is based on the concept of a project object model: builds, documentation creation, site publication, and distribution publication are all controlled from the project object model. Maven also provides tools to create source metrics, change logs based directly on source repository, and source cross-references.</p>

<p>New Features</p>

<p>    * Bundle the Jelly XML tag library for build and for plugin's convenience<br />
    * Add different types of download progress meters.</p>

<p>Fixed bugs</p>

<p>    * Fix property inheritence under some circumstances Issue: MAVEN-1296. Thanks to Eric Lapierre.<br />
    * <maven:get/> now initialises the plugin if it has not already been loaded, removing the need for dependency handles<br />
    * Check last modified timestamp as well as conditional GET in case the server time is behind the local time Issue: MAVEN-1188.<br />
    * Bugfixes for new httpclient based downloading (incorrect timestamps) Issue: MAVEN-1343.<br />
    * Handle cross site redirects Issue: MAVEN-1353.<br />
    * Correct absolute paths with no drive designator on windows Issue: MAVEN-1290.<br />
    * Amend bootstrap to create directories that might not exist Issue: MAVEN-1341.<br />
    * If artifact is not a snapshot, don't continue checking for newer downloads once one is successful Issue: MAVEN-1344.</p>

<p>Plugin Highlights</p>

<p>The latest plugin releases are also included, with bug fixes and some new features.</p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:</p>

<p>    * the FAQ: http://maven.apache.org/faq.html<br />
    * the Wiki: http://wiki.codehaus.org/maven/<br />
    * the maven-user mailing list: http://maven.apache.org/mail-lists.html</p>

<p>For news and information, see:</p>

<p>    * Maven Blogs: http://www.mavenblogs.com/</p>

<p>- The Apache Maven Team </p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-07-14T01:39:26+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000770_maven_10_rc4_released.html">
<title>Maven 1.0 RC4 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/000770_maven_10_rc4_released.html</link>
<description><![CDATA[<p>Maven 1.0 RC4 has been <a href="http://maven.apache.org/start/release-notes-rc4.html">released</a>. Since its been a while since RC3, we snuck in a few useful features and bugfixes.</p>

<p>This really is the final release candidate - a couple of bugfixes will be done but 1.0 should follow shortly.</p>

<p>Here are the release notes...</p>

<p><h1>Maven 1.0 RC4 Released</h1></p>

<p>The Apache Maven team is pleased to announce the release of Maven 1.0 RC4.</p>

<p><a href="http://maven.apache.org/start/download.html">http://maven.apache.org/start/download.html</a></p>

<p>Maven is a project management and project comprehension tool. Maven is based on the concept of a project object model: builds, documentation creation, site publication, and distribution publication are all controlled from the project<br />
object model. Maven also provides tools to create source metrics, change logs<br />
based directly on source repository, and source cross-references.</p>

<p>Maven 1.0 RC4 is the final release candidate for Maven 1.0 (and this time we<br />
mean it!)</p>

<p><h2>New Features</h2></p>

<p>* Support NTLM authentication on a remote repository. Issue: MAVEN-1332.<br />
  Thanks to george wang.</p>

<p><h2>Fixed bugs</h2></p>

<p>* Sort all installed plugins. Issue: MAVEN-1320. Thanks to Miguel Griffa.<br />
* Fix HTTP BASIC authentication for remote repos. Issue: MAVEN-1273. Thanks  to Andreas Peschka.<br />
* Repository element was broken for non-cvs connections Issue: MAVEN-1298. </p>

<p><h2>Changes</h2></p>

<p>* Set maven.plugin.user.dir to ${maven.home.local}/plugins by default, move maven.plugin.unpacked.dir to ${maven.home.local}/cache.<br />
* Read local plugin jars from maven.plugin.user.dir instead of<br />
  maven.plugin.unpacked.dir.<br />
* Use commons-httpclient for http downloads from the repository.</p>

<p><h2>Plugin Highlights</h2></p>

<p>* The deploy plugin has been merged into the artifact plugin. The artifact plugin is used for all artifact deployments now, and supports the old-style deployment transparently.<br />
* Addition of the new RAR plugin.<br />
* For individual plugin changes, see the Changes report for plugins at: <a href="http://maven.apache.org/reference/plugins/plugins.html">http://maven.apache.org/reference/plugins/plugins.html</a></p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:<br />
* the FAQ: <a href="http://maven.apache.org/faq.html">http://maven.apache.org/faq.html</a><br />
* the Wiki: <a href="http://wiki.codehaus.org/maven/">http://wiki.codehaus.org/maven/</a><br />
* the maven-user mailing list: <a href="http://maven.apache.org/mail-lists.html">http://maven.apache.org/mail-lists.html</a></p>

<p>For news and information, see:<br />
* Maven Blogs: <a href="http://www.mavenblogs.com/">http://www.mavenblogs.com/</a></p>

<p><i>- The Apache Maven Team</i></p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-06-29T01:48:01+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000733_maven_is_not_just_a_bunch_of_ant_tasks.html">
<title>Maven is not just a bunch of ant tasks</title>
<link>http://blogs.codehaus.org/people/brett/archives/000733_maven_is_not_just_a_bunch_of_ant_tasks.html</link>
<description><![CDATA[<p>I was reading <a href="http://blogs.codehaus.org/people/dion/archives/000730_more_on_fire_v2.html">dion's response</a> to Howard's Maven post, and saw a comment there that said:<br />
<blockquote><br />
Howard is also looking at using JAM, which provides a pre-built set of ant tasks, much like Maven except written so I don't have to learn a whole new tool and language. This seems to be what Maven should have been, if developed by people with sense.<br />
</blockquote></p>

<p>Despite all the complaints about Jelly (most of which come from the Maven developers :), countless people have tried. I don't quite understand that - you shouldn't have to learn Jelly to use Maven. Maybe this is a problem with documentation and something I'm trying to fix right now.</p>

<p>I've said previously that JAM looks like a good idea - using what Maven is really about to generate Ant that everyone else understands until Maven can handle some of the things that get tricky (in particular multiple source directory handling is inconsistent in Maven 1.x).<br />
A JAM developer posted <a href="http://theserverside.com/news/thread.tss?thread_id=26054#123114">this comment</a>:<br />
<blockquote><br />
We actually see JAM as step towards Maven, not as a competing framework. But until Maven matures, Ant is still the reliable industry workhorse… and we hope JAM makes it a little easier to use.<br />
</blockquote></p>

<p>This is good to see. I haven't tried JAM out, but if it does what you need it to do, then I'd say go for it.</p>

<p>It's a shame that Maven has come out being perceived as a glue for a bunch of Ant tasks. It's a fair perception, because as I said in my last post, when you give users the option of producing reusable build fragments, it tends to happen real fast, so Maven has a <i>lot</i> of plugins out there.</p>

<p>I certainly look forward to a stronger adoption of Maven's concepts of project information structure, and hope that Maven can continue to mature down its current path where it becomes the best tool to manage this information and build with it.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-05-24T12:13:25+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000731_re_moving_away_from_maven.html">
<title>Re: Moving Away From Maven</title>
<link>http://blogs.codehaus.org/people/brett/archives/000731_re_moving_away_from_maven.html</link>
<description><![CDATA[<p>Howard says he is <a href="http://howardlewisship.com/blog/2004/05/moving-away-from-maven.html">moving away from Maven</a>, and gives some fair reasons for it, and I thought it was appropriate to respond.</p>

<p>Howard starts out by stating what he likes about Maven:<br />
# Automated donwload of dependencies (from http://www.ibiblio.org/maven)<br />
# Integrated pretty documentation (with navigation)</p>

<p>For dependencies, a good solution in Ant is later given. I think Howard would agree with me here - if you are using Maven just so you can grab dependencies easily and intend to script the build yourself, then you are wasting your time and should stick with Ant :)</p>

<p>For the site - Howard doesn't propose an alternative. I assume he will continue to us Maven to generate that.</p>

<p>There is a claim that the documentation has a "large" number of bugs, of which Howard points out just two. The reality of this is that many of these are problems with Jelly itself. As a result, for a long time we have been planning a rewrite of the xdoc plugin that will not use Jelly. This will land shortly after Maven 1.0 is released.</p>

<p>While discussing bugs, I'll admit Maven has a huge QA issue. We rely a lot on users to report bugs and submit patches across the areas that we can't cover. <br />
Maven is a project that facilitates rapid reuse and we accepted a lot of plugins that were later abandoned and we did not have the resources to maintain. As a result, some time ago plugins were moved to an independant release cycle, and Maven simply bundles the latest releases. It is up to the plugin maintainers to release quality plugins. The next task here is to evict immature plugins and make sure all have an owner, which is under way. It would have been nice to remove some of the low quality stuff already and make people download it - but you don't want to inconvenience users in that way during an RC cycle.</p>

<p>I think the approach that has been taken here is sensible. No project is ever going to be bug free, so we focus on fixing the things that can be done<br />
- quickly and easily<br />
- by applying a patch<br />
- affect the most users<br />
If a bug gets filed as minor, with no suggestion of a fix, no votes from other users, and sometimes not even a reproducible test case - there aren't many projects in the open source world that can fix all of those.</p>

<p>This is all just a result of growing too fast, and something that the team are endeavouring to get under control, by getting back to a more simplistic model of what Maven is, and start emphasising that the plugins are somewhat separate to that. </p>

<p>Moving on, Howards points on simplicity and consistency are well taken. Funnily enough all the issues he lists here look something like the documentation naviagation that has just been proposed as it is going under a rewrite.</p>

<p>Effeciency: Maven has made huge strides in this area, but we have accepted that as long as Jelly is in the core there is going to be a problem here, especially when generating the site. <br />
However, Maven is as fast as Ant to do your day to day development, and faster if you run it in console mode, and really - how often do you regenerate the project site or a distribution? You can afford the time there, which is why the efforts have gone into the big wins.</p>

<p>Feedback: I hate NPE's too. I hate it when you get it in Maven deep inside one of the other libraries it is using like velocity. And it's worse for a user. But Maven then explains to the user how to file a bug report, and these issues usually get addressed immediately. We still have work to do here, but I'm not sure what more can be done immediately to help.</p>

<p>Howard's Ant example that follows shows just how Ant should be used. I have a couple of issues with the perception here that it is much briefer than Maven:<br />
1. it doesn't do the site generation at all, while part of the Maven build documents given are dedicted to this (specifying reports and their properties)<br />
2. those <imports /> are not standard components. That is basically a reimplementation of what maven-javacc-plugin and maven-jar-plugin would be doing for you, and I suspect they are quite large and not immediately reusable beyond your own projects.<br />
3. maven.xml is just there to fix a bug in a plugin, so that really shouldn't be necessary.<br />
4. This doesn't address a lot of other issues that Howard has with Maven, such as building multiprojects, and probably isn't too scalable.</p>

<p>JAM sounds like a better way to do (2) above as it is reusable, but I think if it were as popular as Maven, it would probably suffer the same problems.</p>

<p>Anyway, I hope this brings some clarity. Essentially I agree with what Howard has said to some extent, and as far as the issues with Maven go, they have long been recognised and I am happy to say the current Maven roadmap addresses it all. I look forward to seeing it come to fruition.<br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-05-22T13:18:49+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000728_maven_10_rc3_released.html">
<title>Maven 1.0 RC3 Released</title>
<link>http://blogs.codehaus.org/people/brett/archives/000728_maven_10_rc3_released.html</link>
<description><![CDATA[<p>The Maven team is pleased to announce the Maven 1.0-rc3 release!</p>

<p>http://maven.apache.org/start/download.html</p>

<p>Maven 1.0 RC3 is the final release candidate for Maven 1.0.</p>

<p>Maven is a project management and project comprehension tool. Maven is based<br />
on the concept of a project object model: builds, documentation creation, site<br />
publication, and distribution publication are all controlled from the project<br />
object model. Maven also provides tools to create source metrics, change logs<br />
based directly on source repository, and source cross-references.</p>

<p>Changes in this version include:</p>

<p>  New Features:</p>

<p>o Introduce a backwards compatibility option maven.property.inheritance,<br />
  which disables the functionality when set to false. Issue: MAVEN-1255.<br />
o Show help on how to submit a bug report if Maven dies with an unexpected<br />
  exception<br />
o Add maven.remote.group to defaults.properties<br />
o Add sort attribute to reactor tag.<br />
o Add collectOnly and collectionVar attributes to reactor tag. Thanks to John<br />
  Casey.<br />
o Improve maven -g output, and add -u and -P switches for additional usage<br />
  help.<br />
o maven:get/maven:set tags replace maven:pluginVar<br />
o Install and uninstall plugin jelly tags for managing plugins on the fly. Issue:<br />
  MAVEN-1219.<br />
o Ships with the latest maven standard plugin releases.<br />
o All plugin releases were polished up.</p>

<p>  Fixed bugs:</p>

<p>o Parent project properties are now correctly loaded from extended<br />
  project.xml files. This was implemented previously, but the properties were<br />
  not being passed through to the final goal attainment context. Issue:<br />
  MAVEN-37.<br />
o Evaluate context variables before inserting them into the ant properties<br />
  Issue: MAVEN-1275. Thanks to Henning Schmiedehausen.<br />
o Have system entities with relative paths in maven.xml and plugin scripts<br />
  resolve relative to the correct location. Issue: MAVEN-1223. Thanks to<br />
  joseph benavidez.<br />
o Setup dependency path for non-classpath dependencies Issue: MAVEN-1265.<br />
o Fix install_repo.bat problems on Windows 98 Issue: MAVEN-956.<br />
o Allow plugin installation and uninstallation from the plugin manager and<br />
  the cache so that it can be done on the fly. Issue: MAVEN-1219.<br />
o Snapshot is now downloaded only if the remote version is more recent than<br />
  local version. Issue: MAVEN-1226.<br />
o Fix fatal exception running goals defined inside j:import'ed scripts.<br />
  Issue: MPAPPSERVER-6.<br />
o Correctly report certain types of fatal exceptions inside of silently<br />
  ignoring them.<br />
o use correct new lines in maven -g output Issue: MAVEN-1227.<br />
o Apply patch to use system encoding for project so that xdoc transformation<br />
  of POM works on non-ISO8859-1 systems. Issue: MAVEN-1050. Thanks to<br />
  Shinsuke SUGAYA.<br />
o Improve error handling of HttpUtils Issue: MAVEN-558. Thanks to David<br />
  Zeleznik.</p>

<p>  Changes:</p>

<p>o Add a Base64 implementation to replace the sun.* internal version. Issue:<br />
  MAVEN-1129. Thanks to John Casey.<br />
o Remove tools.jar from startup classpath so it will run on non-Sun JVMs such<br />
  as Kaffe. Issue: MAVEN-1129.<br />
o Move maven jelly tags to maven-jelly-tags subproject<br />
o Show extended information with --info: list of installed plugins (including<br />
  versions), and ~/build.properties</p>

<p>  Removed:</p>

<p>o The experimental codeswitcher and perforce plugins were removed from the<br />
  distribution.<br />
o The StatCVS plugin has been moved to the StatCVS project and has been removed<br />
  from the distribution. see: http://statcvs-xml.berlios.de/</p>

<p>  Plugin highlights:</p>

<p>o Add a "classic" theme CSS<br />
o Items in navigation.xml and reports can define a target attribute. Items in<br />
  links can use an img attribute to create an icon. New CSS class named<br />
  "externalLink" used for links with an url beginning with 'http://'. New CSS<br />
  class named "newWindow" used for links with target='_blank'. Issue:<br />
  MPXDOC-97. Thanks to Fabrizio Giustina, Harald Ommang .<br />
o Add a plugin:install-now goal that installs the plugin into the currently<br />
  running instance of maven so that it can be used by subsequent goals.<br />
  Issue: MAVEN-1219.<br />
o Add plugin:uninstall-now that removes the plugin from the currently running<br />
  instance of Maven. Issue: MAVEN-1219.<br />
o Fix issues with DOM classes and jdk1.3<br />
o For individual plugin changes, see the Changes report for plugins at:<br />
  http://maven.apache.org/reference/plugins/plugins.html</p>

<p>We hope you enjoy using Maven! If you have any questions, please consult:</p>

<p>    * the FAQ: http://maven.apache.org/faq.html<br />
    * the Wiki: http://wiki.codehaus.org/maven/<br />
    * the maven-user mailing list: http://maven.apache.org/mail-lists.html</p>

<p>For news and information, see:</p>

<p>    * Maven Blogs: http://www.mavenblogs.com/</p>

<p>- The Apache Maven Team <br />
</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-05-21T02:28:25+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000691_maven_10_expected_this_lifetime.html">
<title>Maven 1.0 expected this lifetime</title>
<link>http://blogs.codehaus.org/people/brett/archives/000691_maven_10_expected_this_lifetime.html</link>
<description><![CDATA[<p>Finally got around to mapping all of the plugin issues that might constitute a Maven 1.0 release.</p>

<p>All of the functional issues are mapped for RC3, with further documentation issues and issues arising from RC3 to be done by 1.0.</p>

<p>As it stands there are 31 functional issues to fix...<br />
<a href="http://jira.codehaus.org/secure/BrowseProject.jspa?id=10030&report=roadmap">The Roadmap</a><br />
with the plugin issues listed here:<br />
<a href="http://jira.codehaus.org/secure/ViewIssue.jspa?key=MAVEN-1244">MAVEN-1244</a></p>

<p>Of course, plugin development will continue and plugins will be released individually through 1.0 and onwards.</p>

<p>I'm hoping that a bunch of people will test RC3 to its limits to ensure we have as complete a release as possible for Maven 1.0.</p>

<p>Among recent fixes was the second oldest open bug:<br />
<a href="http://jira.codehaus.org/secure/ViewIssue.jspa?key=MAVEN-37">MAVEN-37</a><br />
project.properties is now inherited along with your project.xml file.</p>]]></description>
<dc:subject>Maven</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-04-27T17:26:09+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000689_sitemesh_giving_it_another_look.html">
<title>SiteMesh: Giving it another look</title>
<link>http://blogs.codehaus.org/people/brett/archives/000689_sitemesh_giving_it_another_look.html</link>
<description><![CDATA[<p>After a long break, the Sydney JUG meeting was on again last night and had the privilege of seeing Mike Cannon-Brookes deliver another talk on SiteMesh (he originally spoke about it in the context of java.blogs at SJUG <a href="http://blogs.atlassian.com/rebelutionary/archives/000200.html">last July</a>.</p>

<p>I gave a thought to investigating it at the time - and got as far as downloading 1.5 and reading the docs (the ones that weren't marked TODO at least!), but didn't see the advantages over Tiles.</p>

<p>However, it was good to see it given more attention last night and got to learn about some more advanced features like DecoratorMappers and inline decorators. </p>

<p>It is more obvious now that SiteMesh might be the better solution for us, even in a Struts environment.</p>

<p>The advantages I see in SiteMesh over Tiles are:<br />
- a lot less configuration by applying layouts to a bunch of pages by a pattern, rather than having to cut and paste definitions for each page in tiles (even though they extend a common base, you still need 4 lines per page per skin)<br />
- an easy way to skin by using a ParameterDecoratorMapper to pick a skin (this could easily be replaced with some other technique - we use the domain name of the request). Tiles could do this but I found it quite slow at the time because of the subrequest to select the template JSP, and have just dealt with copying all the defs for each skin up until now.<br />
- the fact that it splits both the template/decorator and the page/fragment content as a complete HTML file that you can style is a big win when you work with a separate team of HTML designers that don't want to deal with JSP.<br />
- I think it may be faster - I'll be taking this for a spin today and will report back :)</p>

<p>Good luck at the TSS Symposium Mike!</p>]]></description>
<dc:subject>Java</dc:subject>
<dc:creator>brett</dc:creator>
<dc:date>2004-04-23T11:30:52+10:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/brett/archives/000678_why_do_you_hate_maven.html">
<title>Why do you Hate Maven?</title>
<link>http://blogs.codehaus.org/people/brett/archives/000678_why_do_you_hate_maven.html</link>
<description><![CDATA[<p>Mike Spille has written an article about Ant 1.6 at TSS (see post <a href="http://www.theserverside.com/news/thread.tss?thread_id=25195">here</a>).</p>

<p>One comment from the article:<br />
<blockquote>And with any luck, maybe the &lt;import&gt; task will be the final nail in Maven's coffin!!</blockquote></p>

<p>Ok, first I'll set my own position straight: I think Ant is fantastic at what it does and the basis of a lot of Maven's plugin functionality uses Ant to provide the tasks.</p>

<p>Apart from the truthfulness of this statement, it's obvious that Mike hates Maven, and that he's not alone. So why do you hate maven?</p>

<p>To be honest I hear complaints all the time but rarely see anything that gives a balanced reason for it, so I'd love to hear what really is the cause of such passion about it.</p>

<p>I can think of a few reasons and have taken a bit from those postings, and I'll start with the biggest one:</p>

<p><h1>Because you hate Jelly</h1><br />
Well you're not alone! As has been mentioned, even the author has publicly apologised for it and moved on to <a href="http://groovy.codehaus.org/">better things</a>.<br />
It has its fair share of bugs and Maven bears the brunt of this a lot. Having said that, it does do some things pretty well once you get used to it and you can get by in Maven without ever needing to use the nasty bits.<br />
And there is light at the end of the tunnel: future versions of Maven will support other scripting languages.<br />
So is it just Jelly that disgusts you, or is it something else?</p>

<p><h1>Because Maven doesn't improve on Ant</h1><br />
I've heard this too. Everyone seems to think that automatic dependency handling, unit testing and reusable components are easy in Ant (especially with the new 1.6 features),<br />
Howeverm this is usually by cut-and-paste from some other build. Being able to &t;import&gt; a custom component will only yield the same problems Maven has about customisation complaints (see below).<br />
And I've seen too many <a href="http://blogs.codehaus.org/people/brett/archives/000226_taking_maven_for_granted.html">bad Ant build scripts</a> (and this example is by no means the worst)<br />
to think this is true.</p>

<p><h1>Because Maven doesn't let you customise your build</h1><br />
Ok, maybe this is a lack of documentation, but what sort of customisations do you want to do that you can do in Ant and not easily in Maven?<br />
(the stumbling block in many cases here may be Jelly too, which is fair enough).</p>

<p><h1>Because Maven just generates useless project sites</h1><br />
Yes, a lot of the documentation isn't used as often as it could be. And y