I have been hoping to put up mechanism for (easier) deployment of m2 artifacts to maven repositories (both Apache snapshot repository and the main maven repository at ibiblio).
The most convenient way would be to use maven2 to build the various lucene projects but as the mailing list conversation about this subject indicates there is no common interest for changing the (working) ant based build system to a maven based. The next best thing IMO would be using ant build as normally for the non maven2 releases and use maven2 for building the maven releases (.jar files, optionally also packages for sources used to build the binary and packages for javadocs) with related check sums and signatures. To repeat it one more time: what I am proposing here is not meant to replace the current solid way of building the various Lucene projects - I am just trying to provide a convenient way to make the release artifacts to be deployed to maven repositories. I have put together an initial set of poms (for lucene-java) to do this quite easily, basically what is required is installation of maven2 binaries and the set of pom files and a checkout of the lucene version to build. The various jars are build, packaged, check summed, signed and optionally deployed with single mvn command. So IMO it is quite easy thing to do in addition to normal release process. I can also, for undefined time, volunteer to do these builds if it is too much of burden for RMs. There are however couple of things I need your opinion about (or at least attention): 1. There are differencies when comparing to ant build jars (due to release policy of a.o) the built jars will contain LICENSE.txt, NOTICE.txt in /META-INF. Is this a problem? 2. I propose that we add additional folder level so the groupId for lucene java would be org.apache.lucene.java (it is now org.apache.lucene within the currently released artifacts). The initial list of artifacts (the new proposed structure) is listed below: groupId:org.apache.lucene lucene-parent (pom) (a top level pom defining lucene wide stuff that gets inherited to sub project modules) groupId:org.apache.lucene.java java-parent (pom) lucene-core (jar) lucene-demos (jar) contrib-parent (pom) lucene-analyzers (jar) lucene-benchmark (jar) lucene-highlighter(jar) lucene-misc (jar) lucene-queries (jar) lucene-regex (jar) lucene-snowball (jar) lucene-spellchecker(jar) lucene-surround (jar) lucene-swing (jar) lucene-wordnet (jar) lucene-xml-query-parser (jar) groupId:org.apache.lucene.nutch (TODO) nutch-parent (pom) nutch-core (jar) nutch-plugins (pom) nutch-plugin-x (jar) (as soon as nutch plugins can be of format .jar) ... groupId:org.apache.lucene.hadoop (TODO) hadoop-parent (pom) hadoop-core (jar) hadoop-streaming (jar) ... groupId:org.apache.lucene.solr (TODO) solr-parent (pom) solr-core (jar) ... 3. Where to put poms? They need to be put somewhere. I think it's not smart at this point pollute the ant driven folder structure with poms - they are better of in separate dir structure. What is (in your opinion) the most convenient place for them? I would propose that every sub project would have dir named maven (or something similar) that would contain poms for that particular sub project. Other possibility would be putting a lucene level dir for maven stuff and the poms would be maintained there. The text above was my initial thought about this, however there have been concerns that the procedure described here might not be most optimal one. So far the arguments have been the following: 1. Two build systems to maintain True. However I don't quite see that so black and white: You would anyway need to maintain the poms manually (if you care about the quality of poms) or you would have to build some mechanism to build those. Of course in situation where you would not actually build with maven the poms could be a bit more simple. 2. Two build systems producing different jars, would maven2 releases require a separate vote? Yes the artifacts (jars) would be different, because you would need to add LICENSE and MANIFEST into them (because of apache policy). I don't know about the vote, how do other projects deal with this kind of situation, anyone here to tell? One solution to jar mismatch would be changing the ant build to put those files in produced jars. 3. Additional burden for RM, need to run additional command, install maven There will be that external step for doing the maven release and you need to install maven also. But compared to current situation where you would have to extract jars, put some more files into them, sign them, modify poms to reflect correct version numbers, upload them to repositories manually. The other way to do is would be changing the current build system to be more maven friendly. This would probably mean following things: -add poms for artifacts into svn repository (where?) -adding LICENSE and NOTICE into jars. -add ant target to -sign jars -push artifacts into staging dir or to repository (or leave it as additional manual step) -optionally build javadoc jars (if currently not done) -optionally build source jars (if currently not done) Are there any technical arguments in favour or against the proposed solutions or is there perhaps one that outperforms them both. Please share your thoughts about all this :) -- Sami Siren