<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Objectives for A Better Maven</title>
	<atom:link href="http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/feed/" rel="self" type="application/rss+xml" />
	<link>http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/</link>
	<description>It&#039;s all about the Coding</description>
	<lastBuildDate>Thu, 07 Feb 2013 11:09:53 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Petter Måhlén</title>
		<link>http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/#comment-149</link>
		<dc:creator><![CDATA[Petter Måhlén]]></dc:creator>
		<pubDate>Mon, 24 Jan 2011 09:59:30 +0000</pubDate>
		<guid isPermaLink="false">http://pettermahlen.com/?p=368#comment-149</guid>
		<description><![CDATA[Absolutely, I agree completely. When I mentioned &quot;Perfect interoperability with the existing Maven artifact management repository infrastructure&quot;, I meant that to include reusing existing tools such as repository managers as well as reusing the services such as ibiblio, etc., that are available on the internet. So that would mean that any attempt at improving Maven would have to be capable of at least generating pom:s that can be deployed to repositories, even if those pom:s may or may not be used in the build configuration itself. Thanks for clarifying that!]]></description>
		<content:encoded><![CDATA[<p>Absolutely, I agree completely. When I mentioned &#8220;Perfect interoperability with the existing Maven artifact management repository infrastructure&#8221;, I meant that to include reusing existing tools such as repository managers as well as reusing the services such as ibiblio, etc., that are available on the internet. So that would mean that any attempt at improving Maven would have to be capable of at least generating pom:s that can be deployed to repositories, even if those pom:s may or may not be used in the build configuration itself. Thanks for clarifying that!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jodi M</title>
		<link>http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/#comment-148</link>
		<dc:creator><![CDATA[Jodi M]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 20:56:29 +0000</pubDate>
		<guid isPermaLink="false">http://pettermahlen.com/?p=368#comment-148</guid>
		<description><![CDATA[One thing you didn&#039;t mention in your post: repository managers. IMO Maven without a repository manager is practically unusable, and conversely repository management solves a great deal of the problems of using Maven standalone. Repository managers should be considered a necessary (core) aspect of Maven.

http://maven.apache.org/repository-management.html

(we use Nexus)]]></description>
		<content:encoded><![CDATA[<p>One thing you didn&#8217;t mention in your post: repository managers. IMO Maven without a repository manager is practically unusable, and conversely repository management solves a great deal of the problems of using Maven standalone. Repository managers should be considered a necessary (core) aspect of Maven.</p>
<p><a href="http://maven.apache.org/repository-management.html" rel="nofollow">http://maven.apache.org/repository-management.html</a></p>
<p>(we use Nexus)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Petter Måhlén</title>
		<link>http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/#comment-147</link>
		<dc:creator><![CDATA[Petter Måhlén]]></dc:creator>
		<pubDate>Sat, 22 Jan 2011 10:36:46 +0000</pubDate>
		<guid isPermaLink="false">http://pettermahlen.com/?p=368#comment-147</guid>
		<description><![CDATA[Thanks for the feedback - that comment is nearly long enough to be a blog post of its own. :)

A couple of quick replies: I think that the way that Maven handles transitive dependencies isn&#039;t great - that&#039;s what you and Tim are both saying as well. We&#039;re also all saying that it&#039;s a hard or impossible problem to fix completely. Hm. More thought needed.

About interoperability with Maven repos: my idea would be to be able to generate essentially just the dependencies part of the pom and include that in something that can be deployed to a Maven repo, but not the rest of the build configuration. You&#039;re saying that a pom that can build the project is needed - why is that?

Your comment about IDE integration is good. I started out thinking that enabling great IDE integration is vital, but it could actually be that implementing it is in fact a core feature.]]></description>
		<content:encoded><![CDATA[<p>Thanks for the feedback &#8211; that comment is nearly long enough to be a blog post of its own. :)</p>
<p>A couple of quick replies: I think that the way that Maven handles transitive dependencies isn&#8217;t great &#8211; that&#8217;s what you and Tim are both saying as well. We&#8217;re also all saying that it&#8217;s a hard or impossible problem to fix completely. Hm. More thought needed.</p>
<p>About interoperability with Maven repos: my idea would be to be able to generate essentially just the dependencies part of the pom and include that in something that can be deployed to a Maven repo, but not the rest of the build configuration. You&#8217;re saying that a pom that can build the project is needed &#8211; why is that?</p>
<p>Your comment about IDE integration is good. I started out thinking that enabling great IDE integration is vital, but it could actually be that implementing it is in fact a core feature.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andreas Holmén</title>
		<link>http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/#comment-146</link>
		<dc:creator><![CDATA[Andreas Holmén]]></dc:creator>
		<pubDate>Fri, 21 Jan 2011 15:40:59 +0000</pubDate>
		<guid isPermaLink="false">http://pettermahlen.com/?p=368#comment-146</guid>
		<description><![CDATA[I am a fan of maven. If you have a project that depends on more than zero classes that are not in rt.jar or if you do intend to publish your product as anything other than a single .class file I would recommend maven.

There are some problems of course, for me the lack of usable documentation is probably the worst but plugin configuration itself is less than fun even if you find some doc about how to do it. Performance issues and the unpredictable builds are bad problems. I have a few practises somewhat counter to maven core concepts like &quot;never depend on a snapshot&quot; and &quot;don&#039;t let maven download stuff&quot;. But in spite of them I choose to use maven whenever I can. Also I really agree with the convetion over configuration policy. I will gladly adhere to a directory structure convention if it means that i get my .war packaged wihtout having to know how to package a .war.

We have about the same opinions regarding what is great with maven. In my list of things that are good about maven I would not have mentioned all the plugins (3) because the docs are so hopeless I usually give up when I try to find a plugin that could help me in any specific case. I just use tiny subset but it&#039;s enough for me.

My list of things that need improving in a build tool would be somewhat different. I do not feel that troubleshooting errors in maven is much of a problem, typically my build will fail due to errors in my tests or my dependencies and that information is displayed well enough for me. Sub par docs are not really a problem with maven but rather with the plugin developers who don&#039;t bother to write usable docs. Maven is slow, yeah maybe so, if a new tool was faster and equally good I would use it.

Number three, verbose configs, is something I would like to see improved. Usable docs would mitigate some of the problem but perhaps plugins could be configured in seperate files imported by a main &quot;pom&quot; to keep things apart and small enough to take in easily. Perhaps there can be a golden convention for how plugins are configured and a way to make it easy to document plugins.

The fourth point (and it&#039;s close relative number six) would be a real USP. If you can resolve dependency versions in some way and provide deterministic build results I could quit with my policies of &quot;never depend on a snapshot&quot; and &quot;don&#039;t let maven download stuff&quot;.

My worry would be that it is an impossible task. Two 3rd party tools could both introduce transitive dependencies on some common tool but different versions. Each of them may or may not be compatible with the other version but how would you know? At best you could announce a dependency conflict and force the developer to make an epxlicit decision (but hey that&#039;s a great idea!). If you have stated that you want to use a snapshot version of something you have said &quot;I will accept that my build may fail due to something someone elses does whenever he wants to&quot; and that&#039;s not going to change.

I see two other major issues, the first being your first objective. Interoperability with existing maven repos is probably required which means you have to parse and understand maven poms for transitive dep resolution. Also you will have to generate valid maven poms for your own components. Unless you intend to publish things into the maven repos that are not maven compatible (lots of bad karma there) you would have to generate maven poms that can actually build your project (not just resolve dependencies) using standard maven. This only really counts if you publish the source but a build tool should not exclude the open source option.

The other thing would be IDE integration. Perhaps that can be left up to a comunity of plugin devs but before I make a switch it must load in my eclipse at least as well as my maven project does before I will consider the tool.

Finally I have one imoprtant feature that I think needs to be on the list of objectives which is a SCM connection branching and releasing capability in line with what maven can do.]]></description>
		<content:encoded><![CDATA[<p>I am a fan of maven. If you have a project that depends on more than zero classes that are not in rt.jar or if you do intend to publish your product as anything other than a single .class file I would recommend maven.</p>
<p>There are some problems of course, for me the lack of usable documentation is probably the worst but plugin configuration itself is less than fun even if you find some doc about how to do it. Performance issues and the unpredictable builds are bad problems. I have a few practises somewhat counter to maven core concepts like &#8220;never depend on a snapshot&#8221; and &#8220;don&#8217;t let maven download stuff&#8221;. But in spite of them I choose to use maven whenever I can. Also I really agree with the convetion over configuration policy. I will gladly adhere to a directory structure convention if it means that i get my .war packaged wihtout having to know how to package a .war.</p>
<p>We have about the same opinions regarding what is great with maven. In my list of things that are good about maven I would not have mentioned all the plugins (3) because the docs are so hopeless I usually give up when I try to find a plugin that could help me in any specific case. I just use tiny subset but it&#8217;s enough for me.</p>
<p>My list of things that need improving in a build tool would be somewhat different. I do not feel that troubleshooting errors in maven is much of a problem, typically my build will fail due to errors in my tests or my dependencies and that information is displayed well enough for me. Sub par docs are not really a problem with maven but rather with the plugin developers who don&#8217;t bother to write usable docs. Maven is slow, yeah maybe so, if a new tool was faster and equally good I would use it.</p>
<p>Number three, verbose configs, is something I would like to see improved. Usable docs would mitigate some of the problem but perhaps plugins could be configured in seperate files imported by a main &#8220;pom&#8221; to keep things apart and small enough to take in easily. Perhaps there can be a golden convention for how plugins are configured and a way to make it easy to document plugins.</p>
<p>The fourth point (and it&#8217;s close relative number six) would be a real USP. If you can resolve dependency versions in some way and provide deterministic build results I could quit with my policies of &#8220;never depend on a snapshot&#8221; and &#8220;don&#8217;t let maven download stuff&#8221;.</p>
<p>My worry would be that it is an impossible task. Two 3rd party tools could both introduce transitive dependencies on some common tool but different versions. Each of them may or may not be compatible with the other version but how would you know? At best you could announce a dependency conflict and force the developer to make an epxlicit decision (but hey that&#8217;s a great idea!). If you have stated that you want to use a snapshot version of something you have said &#8220;I will accept that my build may fail due to something someone elses does whenever he wants to&#8221; and that&#8217;s not going to change.</p>
<p>I see two other major issues, the first being your first objective. Interoperability with existing maven repos is probably required which means you have to parse and understand maven poms for transitive dep resolution. Also you will have to generate valid maven poms for your own components. Unless you intend to publish things into the maven repos that are not maven compatible (lots of bad karma there) you would have to generate maven poms that can actually build your project (not just resolve dependencies) using standard maven. This only really counts if you publish the source but a build tool should not exclude the open source option.</p>
<p>The other thing would be IDE integration. Perhaps that can be left up to a comunity of plugin devs but before I make a switch it must load in my eclipse at least as well as my maven project does before I will consider the tool.</p>
<p>Finally I have one imoprtant feature that I think needs to be on the list of objectives which is a SCM connection branching and releasing capability in line with what maven can do.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Petter Måhlén</title>
		<link>http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/#comment-145</link>
		<dc:creator><![CDATA[Petter Måhlén]]></dc:creator>
		<pubDate>Fri, 21 Jan 2011 12:10:14 +0000</pubDate>
		<guid isPermaLink="false">http://pettermahlen.com/?p=368#comment-145</guid>
		<description><![CDATA[I have previously looked at buildr, rake and raven and not found them to be compelling alternatives to Maven. But it&#039;s been a couple of years since I checked them out, and things may have happened. I guess one problem for me personally is Ruby - I never quite subscribed to the idea of &quot;polyglot programmer&quot; that was popular a couple of years back because I feel that programming languages actually take a lot of time and investment to learn. So I never got round to learning Ruby, it didn&#039;t and doesn&#039;t feel like a language for me. I&#039;m working on the next post which describes some of my ideas for how to fix things and I&#039;ve got one or two more things to say on this topic then. Either way, it is hard to get a proper understanding of the pros and cons of a build tool without working with it for an extended period of time. Maybe I should do that with one or a few of those tools. 

I definitely agree with your comments about the frustration of duplicated library inclusions - it&#039;s not an easy thing to &quot;fix&quot;, but alleviating the problem should ideally be much easier than it is today using Maven.]]></description>
		<content:encoded><![CDATA[<p>I have previously looked at buildr, rake and raven and not found them to be compelling alternatives to Maven. But it&#8217;s been a couple of years since I checked them out, and things may have happened. I guess one problem for me personally is Ruby &#8211; I never quite subscribed to the idea of &#8220;polyglot programmer&#8221; that was popular a couple of years back because I feel that programming languages actually take a lot of time and investment to learn. So I never got round to learning Ruby, it didn&#8217;t and doesn&#8217;t feel like a language for me. I&#8217;m working on the next post which describes some of my ideas for how to fix things and I&#8217;ve got one or two more things to say on this topic then. Either way, it is hard to get a proper understanding of the pros and cons of a build tool without working with it for an extended period of time. Maybe I should do that with one or a few of those tools. </p>
<p>I definitely agree with your comments about the frustration of duplicated library inclusions &#8211; it&#8217;s not an easy thing to &#8220;fix&#8221;, but alleviating the problem should ideally be much easier than it is today using Maven.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Morrow</title>
		<link>http://pettermahlen.com/2011/01/20/objectives-for-a-better-maven/#comment-144</link>
		<dc:creator><![CDATA[Tim Morrow]]></dc:creator>
		<pubDate>Fri, 21 Jan 2011 10:55:26 +0000</pubDate>
		<guid isPermaLink="false">http://pettermahlen.com/?p=368#comment-144</guid>
		<description><![CDATA[Great post, Petter.  

IMO one of the biggest issues are low-quality POMs for transitive dependencies and a lack of canonical naming for certain libraries, leading to dependency bloat as you note in point 4.  The latter may be a holdover from the initial migration from Maven 1 to Maven 2 when the naming conventions changed, but finding that the same library is included N times through different groupIds and artifactIds is frustrating.  And finding libraries that are either part of the JDK now (like Xalan and Xerces) or put of the runtime environment (like the servlet API) is frustrating.

So in your improved build tool, acknowledging these issues and permitting some kind of convenient mechanism for globally eradicating certain dependencies would be great.

As you note in point 6, the lack of determinism is problematic.  Anytime you have to suggest to a developer who is having build issues to &quot;try it again&quot; is pretty broken.

Do you have any experience with some of the build tools listed here?: http://www.streamhead.com/maven-alternatives/  buildr looks especially compelling and might meet some of your objectives.

Tim]]></description>
		<content:encoded><![CDATA[<p>Great post, Petter.  </p>
<p>IMO one of the biggest issues are low-quality POMs for transitive dependencies and a lack of canonical naming for certain libraries, leading to dependency bloat as you note in point 4.  The latter may be a holdover from the initial migration from Maven 1 to Maven 2 when the naming conventions changed, but finding that the same library is included N times through different groupIds and artifactIds is frustrating.  And finding libraries that are either part of the JDK now (like Xalan and Xerces) or put of the runtime environment (like the servlet API) is frustrating.</p>
<p>So in your improved build tool, acknowledging these issues and permitting some kind of convenient mechanism for globally eradicating certain dependencies would be great.</p>
<p>As you note in point 6, the lack of determinism is problematic.  Anytime you have to suggest to a developer who is having build issues to &#8220;try it again&#8221; is pretty broken.</p>
<p>Do you have any experience with some of the build tools listed here?: <a href="http://www.streamhead.com/maven-alternatives/" rel="nofollow">http://www.streamhead.com/maven-alternatives/</a>  buildr looks especially compelling and might meet some of your objectives.</p>
<p>Tim</p>
]]></content:encoded>
	</item>
</channel>
</rss>
