<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Maven2 Build for Alfresco in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87057#M58926</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;The inter-project dependencies are a needless pain in the neck&lt;BR /&gt;for developers.&amp;nbsp;&amp;nbsp; It ends up forcing certain things to live in&lt;BR /&gt;places because of when they're built, rather than what would&lt;BR /&gt;be the ideal logical organization.&amp;nbsp; In at few cases, it forces&lt;BR /&gt;us to do lazy-init within spring…etc.&amp;nbsp;&amp;nbsp; Cruft like this only gets worse&lt;BR /&gt;over time, so I'd like us to fix now while it's still relatively easy.&lt;BR /&gt;This is a developer's perspective, not a user's… but that matters too! &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;The comments on the build dependencies are really interesting for me and I am going to give them a lot of thought. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've always liked the idea of keeping things in separate projects and using maven to include what needs to be included.&amp;nbsp; I tend to think of it as a virtue that each piece only gets compiled with what it needs and what it needs is either declared or missing (in the POM file)&amp;nbsp; in which case [need not declared] an explosion will occur.&amp;nbsp; The pom file is a sort of documentation on the cohesion of the code. I also like the fact that you can enforce certain layering and strict use of APIs across libraries (check for cohesion with implementation) by breaking things in to sub projects and declaring dependencies. I haven't fretted much that I am taking some of the dependency management off the shoulders of javac but then, I've never worried too much about build time – which can become an issue if you have to rebuild and you freak and run a clean – and some of the symptoms you mention (like clean) are actualities.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Really good stuff Jon.&amp;nbsp; I have a lot to think about here because what you are saying is very much different then what I am currently doing. We have a lot of small projects linked together by dummy pom files and Maven is responsible for determining the build order. I always like having to come from a completely different direction and examine how we are doing things.&amp;nbsp; One of the reasons I though Maven would be a natural fit for Alfresco was the fact that Alfresco is currently split up in a similar fashion.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So if I get what you are saying: you would like packages to be atomic so that they can be individually built and deployed as a patch, but that the whole project can also be built in one javac.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ItÃ¢â‚¬â„¢s interesting because really never thought of Alfresco as a single project.&amp;nbsp; I think of the core and repository as very different from the web client for example and IÃ¢â‚¬â„¢ve always thought those lines would deepen with time. Now, again that is a bit of deployment versus source tree talk, and they are not the same thing so again, I may have to go rethink.&amp;nbsp; I am stuck in that mind set because I do break my libraries up as separate projects and I build my applications as yet separate projects.&amp;nbsp; In most cases the applications have only spring configuration, web configuration and a few domain classes and maven pulls in all the dependencies.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The fact that the Alfresco approach was similar (not the same but not too far off) re-enforced my thought process around that kind of organization.&amp;nbsp;&amp;nbsp; IÃ¢â‚¬â„¢ve been aware of at least some of the basic CONS for some time but I have always felt the PROS outweighed them.&amp;nbsp; IÃ¢â‚¬â„¢ll be interested to hear what others throw in on this subject but I really appreciate the thoughts you have put here especially because they are very different from my own on the subject.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 22 Jul 2007 05:06:16 GMT</pubDate>
    <dc:creator>rdanner</dc:creator>
    <dc:date>2007-07-22T05:06:16Z</dc:date>
    <item>
      <title>Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87050#M58919</link>
      <description>Hello everyone… we (the royal 'we' as in the Alfresco Community) need your input on a very important subject. BUILD.Alfresco has been using a custom build harness for the last two years and in that time there seems to be a growing support for the use of Maven2.&amp;nbsp; I'd like to open the floor here for y</description>
      <pubDate>Sat, 21 Jul 2007 19:07:26 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87050#M58919</guid>
      <dc:creator>rdanner</dc:creator>
      <dc:date>2007-07-21T19:07:26Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87051#M58920</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;We use maven 2 here for everything.&amp;nbsp; I love maven Ã¢â‚¬â€œ I hate maven –&amp;nbsp; but Ã¢â‚¬â€œ itÃ¢â‚¬â„¢s the best we have and it makes sense for open source projects.&amp;nbsp; Once you know maven – you know it.&amp;nbsp; Everyone I know who has switched resisted it at first because Maven 1.x stank but they are all glad they made the shift to Maven2.&amp;nbsp; This is another area where we can seek de facto based standards and reduce the barrier to entry for Alfresco.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That said… my gripes with maven are (Maven has some flaws that have nothing to do with Maven per se.):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; First is the issue of Sun Jars which are not allowed to be housed in the Maven repository or any other repository because of some silliness on the part of Sun.&amp;nbsp; Second are all the other jars that are not in the maven repository because vendors (cough-fresco-cough &amp;lt;GRIN&amp;gt;) have not made them available.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The second issue is that the central maven repository is a superfund site where people have managed to place the same libraries at 30 different groups and names Ã¢â‚¬â€œ this is mavens fault because they donÃ¢â‚¬â„¢t seem to manage the issue.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The third issue is that Eclipse plug-ins for maven are Terrible (yes Ã¢â‚¬â€œ with a capital Ã¢â‚¬ËœTÃ¢â‚¬â„¢) but they are just as good as any support for home cooked ant builds so I am not sure it matters Ã¢â‚¬â€œ we just donÃ¢â‚¬â„¢t gain much on the eclipse front.&amp;nbsp; Netbeans however seems to have nice tools (and a profiler) so in some ways we are gaining there for people who use netbeans.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The last issue I can think of is that working offline with maven has sometimes bitten me because I can't reach a dependency – this is not much different that just not having the Jar on hand except that with Maven you don't ship with the jars the way the Alfresco source is currently shipped – good for the download, it's small if you just want to sniff around the source but it does mean you must be on-line for your first build.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Other than that – my concerns are with logistics:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; We need a strong plan with guidelines for defining groups, artifact ids, dependencies and other practices.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; We need a plan for the overall source configuration – to be honest Alfresco is pretty well suited for a port: we already have things broken down in to sub projects.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I think we need a proof of concept that demonstates &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * nightly builds will continue to work&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * junit tests will continue to run&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the sun will continue to rise and so fourth&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The actual porting of the code to a Maven2 build is simple and we could do it very quickly with the help of a few – that isnt the hard part.&amp;nbsp; The hard part would be actually making the switch.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Alfresco's engineering team has to be on board and has to participate in moving and the community has to be on board and know whats happening and when its going to happen and then have support after it has happened.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; That is the tough part – making the change where it touches the people &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If we do decide to make the move (aka there is strong support and the POC works well) we would need to move with the quickness (kung-fu sword noises here) and make this happen.&amp;nbsp; We can't sit on the fence with two builds, it is too far down the stack and way too important to mess around.&amp;nbsp; It is also essentially a fork until it is one build again … so once we decide to go (should we decide to go) we need to execute the act quickly.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 21 Jul 2007 19:27:35 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87051#M58920</guid>
      <dc:creator>rdanner</dc:creator>
      <dc:date>2007-07-21T19:27:35Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87052#M58921</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Good topic Russ!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Before we get too deeply into the fine points of Ant versus Maven II,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think it's worth stepping back and defining our needs.&amp;nbsp; This way, we'll&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;be in the much better shape to identify the best way to proceed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(or at least to weight tradeoffs with a checklist in hand).&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's what I'd like to see regardless of our choice of build framework:&lt;/SPAN&gt;&lt;UL&gt;&lt;LI&gt;Remove inter-project dependency issues for good&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Remove all .classpath issues in Eclipse for good&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Make the source tree reflect the java package organization&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Default: one jar per java package; build others as-needed.&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;All build output can be configured to go outside the source tree&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Make Javadoc build better docs &amp;amp; overall indices w/o special tweaking&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Improve build speed&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Allow builds to occur directly from read-only source archive&lt;/LI&gt;&lt;/UL&gt;&lt;SPAN&gt;This could be done by reorganizing the code within Ant so that all the java&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;code is in a single project. Essentially, I think this is just the next logical&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;step along a path&amp;nbsp; begun when we got rid of recursive ant calls in our&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;build;&amp;nbsp;&amp;nbsp; we're&amp;nbsp; letting javac do its job in sorting out dependencies rather&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;than&amp;nbsp; hard-coding them ourselves (in 2 places).&amp;nbsp;&amp;nbsp; I dont' know how easy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;or hard that is to do in Maven II compared to Ant.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Does somebody care to jump in here?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are always funny corner-cases when it comes to building&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;non-trivial programs so I thought it might be nice to think about&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;it collectively. The one real technical issue I can see up-front with&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;this is the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Package&amp;nbsp; org.alfreco.foobar&amp;nbsp; has classes a, b, c, and d.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Classes a &amp;amp; b are in project ab, and go into ab.jar, while&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; classes c &amp;amp; d are in project cd, and go into cd.jar.&amp;nbsp; Due &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; to some security/classloader/bundling reason, ab.jar and&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cd.jar must reside in different locations.&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; This could be resolved in three different ways: &lt;/SPAN&gt;&lt;OL style="list-style-type:decimal;"&gt;&lt;LI&gt;Punt.&amp;nbsp; If you need a jar in more than one place, the fact that it has a bit of extra&lt;/LI&gt;baggage is often not a problem.&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;LI&gt;Make targets that create more selective jars by picking &amp;amp; choosing which classes they want.&lt;/LI&gt;This is a bit ugly but there aren't that many places where it would be necessary&lt;BR /&gt;so the overall ugliness is probably not too great.&lt;BR /&gt;&lt;LI&gt;Reorganizing the code so that packages don't need to be split across different jars.&lt;/LI&gt;This is probably the cleanest &amp;amp; best thing to do, but it's a bit more work.&lt;/OL&gt;&lt;SPAN&gt;Note that [1], [2] and [3] are not mutually exclusive options.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;We could get something working in a hackish way fairly quickly&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;via [1] and [2], and clean things up as we go via [3].&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are probably a bunch of other issues I'm not considering at all, so &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if you can think of anything big offhand, it would be nice to hear about.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My guess is that the pros strongly outweigh the cons, but that could&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;certainly change if someone thinks of a&amp;nbsp; show-stopper.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the end, I'd like us to focus on what problem we're solving first,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rather than the specific technology we're using.&amp;nbsp; The inter-project&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dependency issues we've got now have become a bit painful, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;a finer-grained set of jars would give those who accept "hot patches"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;more peace of mind, the mapping of packages to paths has&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;become annoying in places, and I'm sick of javadoc indexes not&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;being quite right.&amp;nbsp;&amp;nbsp; Those are the pain points I can see immediately,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but perhaps there are others too.&amp;nbsp;&amp;nbsp; If so, what are they?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In what ways would Maven II help or hurt relative to what could be&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;done by reorganizing the 22 ant projects into 1 (as it probably should&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;have been originally)?&amp;nbsp; Ultimately, if Maven II helps with respect to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;these specific "pain point" issues, and does not create other problems,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm very open to understanding how and why this is so.&amp;nbsp;&amp;nbsp; Otherwise, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm inclined to stick with the&amp;nbsp; known pros/cons of Ant, but use it in a&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;better way.&amp;nbsp; When the dust settles a bit on 2.1, we're definitely going to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do some homework on Maven II.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm not speaking for all of engineering here, just myself. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;From what I can tell, nobody in engineering has a very strong&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;opinion on this yet because&amp;nbsp; we just haven't had time to discuss&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;it or analyze it in detail.&amp;nbsp;&amp;nbsp; It's a conversation that's well worth having.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for kicking off the discussion!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Jon&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Jul 2007 00:27:33 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87052#M58921</guid>
      <dc:creator>jcox</dc:creator>
      <dc:date>2007-07-22T00:27:33Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87053#M58922</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Good topic Russ!&lt;BR /&gt;&lt;BR /&gt;Before we get too deeply into the fine points of Ant versus Maven II,&lt;BR /&gt;I think it's worth stepping back and defining our needs.&amp;nbsp; This way, we'll&lt;BR /&gt;be in the much better shape to identify the best way to proceed&lt;BR /&gt;(or at least to weight tradeoffs with a checklist in hand).&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;…&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;You make some really good points.&amp;nbsp; I think a bunch of us were looking at making a one for one switch just to head in the direction of a somewhat industry or at least open source standard for the sake of lowering the barrier to entry for folks who have never built Alfresco.&amp;nbsp; Frankly speaking, I wasn't even aware of two or three of the issues you surfaced.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are some features that come with Maven II which are very good.&amp;nbsp; One that I am particularly fond of is the way it performs tests.&amp;nbsp; It goes through a lot to make sure that classloaders are 'sterile' and that the test environment has only what is needed (declared) for the test.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Other features include plugins for eclipse, javadoc, clean, and other such capabilities.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to go back and look at your post more carefully.&amp;nbsp; Maybe there are some points I can address.&amp;nbsp; I have a couple of answers concerning maven and also some comments which don't have anything to do with maven that I'll take a swing at.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Like you said: it's probably a good idea to make sure we have a good list of the concerns we want to address before we go too far down the technology path but I'll throw out some maven trivia to address your points and maybe you can respond to my question concerning API(s) below.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="color:blue;"&gt;RE: Remove inter-project dependency issues for good &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This doesn't seem to be a build harness question per se, but rather a packaging question.&amp;nbsp; I'm trying to think through the issue in the moment here and one thing that pops out to me is that there are some basic dependencies like core that you will have between projects.&amp;nbsp; That is, other projects will need core and possibly other low level libraries in order to build.&amp;nbsp; I think you are addressing something different and I am just not quite sure what.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Something that I brought up out in CA was pulling the API's out in to separate jars.&amp;nbsp; I think there are several obvious pros and only one constant con and one situational that I can think of.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Pros:&lt;/SPAN&gt;&lt;BR /&gt;&lt;UL&gt;You can absolutely ensure that there is no dependence on implementation code by making sure implementations are not available to javac during build&lt;BR /&gt;&lt;BR /&gt;You have a more granular, safer jar/library you can put in common classloaders if you have to share an API (while the implementations can remain at different versions as long as binary compatibility exists)&lt;BR /&gt;&lt;BR /&gt;You have libraries which represent your contracts and only your contracts.&lt;/UL&gt;&lt;SPAN&gt;Cons:&lt;/SPAN&gt;&lt;BR /&gt;&lt;UL&gt;More jars to manage.&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; If you share an API jar you need to make sure you have compatibility.&lt;/UL&gt;&lt;SPAN style="color:blue;"&gt;Remove all .classpath issues in Eclipse for good &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What do you mean by this?&amp;nbsp; Maven II will generate your eclipse machinery but perhaps the issue you are speaking of will still be presnent.&amp;nbsp; Typically the eclipse machinery is not kept in SVN, its generated by maven by typing mvn eclispe:eclipse or by using the mvn plugin to import the project.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="color:blue;"&gt;Make the source tree reflect the java package organization &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This is independent of the build harness correct? We only need make sure that we comply with this requirement, and that the build tool doesn't stop us from keeping compliant.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="color:blue;"&gt;RE: Default: one jar per java package; build others as-needed. &lt;BR /&gt;RE: All build output can be configured to go outside the source tree &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven builds in a target folder.&amp;nbsp; I never looked to see if it can be configured to be put outside the source tree – by default it is in the source tree but at the top level (not in line with the java source files)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="color:blue;"&gt;RE: Make Javadoc build better docs &amp;amp; overall indices w/o special tweaking &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What is throwing them off currently?&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="color:blue;"&gt;RE: Improve build speed &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I think granularity and organization come to play here.&amp;nbsp; You need the capability to easily build only what you need to build.&amp;nbsp; I am not sure Maven would be "faster" for its own sake but we could probably make some optimizations in the organization which would impact build time.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;We should make sure that whatever we do, build time doesnÃ¢â‚¬â„¢t get worse.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="color:blue;"&gt;RE: Allow builds to occur directly from read-only source archive&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I don't see any issues with this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Good perspective Jon.&amp;nbsp; Does anyone else have concerns about the current build harness that we aught to investigate?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Jul 2007 01:12:52 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87053#M58922</guid>
      <dc:creator>rdanner</dc:creator>
      <dc:date>2007-07-22T01:12:52Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87054#M58923</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Good topic Russ!&lt;BR /&gt;&lt;BR /&gt;Here's what I'd like to see regardless of our choice of build framework:&lt;UL&gt;&lt;LI&gt;Remove inter-project dependency issues for good&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Remove all .classpath issues in Eclipse for good&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Make the source tree reflect the java package organization&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Default: one jar per java package; build others as-needed.&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;All build output can be configured to go outside the source tree&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Make Javadoc build better docs &amp;amp; overall indices w/o special tweaking&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Improve build speed&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Allow builds to occur directly from read-only source archive&lt;/LI&gt;&lt;/UL&gt;…&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;I'll put together a wiki page on requirements so we have something we can use as a measuring stick when considering our next steps and so that we have something to build a test plan from.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Jul 2007 01:36:46 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87054#M58923</guid>
      <dc:creator>rdanner</dc:creator>
      <dc:date>2007-07-22T01:36:46Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87055#M58924</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The inter-project dependencies are a needless pain in the neck&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for developers.&amp;nbsp;&amp;nbsp; It ends up forcing certain things to live in&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;places because of when they're built, rather than what would&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;be the ideal logical organization.&amp;nbsp; In at few cases, it forces&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;us to do lazy-init within spring…etc.&amp;nbsp;&amp;nbsp; Cruft like this only gets worse&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;over time, so I'd like us to fix now while it's still relatively easy.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This is a developer's perspective, not a user's… but that matters too! &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'd like to learn a lot more about Maven II.&amp;nbsp; If it can meet all our&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;requirements, and most folks prefer it, then that's great.&amp;nbsp;&amp;nbsp; Ant is ok,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but I don't love it.&amp;nbsp;&amp;nbsp; That said, I think we could be using Ant a lot&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;better than we are currently.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;This doesn't seem to be a build harness question per se, but rather a packaging question.&lt;/BLOCKQUOTE&gt;&lt;SPAN&gt;It's not just about the packaging.&amp;nbsp;&amp;nbsp; Structuring things so that one big &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;javac can see everything at once means perfect build dependencies&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;with 0 effort forever.&amp;nbsp;&amp;nbsp; Otherwise we're right back to:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;class X needs to be built before Y, but it needs class P&lt;BR /&gt;which must be put in location Q but then that generates a circular&lt;BR /&gt;dependency that Ant can handle but Eclipse can't… unless you&lt;BR /&gt;sprinkle lazy inits here and there in various spring config files…&lt;BR /&gt;and then muck around with .classpath files used by the continuous&lt;BR /&gt;builds done by IDEs such as Eclipse… and… and….&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Ugh. The picture I'm painting isn't that bad yet, but it's always there,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;gnawing, gnawing, gnawing….&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding your concern about many jar files,&amp;nbsp; you can actually&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;compose jars, so there can actually be *fewer* of them in the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;final product regardless of the intermediate jars you choose to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;create (or not).&amp;nbsp;&amp;nbsp; If we go the many-smaller-jars route in the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;final product, then the way of handling compatability is via&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;a major/minor numbering scheme.&amp;nbsp;&amp;nbsp; Tried and true.&amp;nbsp; The existence&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;proof:&amp;nbsp; UNIX libs&amp;nbsp;&amp;nbsp; (kudos to Sun for getting it right).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Check out One-JAR:&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://www.ibm.com/developerworks/library/j-onejar/index.html?ca=drs-j4904" rel="nofollow noopener noreferrer"&gt;http://www.ibm.com/developerworks/library/j-onejar/index.html?ca=drs-j4904&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;As far as I'm concerned, everything is on the table.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&amp;gt; Make the source tree reflect the java package organization&lt;BR /&gt;This is independent of the build harness correct?&lt;/BLOCKQUOTE&gt;&lt;SPAN&gt;It depends on the underlying capabilities of that harness.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;For example,&amp;nbsp; the way we're using Ant currently, source code &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;that belongs to the same package cannot live in the same directory,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;due to build dependency issues.&amp;nbsp; That's not a fundamental problem&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;with Ant, but rather with our current use of Ant.&amp;nbsp;&amp;nbsp; It's my understanding&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;that Maven II lets you do things at a higher level than Ant, but sometimes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;that can mean loss of lower-level control.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For example, some tools force you to build things a certain way,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and if your goals and their model are badly matched, the tool gets&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in the way).&amp;nbsp;&amp;nbsp;&amp;nbsp; I'm not saying that's the case with Maven II,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but I don't know for sure that it's not either… yet.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Being able to build from a read-only source is great.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It adds a lot of flexibility to the system in terms of &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;permissions, media types, etc.&amp;nbsp;&amp;nbsp; It's also just cleaner&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(e.g.: we'll be able to get rid of a lot of&amp;nbsp; svn:ignore tags).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As for build speed, one javac is faster than n, and only ever builds&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;exactly what's out of date.&amp;nbsp;&amp;nbsp; When you have n projects, you've got&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to be a lot more careful, and even then people tend to throw in a&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;"clean" operation because they get scared.&amp;nbsp;&amp;nbsp; As soon as you do that,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you're rebuilding way more than you really need to;&amp;nbsp; if you fail to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do that when things are slightly wrong in the dependencies&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(which is easy to do), then you waste time in a different way…&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;which is no fun either.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Essentially, as soon as you break things up into multiple projects,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you take ownership of hand-crafting dependencies rather than just&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;letting the compiler do its job.&amp;nbsp;&amp;nbsp;&amp;nbsp; It's bad for exactly the same reasons&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;recursive make is bad.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;How these compiled classes are *packaged* however, is a totally&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;orthogonal issue, so long as the build framework supports multiple&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;artifacts per project.&amp;nbsp;&amp;nbsp; In&amp;nbsp; Maven I, that was an issue, but I don't &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;know what the deal is with Maven II.&amp;nbsp;&amp;nbsp; Some stuff needs to go&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;into&amp;nbsp; server/lib while other stuff needs to be in common/lib, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;so this actually is a hard requirement.&amp;nbsp;&amp;nbsp; I don't want to be forced&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;into a different project&amp;nbsp; / javac invocation just because the build&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;framework thinks it knows better and refuses to generate multiple&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;artifacts in one project.&amp;nbsp;&amp;nbsp; If that's the case with Maven II, it's a&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;non-starter in my view.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Again, this isn't something we've had a chance to discuss a lot&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;internally, so I'm not summarizing a collectively held viewpoint,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nor am I even expressing misgivings regarding Maven II. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;For all I know right now, I'd love it.&amp;nbsp;&amp;nbsp; That said, this is at least&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;part of the checklist I'll use when I get around to forming my&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;own opinion on the topic.&amp;nbsp;&amp;nbsp; I'm sure there will be other stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;too, such as learning curve, interop with tools, how others&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in the community &amp;amp; engineering feel about it all, and so forth.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Well, you asked for my opinion, and all you got was my meta-opinion!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope to do better than that soon.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; -Jon&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Jul 2007 03:50:16 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87055#M58924</guid>
      <dc:creator>jcox</dc:creator>
      <dc:date>2007-07-22T03:50:16Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87056#M58925</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I've started a wiki page concerning issues with the current build and other requirements we would like to consider moving forward.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please feel free to add your own requirements, thoughts etc.&amp;nbsp; I only ask that you try and organize your thoughts along with eveyone elses.&amp;nbsp; The page doesn't have much structure yet but I think we will see some very soon.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://wiki.alfresco.com/wiki/Build_Harness_Requirements" rel="nofollow noopener noreferrer"&gt;http://wiki.alfresco.com/wiki/Build_Harness_Requirements&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Jul 2007 04:07:02 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87056#M58925</guid>
      <dc:creator>rdanner</dc:creator>
      <dc:date>2007-07-22T04:07:02Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87057#M58926</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;The inter-project dependencies are a needless pain in the neck&lt;BR /&gt;for developers.&amp;nbsp;&amp;nbsp; It ends up forcing certain things to live in&lt;BR /&gt;places because of when they're built, rather than what would&lt;BR /&gt;be the ideal logical organization.&amp;nbsp; In at few cases, it forces&lt;BR /&gt;us to do lazy-init within spring…etc.&amp;nbsp;&amp;nbsp; Cruft like this only gets worse&lt;BR /&gt;over time, so I'd like us to fix now while it's still relatively easy.&lt;BR /&gt;This is a developer's perspective, not a user's… but that matters too! &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;The comments on the build dependencies are really interesting for me and I am going to give them a lot of thought. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've always liked the idea of keeping things in separate projects and using maven to include what needs to be included.&amp;nbsp; I tend to think of it as a virtue that each piece only gets compiled with what it needs and what it needs is either declared or missing (in the POM file)&amp;nbsp; in which case [need not declared] an explosion will occur.&amp;nbsp; The pom file is a sort of documentation on the cohesion of the code. I also like the fact that you can enforce certain layering and strict use of APIs across libraries (check for cohesion with implementation) by breaking things in to sub projects and declaring dependencies. I haven't fretted much that I am taking some of the dependency management off the shoulders of javac but then, I've never worried too much about build time – which can become an issue if you have to rebuild and you freak and run a clean – and some of the symptoms you mention (like clean) are actualities.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Really good stuff Jon.&amp;nbsp; I have a lot to think about here because what you are saying is very much different then what I am currently doing. We have a lot of small projects linked together by dummy pom files and Maven is responsible for determining the build order. I always like having to come from a completely different direction and examine how we are doing things.&amp;nbsp; One of the reasons I though Maven would be a natural fit for Alfresco was the fact that Alfresco is currently split up in a similar fashion.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So if I get what you are saying: you would like packages to be atomic so that they can be individually built and deployed as a patch, but that the whole project can also be built in one javac.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ItÃ¢â‚¬â„¢s interesting because really never thought of Alfresco as a single project.&amp;nbsp; I think of the core and repository as very different from the web client for example and IÃ¢â‚¬â„¢ve always thought those lines would deepen with time. Now, again that is a bit of deployment versus source tree talk, and they are not the same thing so again, I may have to go rethink.&amp;nbsp; I am stuck in that mind set because I do break my libraries up as separate projects and I build my applications as yet separate projects.&amp;nbsp; In most cases the applications have only spring configuration, web configuration and a few domain classes and maven pulls in all the dependencies.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The fact that the Alfresco approach was similar (not the same but not too far off) re-enforced my thought process around that kind of organization.&amp;nbsp;&amp;nbsp; IÃ¢â‚¬â„¢ve been aware of at least some of the basic CONS for some time but I have always felt the PROS outweighed them.&amp;nbsp; IÃ¢â‚¬â„¢ll be interested to hear what others throw in on this subject but I really appreciate the thoughts you have put here especially because they are very different from my own on the subject.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Jul 2007 05:06:16 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87057#M58926</guid>
      <dc:creator>rdanner</dc:creator>
      <dc:date>2007-07-22T05:06:16Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87058#M58927</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;I've always liked the idea of keeping things in separate projects&lt;BR /&gt;and using maven to include what needs to be included. I tend to&lt;BR /&gt;think of it as a virtue that each piece only gets compiled with what&lt;BR /&gt;it needs and what it needs&lt;/BLOCKQUOTE&gt;&lt;SPAN&gt;I think taking over any of these dependencies just invites brittleness,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;crufty hand-written configs, needless compilations, and/or bad builds.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;As for enforcing proper layering,&amp;nbsp; public/protected/package APIs&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;already handle this;&amp;nbsp; a separate package is the wrong mechanism for&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;the job.&amp;nbsp;&amp;nbsp; In short, I want my *compiler* worrying about compilation,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;not me.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding code cohesion, I think that's what my packaging, distribution&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;system, SVN branches, and automatically enforced jar naming&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;conventions should handle, not my compiler.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;So if I get what you are saying: you would like packages to be atomic&lt;BR /&gt;so that they can be individually built and deployed as a patch, but that&lt;BR /&gt;the whole project can also be built in one javac.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Ideally, I'd like the package hierarchy to be mirrored exactly in the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;directory structure, then have one javac compile all my .java files&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;into class files.&amp;nbsp; This means that anything that's out of date gets&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rebuilt, and anything that's not isn't.&amp;nbsp; No build artifact (e.g.: class file)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;should be forced back into the source tree.&amp;nbsp;&amp;nbsp;&amp;nbsp; Then, depending on &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;how I want things packaged up, jar files get created.&amp;nbsp;&amp;nbsp; There are many&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ways this last bit could be done.&amp;nbsp;&amp;nbsp; We could have a set of explicit&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;package-to-jar rules,&amp;nbsp; and/or do jars-of-jars as we see fit via One-JAR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(again keeping these the heck away from the source tree).&amp;nbsp; One nice&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;thing about One-JAR is that we could have neater-looking installs&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;yet at the same time, clear partitions within the One-JAR if it came&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;time to do patches in the field.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Different projects seem useful when you're integrating work across&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;different organization units, such as when you've got 3rd party plugins.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The benefit there is that if the 3rd party hands you something that&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;won't compile, the core system can forge ahead.&amp;nbsp; However, within an&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;organization, something that breaks the build can be rolled back&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;because you've got SVN history right there.&amp;nbsp;&amp;nbsp; Therefore, if it's&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in the same SVN branch, crippling javac's ability to work out the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dependencies for you by busting things up into different projects&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;represents a substantial maintenance cost for no gain.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hence, a single project with more flexibility on the backend&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;when it comes to packaging (jar/war creation &amp;amp; naming)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;seems better to me than N projects hand-cobbled together &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;with hardcoded glue.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Sleepy now… &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; - Jon&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Jul 2007 06:48:38 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87058#M58927</guid>
      <dc:creator>jcox</dc:creator>
      <dc:date>2007-07-22T06:48:38Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87059#M58928</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;One thing I'd like to gain out Alfresco moving to Maven would be a better SDK.&amp;nbsp; There could be some custom web client architype to get started and unlike the current SDK this should be a proper JEE-Web project in my IDE that's aware of all the JSF-Facets, tags, and so on.&amp;nbsp; As it is now, I open something like SDK CustomJSP and Eclipse (jee-europa) doesn't know it's a web project and there's bunch of errors for all the unknown tags.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The other benefit to replacing the current eclipse based SDK, with Maven&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and architypes, is that it'd work in Eclipse (and derivatives like Red Hat Developer Studio), Netbeans, and IntelliJ as a JEE-Web-JSF project.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(Last I checked importing an Eclipse Web project in Netbeans didn't work, only basic Java projects)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I also I thought I'd mention this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://ancientprogramming.blogspot.com/2007/08/badly-packaged-project-will-break.html" rel="nofollow noopener noreferrer"&gt;http://ancientprogramming.blogspot.com/2007/08/badly-packaged-project-will-break.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;upshot: create one distro rather than two like Spring and choose your group name carefully and don't change it.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Aug 2007 21:57:36 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87059#M58928</guid>
      <dc:creator>stk137</dc:creator>
      <dc:date>2007-08-15T21:57:36Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87060#M58929</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Good day,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'd just like to share my experiences with Maven2.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven2 offers convention over configuration. Meaning most of the defaults in Maven2 are what the community behind it considers to be the "best practices". &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;LI&gt;Remove all .classpath issues in Eclipse for good&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;This is actually more of a source code management issue rather than a build issue ( not unless your build depends on the .classpath ). In terms of Maven2, it does not depend upon the .classpath files. Furthermore, it can generate the .classpath files of your maven project based from your pom.xml ( which is the 'description' of your maven project ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;LI&gt;Make the source tree reflect the java package organization&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Part of convention-over-configuration: This is the default of Maven2 &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;( To give you a better of how Maven2 does its compilation, in the background, what Maven2 actually does is calling your javac command and supplying the parameters for it )&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;LI&gt;Default: one jar per java package; build others as-needed.&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;The default of Maven2 outputs one jar ( or binary ) per Maven project. If you have several java packages in one Maven Project, then all of those would be assembled into one binary. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So if you want one jar per java package, you'd have to create one maven project per java package ( though you can use the assembly plugin to create several binaries in one maven project, for this use case, i prefer one maven project per java package ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Btw, what is the rationality for this? Although it's nice to componentizes your project, Im not a fan of over-componentizing of projects. IMHO, it makes things harder to read. Personally, I prefer if you break down things into smaller components only when needed ( i.e. when it becomes too big ). At least if you have to "hot patch" several java packages, users will only see it as "hot patch"'ing one component.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;LI&gt;All build output can be configured to go outside the source tree&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Part of the convention-over-configuration, by default, Maven2 will output the build in a directory separate from your source. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;( Furthermore, you can install the built artifacts in your local repository or deploy them in some remote repository, so that other projects depending on them will not have to rebuild them ). &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;LI&gt;Make Javadoc build better docs &amp;amp; overall indices w/o special tweaking&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven2 can generate javadocs for individual projects ( w/ proper indices ), but there was a bug before that it was not aggregating the javadocs of several maven projects. I'm not sure if this is fixed right now. Haven't tried it again.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;LI&gt;I.m.p.r.o.v.e build speed&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven2 does not actually specialize in build speed, but IMHO, it's not significantly slower either ( assuming all the required binaries are already in your local repository ), not unless your project is gigantic! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As for building the 'root' maven project - it can be slow. But you don't usually do that anyway. Furthermore, if you want to build the whole thing to make sure nothing breaks, you can use a Continuous Integration for that ( i.e. Continuum ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;LI&gt;Allow builds to occur directly from read-only source archive&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Part of the convention-over-configuration, Maven2 does not overwrite your source by default ( or at least most of the plugins i've encountered anyway ). &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you have to modify the source files during the build process, what Maven2 does is that it first reads your source files, does the necessary changes, then outputs the modified sources in the build output ( and automatically updates Maven2 to look at those modified sources instead ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;This could be done by reorganizing the code within Ant so that all the java&lt;BR /&gt;code is in a single project. Essentially, I think this is just the next logical&lt;BR /&gt;step along a path&amp;nbsp; begun when we got rid of recursive ant calls in our&lt;BR /&gt;build;&amp;nbsp;&amp;nbsp; we're&amp;nbsp; letting javac do its job in sorting out dependencies rather&lt;BR /&gt;than&amp;nbsp; hard-coding them ourselves (in 2 places).&amp;nbsp;&amp;nbsp; I dont' know how easy&lt;BR /&gt;or hard that is to do in Maven II compared to Ant.&lt;BR /&gt;Does somebody care to jump in here?&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;By default, Maven2 just javac's the java files in the current maven project. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But if your problem is recursive calls to build the dependencies, Maven2 has a solution for that.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven2 does not need to call javac on its dependencies. It will just look for its dependencies' binaries ( from the remote repositories &amp;amp; your local repository ), and include those in its classpath. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note however that Maven2 cannot resolve cyclic dependencies ( 'A' depends on 'B', 'B' depends on 'A' ). But then again, if you have a cyclic dependency, then maybe there's something wrong with the componentization.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;There are always funny corner-cases when it comes to building&lt;BR /&gt;non-trivial programs so I thought it might be nice to think about&lt;BR /&gt;it collectively. The one real technical issue I can see up-front with&lt;BR /&gt;this is the following:&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Package&amp;nbsp; org.alfreco.foobar&amp;nbsp; has classes a, b, c, and d.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Classes a &amp;amp; b are in project ab, and go into ab.jar, while&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; classes c &amp;amp; d are in project cd, and go into cd.jar.&amp;nbsp; Due &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; to some security/classloader/bundling reason, ab.jar and&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cd.jar must reside in different locations.&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;In Maven2, you can simply create two maven projects - one for ab, and another of cd. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And if there's cyclic dependency between the two, then you can probably take the 'cyclic parts' and create a foobar-commons project.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;There are probably a bunch of other issues I'm not considering at all, so &lt;BR /&gt;if you can think of anything big offhand, it would be nice to hear about.&lt;BR /&gt;My guess is that the pros strongly outweigh the cons, but that could&lt;BR /&gt;certainly change if someone thinks of a&amp;nbsp; show-stopper.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;I am not sure if I've addressed all your concerns here. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;May I ask for clarifications from your listed concerns ( i.e the problem being addressed by those solutions ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Franz&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 16 Sep 2007 07:16:13 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87060#M58929</guid>
      <dc:creator>franz_see</dc:creator>
      <dc:date>2007-09-16T07:16:13Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87061#M58930</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;The inter-project dependencies are a needless pain in the neck&lt;BR /&gt;for developers.&amp;nbsp;&amp;nbsp; It ends up forcing certain things to live in&lt;BR /&gt;places because of when they're built, rather than what would&lt;BR /&gt;be the ideal logical organization.&amp;nbsp; In at few cases, it forces&lt;BR /&gt;us to do lazy-init within spring…etc.&amp;nbsp;&amp;nbsp; Cruft like this only gets worse&lt;BR /&gt;over time, so I'd like us to fix now while it's still relatively easy.&lt;BR /&gt;This is a developer's perspective, not a user's… but that matters too! &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;In Maven2, it does require the dependencies to live in certain places - remote repositories and local repository. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Pardon, I'm not familiar with your lazy-init examples &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;It's not just about the packaging. Structuring things so that one big &lt;BR /&gt;javac can see everything at once means perfect build dependencies&lt;BR /&gt;with 0 effort forever.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;True, but for our price. If I would to load your source in my IDE, I would be overwhelmed by the number of files that I have to browse, as opposed to looking at the available components, openning that in my IDE, and searching in that component only.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Furthermore, if somebody would to use a part of your code, they would have to use the whole alfresco binary ( when they only need a part of it ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Otherwise we're right back to:&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;class X needs to be built before Y, but it needs class P&lt;BR /&gt;which must be put in location Q but then that generates a circular&lt;BR /&gt;dependency that Ant can handle but Eclipse can't… unless you&lt;BR /&gt;sprinkle lazy inits here and there in various spring config files…&lt;BR /&gt;and then muck around with .classpath files used by the continuous&lt;BR /&gt;builds done by IDEs such as Eclipse… and… and….&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;In Maven2, you don't have to be rebuild everything. Once you've built it and installed in your local repository ( deployed in some remote repository ), Maven2 will just pick it up without rebuilding it. So you can build X once, then when you're working on Y, you can just rebuild Y ( even if X is cleaned ). &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, locations of the binary is ( usually ) not a problem in Maven2, because by default, all binaries should be available in your local repository or in the remote repositories. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Furthermore, if you would need a binary to be in a specific location, the usual practice is to depend on that binary, and extract it ( from my experience, binaries that need to be in a specific location are usally extracted ) in your current build output directory.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And as for cyclic dependency among the components, Maven2 usually tries to avoid that.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Ugh. The picture I'm painting isn't that bad yet, but it's always there,&lt;BR /&gt;gnawing, gnawing, gnawing….&lt;BR /&gt;&lt;BR /&gt;Regarding your concern about many jar files,&amp;nbsp; you can actually&lt;BR /&gt;compose jars, so there can actually be *fewer* of them in the&lt;BR /&gt;final product regardless of the intermediate jars you choose to&lt;BR /&gt;create (or not).&amp;nbsp;&amp;nbsp; If we go the many-smaller-jars route in the&lt;BR /&gt;final product, then the way of handling compatability is via&lt;BR /&gt;a major/minor numbering scheme.&amp;nbsp;&amp;nbsp; Tried and true.&amp;nbsp; The existence&lt;BR /&gt;proof:&amp;nbsp; UNIX libs&amp;nbsp;&amp;nbsp; (kudos to Sun for getting it right).&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;This can also be done in Maven2 ( i.e assembly plugin, uber jar )&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Check out One-JAR:&lt;BR /&gt;&lt;A href="http://www.ibm.com/developerworks/library/j-onejar/index.html?ca=drs-j4904" rel="nofollow noopener noreferrer"&gt;http://www.ibm.com/developerworks/library/j-onejar/index.html?ca=drs-j4904&lt;/A&gt;&lt;BR /&gt;As far as I'm concerned, everything is on the table.&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&amp;gt; Make the source tree reflect the java package organization&lt;BR /&gt;This is independent of the build harness correct?&lt;/BLOCKQUOTE&gt;It depends on the underlying capabilities of that harness.&lt;BR /&gt;For example,&amp;nbsp; the way we're using Ant currently, source code &lt;BR /&gt;that belongs to the same package cannot live in the same directory,&lt;BR /&gt;due to build dependency issues.&amp;nbsp; That's not a fundamental problem&lt;BR /&gt;with Ant, but rather with our current use of Ant.&amp;nbsp;&amp;nbsp; It's my understanding&lt;BR /&gt;that Maven II lets you do things at a higher level than Ant, but sometimes&lt;BR /&gt;that can mean loss of lower-level control.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;True, it does let you do things at a 'higher-level' for some 'lower-level control'. But the cost is usually not a problem since those 'higher level' stuffs are "best practices".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Moreoever, you can use ant tasks in Maven2 if you're stuck &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;For example, some tools force you to build things a certain way,&lt;BR /&gt;and if your goals and their model are badly matched, the tool gets&lt;BR /&gt;in the way).&amp;nbsp;&amp;nbsp;&amp;nbsp; I'm not saying that's the case with Maven II,&lt;BR /&gt;but I don't know for sure that it's not either… yet.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm not sure as well what problems alfresco may face in migrating to Maven2.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Being able to build from a read-only source is great.&lt;BR /&gt;It adds a lot of flexibility to the system in terms of &lt;BR /&gt;permissions, media types, etc.&amp;nbsp;&amp;nbsp; It's also just cleaner&lt;BR /&gt;(e.g.: we'll be able to get rid of a lot of&amp;nbsp; svn:ignore tags).&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven2 can handle that ( as I've explained in my previous post ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;As for build speed, one javac is faster than n, and only ever builds&lt;BR /&gt;exactly what's out of date.&amp;nbsp;&amp;nbsp; When you have n projects, you've got&lt;BR /&gt;to be a lot more careful, and even then people tend to throw in a&lt;BR /&gt;"clean" operation because they get scared.&amp;nbsp;&amp;nbsp; As soon as you do that,&lt;BR /&gt;you're rebuilding way more than you really need to;&amp;nbsp; if you fail to&lt;BR /&gt;do that when things are slightly wrong in the dependencies&lt;BR /&gt;(which is easy to do), then you waste time in a different way…&lt;BR /&gt;which is no fun either.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven2 only builds the current maven project it is working on ( and not its dependencies ). As to checking whether the changes you've done in one component would break the whole thing, you can use a Continuous Integration ( i.e Continuum ) to run every now and then and build everything. And if you're components are lously copuled from each other, you would reduce the risk of breaking the whole thing when you change one part.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Essentially, as soon as you break things up into multiple projects,&lt;BR /&gt;you take ownership of hand-crafting dependencies rather than just&lt;BR /&gt;letting the compiler do its job.&amp;nbsp;&amp;nbsp;&amp;nbsp; It's bad for exactly the same reasons&lt;BR /&gt;recursive make is bad.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;That's usually not a problem ( I don't think I've encountered any serious compilation issues due to breaking things down into smaller projects). &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Furthermore, it's easier to debug several small things instead of one big thing ( debugging - this I usually do, and because the group of sources that I look at is smaller, I've immediately isolated the problem to a smaller segment ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;How these compiled classes are *packaged* however, is a totally&lt;BR /&gt;orthogonal issue, so long as the build framework supports multiple&lt;BR /&gt;artifacts per project.&amp;nbsp;&amp;nbsp; In&amp;nbsp; Maven I, that was an issue, but I don't &lt;BR /&gt;know what the deal is with Maven II.&amp;nbsp;&amp;nbsp; Some stuff needs to go&lt;BR /&gt;into&amp;nbsp; server/lib while other stuff needs to be in common/lib, &lt;BR /&gt;so this actually is a hard requirement.&amp;nbsp;&amp;nbsp; I don't want to be forced&lt;BR /&gt;into a different project&amp;nbsp; / javac invocation just because the build&lt;BR /&gt;framework thinks it knows better and refuses to generate multiple&lt;BR /&gt;artifacts in one project.&amp;nbsp;&amp;nbsp; If that's the case with Maven II, it's a&lt;BR /&gt;non-starter in my view.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;By default, Maven2 outputs one package per project. As for configuring the setup of binaries into specific location, that's usually handled by the specific plugin ( maven-war-plugin for wars, maven-ear-plugin for ear's, etc). And if all else fails, you can use ant tasks to fix Maven2's mess &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Again, this isn't something we've had a chance to discuss a lot&lt;BR /&gt;internally, so I'm not summarizing a collectively held viewpoint,&lt;BR /&gt;nor am I even expressing misgivings regarding Maven II. &lt;BR /&gt;For all I know right now, I'd love it.&amp;nbsp;&amp;nbsp; That said, this is at least&lt;BR /&gt;part of the checklist I'll use when I get around to forming my&lt;BR /&gt;own opinion on the topic.&amp;nbsp;&amp;nbsp; I'm sure there will be other stuff&lt;BR /&gt;too, such as learning curve, interop with tools, how others&lt;BR /&gt;in the community &amp;amp; engineering feel about it all, and so forth.&lt;BR /&gt;&lt;BR /&gt;Well, you asked for my opinion, and all you got was my meta-opinion!&lt;BR /&gt;I hope to do better than that soon.&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; Cheers,&lt;BR /&gt;&amp;nbsp; -Jon&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;I am not sure as well whether Maven2 would be best for your use case since I am not familiar with your build.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Franz&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 16 Sep 2007 07:58:48 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87061#M58930</guid>
      <dc:creator>franz_see</dc:creator>
      <dc:date>2007-09-16T07:58:48Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87062#M58931</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi all, a bit delayed but wanted to leave my 2 cents on this *very interesting* topic. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I believe that independently from the technology that is used, which hardly depends upon the context you plan to adopt and deploy Alfresco in, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;using Maven2 can be far more useful in structured enterprise environments where some of the mentioned requirements (strict dependency management and versioning or releasing policies / ownerships) which Ant is certainly the low key entry point for a test drive / evaluation or for very simple customizations for which maven would be overkill.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ATM, as no real news have happened in one year on the Alfresco side on the mavenization of the Alfresco sources,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;we proceeded (in Sourcesense, &lt;/SPAN&gt;&lt;A href="http://www.sourcesense.com" rel="nofollow noopener noreferrer"&gt;http://www.sourcesense.com&lt;/A&gt;&lt;SPAN&gt;, alfresco partner) in using maven to build and customize Alfresco at our clients, typically big and potentially intricate enterprise environments.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;To be clear: we use maven ATM to build alfresco extensions (in the future also AMP should be supported) and that does not mandatorily mean that Alfresco itself should build with maven, even if how it works now (basically a maven-webapp-archetype with a war dependency on the alfresco war) is not completely neat as it flattens the whole transitive dependency resolving magic of m2. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The process of improvement of this lifecycle management (more than just build) tool has been later on released on the alfresco forge (&lt;/SPAN&gt;&lt;A href="http://forge.alfresco.com/projects/m2alfresco/" rel="nofollow noopener noreferrer"&gt;http://forge.alfresco.com/projects/m2alfresco/&lt;/A&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;A href="http://repository.sourcesense.com/maven2-sites/maven-alfresco-extension-archetype-1.0.0/" rel="nofollow noopener noreferrer"&gt;http://repository.sourcesense.com/maven2-sites/maven-alfresco-extension-archetype-1.0.0/&lt;/A&gt;&lt;SPAN&gt;) and provides a number of interesting features (like jetty embedded run, clean property filtering management, documentation, jboss/tomcat local/remote deploy, maven release support etc.). &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;For supporting this release, we made alfresco community artifacts (jar and war) available on Sourcesense repositories in order to have a zero conf startup for even junior developers (and to lower the maven learning curve). See &lt;/SPAN&gt;&lt;A href="http://repository.sourcesense.com/maven2/alfresco" rel="nofollow noopener noreferrer"&gt;http://repository.sourcesense.com/maven2/alfresco&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For enterprise customization instead, we happily use internal repositories (Sourcesense or clients') with the same approach.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;About my 2 cents, it would be much better if Alfresco itself releases its artifacts on m2 repos (thus complete the m10n - mavenization - of source tree) for a number of reasons&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;- standardization of the naming/versioning&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- easy startup&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- Alfresco declares itself a ECM systems, as we know 'E' stands for "enterprise", and as we all (sadly) know "enterprise" stands for processes, release policies, bureaucracy, ownerships, lifecycle, development vs. maintenance. A m2 structured approach will ease to me integration in highly complex environments (and with many enterprise applications) in which is not just a matter of "taking and xml file, dropping it in the shared folder, and restart the server" , because it's *simply* not possible&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- Having an archetype based approach can really gear community development and lower Alfresco "real" learning curve, as it's pretty much easier to have a list of properties to edit more than go-search-crawl-find on the wiki which is the Spring snippet to be modified. This is true for the extension projects (already in the forge) as well as AMP (let's say module build).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- Alfresco grows faster and faster, to me it's the moment (especially with the 3.0 release) to provide a real neat basis for the even greater growth alfresco expects from the great improvements they are doing: Apache maven is basis for most open source projects, and even tough and complex frameworks (e.g. Apache Cocoon) have completed (not without hassles) the m10n process, towards a more integrated and documented open source vision. The bigger it grows the more difficult will be to do this change and to me it may really make it an outstanding example of "enterprise opensource"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- I don't have to maintain a public m2 repository almost just for Alfresco &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://connect.hyland.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok, now you may think I'm a maven evangelist trying to find useful applications of that technology at all costs &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://connect.hyland.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;On the other hand I believe that (especially being a partner) we should not impose technologies, while adapt the way we work to the open source (typically high) standards of development, and this is a characteristic that sometimes I see missing in Alfresco extension development: in this sense the archetype we've released builds *also* with Apache Ant (see &lt;/SPAN&gt;&lt;A href="http://forge.alfresco.com/forum/forum.php?forum_id=512" rel="nofollow noopener noreferrer"&gt;http://forge.alfresco.com/forum/forum.php?forum_id=512&lt;/A&gt;&lt;SPAN&gt;), exploiting the tidy and standard maven project hierarchy and sharing the same property filtering policies. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Of course all the nice m2 features (like jetty run, jboss and tomcat deploy, release management, etc.) are not supported by this build, but what you just need is to checkout the jar, unzip it, and run ant to have a properly packaged, environment aware alfresco WAR build.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This was more a POC for the feasibility of this double approach, so I'm not planning to maintain the ant part while focusing on the interesting growth perspectives of the m2 part, but it can be useful to provide the double point of access I was mentioning before (enterprise vs. community).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So wrapping up:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I would be (and so my company Sourcesense) to see Alfresco move (and to help/support in this transition) to maven for building its source code, document and release it. But I understand it's a complex and risky process (but risks can be lowered supporting a bottom line Ant based build which provides continuity with current developments). &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So ATM I'd love to have some feedback on the possibility of building extension (and AMP in a while) using archetypes / prototype based approach (even before an Alfresco official move to maven) and hopefully some contributions to the project.&amp;nbsp; I think that it's vitally important to have a (still agile but) sort of a process when developing and releasing and application.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;That's especially true/valuable for a partner but I think that will especially gear the professional open source community interest in Alfresco. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope this helps,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Gab&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PS: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;For some additional references on the maven topic you may be interested in (sorry for the spamming &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://connect.hyland.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt; :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Library conventions - &lt;/SPAN&gt;&lt;A href="http://forums.alfresco.com/viewtopic.php?f=10&amp;amp;t=1017&amp;amp;p=39172#p39172" rel="nofollow noopener noreferrer"&gt;http://forums.alfresco.com/viewtopic.php?f=10&amp;amp;t=1017&amp;amp;p=39172#p39172&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven repositories - &lt;/SPAN&gt;&lt;A href="http://forums.alfresco.com/viewtopic.php?f=12&amp;amp;t=10210&amp;amp;p=39175#p39175" rel="nofollow noopener noreferrer"&gt;http://forums.alfresco.com/viewtopic.php?f=12&amp;amp;t=10210&amp;amp;p=39175#p39175&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;Running outside a container - &lt;/SPAN&gt;&lt;A href="http://forums.alfresco.com/viewtopic.php?f=4&amp;amp;t=9317&amp;amp;p=39176#p39176" rel="nofollow noopener noreferrer"&gt;http://forums.alfresco.com/viewtopic.php?f=4&amp;amp;t=9317&amp;amp;p=39176#p39176&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;Maven4alfresco - &lt;/SPAN&gt;&lt;A href="http://forums.alfresco.com/viewtopic.php?f=32&amp;amp;t=9268&amp;amp;p=39179#p39179" rel="nofollow noopener noreferrer"&gt;http://forums.alfresco.com/viewtopic.php?f=32&amp;amp;t=9268&amp;amp;p=39179#p39179&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 Apr 2008 18:37:17 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87062#M58931</guid>
      <dc:creator>mindthegab</dc:creator>
      <dc:date>2008-04-07T18:37:17Z</dc:date>
    </item>
    <item>
      <title>Re: Maven2 Build for Alfresco</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87063#M58932</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;On step forward here;: Following yesterday's announcement of the official Alfresco Artifact Repository (&lt;/SPAN&gt;&lt;A href="http://blogs.alfresco.com/wp/its-official-alfresco-artifacts-repository/" rel="nofollow noopener noreferrer"&gt;http://blogs.alfresco.com/wp/its-official-alfresco-artifacts-repository/&lt;/A&gt;&lt;SPAN&gt;), wehave Alfresco Community and Enterprise artifacts are hosted at &lt;/SPAN&gt;&lt;A href="http://artifacts.alfresco.com" rel="nofollow noopener noreferrer"&gt;http://artifacts.alfresco.com&lt;/A&gt;&lt;SPAN&gt; .&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please check:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://wiki.alfresco.com/wiki/Alfresco_Artifacts_Repository" rel="nofollow noopener noreferrer"&gt;https://wiki.alfresco.com/wiki/Alfresco_Artifacts_Repository&lt;/A&gt;&lt;BR /&gt;&lt;A href="http://mindthegab.com/2012/06/05/introducing-the-alfresco-artifacts-repository-yes-with-alfresco-enterprise/" rel="nofollow noopener noreferrer"&gt;http://mindthegab.com/2012/06/05/introducing-the-alfresco-artifacts-repository-yes-with-alfresco-enterprise/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;On the building with Maven topic follow:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://issues.alfresco.com/jira/browse/ALF-14390" rel="nofollow noopener noreferrer"&gt;https://issues.alfresco.com/jira/browse/ALF-14390&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Jun 2012 08:24:49 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/maven2-build-for-alfresco/m-p/87063#M58932</guid>
      <dc:creator>mindthegab</dc:creator>
      <dc:date>2012-06-06T08:24:49Z</dc:date>
    </item>
  </channel>
</rss>

