Attached, for the record only, is the diff I used to stage the artifacts for publishing to Central.
Note that this diff is not ready for application to the code base. I am still working on some things. Specifically it looks like I may have to push a new release of maven-ant-tasks as I think I found a NPE in generating a pom with a parent pom. (And I want to use a parent pom so that we don't have dependency version details scattered all over the build.xml) -Stephen On 26 January 2011 11:43, Stephen Connolly <stephen.alan.conno...@gmail.com> wrote: > Artifacts staged at > > https://repository.apache.org/content/repositories/orgapachecassandra-080/ > https://repository.apache.org/content/repositories/orgapachecassandra-081/ > > -Stephen > > On 25 January 2011 23:00, Stephen Connolly > <stephen.alan.conno...@gmail.com> wrote: >> I'll stage artifacts in central tomorrow AM GMT >> >> On 25 January 2011 23:01, Eric Evans <eev...@rackspace.com> wrote: >>> >>> Shall we? I propose the following artifacts for release as 0.7.1. >>> >>> SVN: >>> https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@r1063491 >>> 0.7.1 artifacts: http://people.apache.org/~eevans >>> >>> The will remain open for 72 hours, (longer if need be). >>> >>> >>> [1]: http://goo.gl/4cJkq (CHANGES.txt) >>> [2]: http://goo.gl/SBGPA (NEWS.txt) >>> >>> -- >>> Eric Evans >>> eev...@rackspace.com >>> >>> >> >
Index: build.xml =================================================================== --- build.xml (revision 1063491) +++ build.xml (working copy) @@ -59,6 +59,10 @@ <property name="maven-ant-tasks.version" value="2.1.1" /> <property name="maven-ant-tasks.url" value="http://repo2.maven.org/maven2/org/apache/maven/maven-ant-tasks" /> + <!-- details of how and which Maven repository we publish to --> + <property name="maven.version" value="2.2.1" /> + <property name="maven-repository-url" value="https://repository.apache.org/service/local/staging/deploy/maven2" /> + <property name="maven-repository-id" value="apache.releases.https" /> <!-- http://cobertura.sourceforge.net/ --> <property name="cobertura.build.dir" value="${build.dir}/cobertura"/> @@ -221,6 +225,24 @@ </copy> </target> + <macrodef name="deploy"> + <attribute name="pomFile"/> + <attribute name="file"/> + <attribute name="classifier" default=""/> + <attribute name="packaging" default="jar"/> + <sequential> + <artifact:mvn mavenVersion="${maven.version}" fork="true"> + <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file" /> + <arg value="-Durl=${maven-repository-url}" /> + <arg value="-DrepositoryId=${maven-repository-id}" /> + <arg value="-DpomFile=@{pomFile}" /> + <arg value="-Dfile=@{file}" /> + <arg value="-Dclassifier=@{classifier}" /> + <arg value="-Dpackaging=@{packaging}" /> + </artifact:mvn> + </sequential> + </macrodef> + <!-- Generate avro code --> @@ -362,6 +384,133 @@ </jar> </target> + <!-- + The javadoc-jar target makes cassandra-javadoc.jar output required for publishing to Maven central repository. + --> + <target name="javadoc-jar" depends="javadoc" description="Assemble Cassandra JavaDoc JAR file"> + <jar jarfile="${build.dir}/${final.name}-javadoc.jar" + basedir="${javadoc.dir}"/> + </target> + + <!-- + The sources-jar target makes cassandra-sources.jar output required for publishing to Maven central repository. + --> + <target name="sources-jar" depends="init,avro-generate" description="Assemble Cassandra Sources JAR file"> + <jar jarfile="${build.dir}/${final.name}-sources.jar"> + <fileset dir="${build.src.java}" defaultexcludes="yes"> + <include name="org/apache/**/*.java"/> + </fileset> + <fileset dir="${interface.thrift.gen-java}" defaultexcludes="yes"> + <include name="org/apache/**/*.java"/> + </fileset> + <fileset dir="${interface.avro.dir}" defaultexcludes="yes"> + <include name="org/apache/**/*.java"/> + </fileset> + </jar> + </target> + + <target name="scm-info" description="Determines the current Subversion URL with peg revision"> + <exec executable="svn" dir="${basedir}" output="${build.dir}/svn-info.xml"> + <arg line="info --xml"/> + </exec> + <xmlproperty file="${build.dir}/svn-info.xml" collapseAttributes="true" prefix="svn" keepRoot="false"/> + <echo file="${build.dir}/scm.properties"> +connection=scm:svn:${svn.entry.url}@${svn.entry.commit.revision} +developerConnection=scm:svn:${svn.entry.url}@${svn.entry.commit.revision} +url=${svn.entry.url}?pathrev=${svn.entry.commit.revision} + </echo> + <replace file="${build.dir}/scm.properties"> + <replacefilter token="connection=scm:svn:https:" value="connection=scm:svn:http:"/> + <replacefilter token="Connection=scm:svn:http:" value="Connection=scm:svn:https:"/> + <replacefilter token="url=${svn.entry.repository.root}" value="url=http://svn.apache.org/viewvc"/> + </replace> + <property file="${build.dir}/scm.properties" prefix="scm"/> + </target> + + <target name="all-pom" depends="init,maven-ant-tasks-init,scm-info" description="Create Maven POM file"> + <artifact:pom id="all-pom" + groupId="org.apache.cassandra" + artifactId="cassandra-all" + version="${version}" + url="http://cassandra.apache.org" + name="Apache Cassandra" + inceptionYear="2009" + description="The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model."> + <license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt"/> + <scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/> + <dependency groupId="com.google.guava" artifactId="guava" version="r05"/> + <dependency groupId="commons-cli" artifactId="commons-cli" version="1.1"/> + <dependency groupId="commons-codec" artifactId="commons-codec" version="1.2"/> + <dependency groupId="commons-collections" artifactId="commons-collections" version="3.2.1"/> + <dependency groupId="commons-lang" artifactId="commons-lang" version="2.4"/> + <dependency groupId="com.googlecode.concurrentlinkedhashmap" artifactId="concurrentlinkedhashmap-lru" version="1.1"/> + <dependency groupId="org.mortbay.jetty" artifactId="jetty" version="6.1.21"/> + <dependency groupId="org.mortbay.jetty" artifactId="jetty-util" version="6.1.21"/> + <dependency groupId="org.antlr" artifactId="antlr" version="3.1.3"/> + <dependency groupId="org.slf4j" artifactId="slf4j-api" version="1.6.1"/> + <dependency groupId="org.slf4j" artifactId="slf4j-log4j12" version="1.6.1" scope="provided"/> + <dependency groupId="org.codehaus.jackson" artifactId="jackson-core-asl" version="1.4.0"/> + <dependency groupId="org.codehaus.jackson" artifactId="jackson-mapper-asl" version="1.4.0"/> + <dependency groupId="jline" artifactId="jline" version="0.9.94"> + <exclusion groupId="junit" artifactId="junit"/> + </dependency> + <dependency groupId="com.googlecode.json-simple" artifactId="json-simple" version="1.1"/> + <dependency groupId="com.github.stephenc.high-scale-lib" artifactId="high-scale-lib" version="1.1.1"/> + <dependency groupId="org.yaml" artifactId="snakeyaml" version="1.6"/> + <dependency groupId="org.safehaus.jug" artifactId="jug" version="2.0.0" classifier="asl"/> + <dependency groupId="org.apache.cassandra.deps" artifactId="avro" version="1.4.0-cassandra-1"> + <exclusion groupId="org.jboss.netty" artifactId="netty"/> + <exclusion groupId="com.thoughtworks.paranamer" artifactId="paranamer"/> + <exclusion groupId="com.thoughtworks.paranamer" artifactId="paranamer-ant"/> + <exclusion groupId="org.apache.velocity" artifactId="velocity"/> + </dependency> + <dependency groupId="org.apache.cassandra.deps" artifactId="libthrift" version="0.5.0"/> + <developer id="alakshman" name="Avinash Lakshman"/> + <developer id="antelder" name="Anthony Elder"/> + <developer id="brandonwilliams" name="Brandon Williams"/> + <developer id="eevans" name="Eric Evans"/> + <developer id="gdusbabek" name="Gary Dusbabek"/> + <developer id="goffinet" name="Chris Goffinet"/> + <developer id="ianh" name="Ian Holsman"/> + <developer id="jaakko" name="Laine Jaakko Olavi"/> + <developer id="jbellis" name="Jonathan Ellis"/> + <developer id="johan" name="Johan Oskarsson"/> + <developer id="junrao" name="Jun Rao"/> + <developer id="mriou" name="Matthieu Riou"/> + <developer id="pmalik" name="Prashant Malik"/> + </artifact:pom> + <artifact:writepom pomRefId="all-pom" file="${build.dir}/${final.name}.pom"/> + </target> + + <target name="dist-pom" depends="init,maven-ant-tasks-init,scm-info" description="Create Maven POM file"> + <artifact:pom id="dist-pom" + groupId="org.apache.cassandra" + artifactId="apache-cassandra" + version="${version}" + packaging="pom" + url="http://cassandra.apache.org" + name="Apache Cassandra" + inceptionYear="2009" + description="The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model."> + <license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt"/> + <scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/> + <developer id="alakshman" name="Avinash Lakshman"/> + <developer id="antelder" name="Anthony Elder"/> + <developer id="brandonwilliams" name="Brandon Williams"/> + <developer id="eevans" name="Eric Evans"/> + <developer id="gdusbabek" name="Gary Dusbabek"/> + <developer id="goffinet" name="Chris Goffinet"/> + <developer id="ianh" name="Ian Holsman"/> + <developer id="jaakko" name="Laine Jaakko Olavi"/> + <developer id="jbellis" name="Jonathan Ellis"/> + <developer id="johan" name="Johan Oskarsson"/> + <developer id="junrao" name="Jun Rao"/> + <developer id="mriou" name="Matthieu Riou"/> + <developer id="pmalik" name="Prashant Malik"/> + </artifact:pom> + <artifact:writepom pomRefId="dist-pom" file="${build.dir}/${final.name}-dist.pom"/> + </target> + <!-- creates release tarballs --> <target name="artifacts" depends="jar,javadoc" description="Create Cassandra release artifacts"> @@ -489,6 +638,33 @@ </rat:report> </target> + <target name="publish" + depends="maven-ant-tasks-init,artifacts,all-pom,dist-pom,jar,sources-jar,javadoc-jar" + description="Publishes the artifacts to the Maven repository"> + <!-- the distribution --> + <deploy pomFile="${build.dir}/${final.name}-dist.pom" + file="${build.dir}/${final.name}-dist.pom" + packaging="pom"/> + <deploy pomFile="${build.dir}/${final.name}-dist.pom" + file="${build.dir}/${final.name}-bin.tar.gz" + packaging="tar.gz" + classifier="bin"/> + <deploy pomFile="${build.dir}/${final.name}-dist.pom" + file="${build.dir}/${final.name}-src.tar.gz" + packaging="tar.gz" + classifier="src"/> + + <!-- the cassandra-all jar --> + <deploy pomFile="${build.dir}/${final.name}.pom" + file="${build.dir}/${final.name}.jar"/> + <deploy pomFile="${build.dir}/${final.name}.pom" + file="${build.dir}/${final.name}-sources.jar" + classifier="sources"/> + <deploy pomFile="${build.dir}/${final.name}.pom" + file="${build.dir}/${final.name}-javadoc.jar" + classifier="javadoc"/> + </target> + <target name="build-test" depends="build" description="Compile test classes"> <javac debug="true" @@ -680,6 +856,10 @@ <fileset dir="${interface.thrift.gen-java}" defaultexcludes="yes"> <include name="org/apache/**/*.java"/> </fileset> + <!-- until avro is removed we should generate it's javadoc also --> + <fileset dir="${interface.avro.dir}" defaultexcludes="yes"> + <include name="org/apache/**/*.java"/> + </fileset> </javadoc> </target> Index: contrib/javautils/build.xml =================================================================== --- contrib/javautils/build.xml (revision 1063491) +++ contrib/javautils/build.xml (working copy) @@ -17,7 +17,8 @@ ~ specific language governing permissions and limitations ~ under the License. --> -<project basedir="." default="build" name="apache-cassandra-javautils"> +<project basedir="." default="build" name="cassandra-javautils" + xmlns:artifact="antlib:org.apache.maven.artifact.ant"> <property name="cassandra.dir" value="../.." /> <property name="cassandra.lib" value="${cassandra.dir}/lib" /> <property name="test.lib" value="${cassandra.dir}/build/lib" /> @@ -27,8 +28,19 @@ <property name="test.reports" value="${basedir}/reports" /> <property name="build.out" value="${basedir}/build" /> <property name="build.classes" value="${build.out}/classes" /> - <property name="final.name" value="cassandra-javautils" /> + <property name="javadoc.dir" value="${build.out}/javadoc"/> + <property name="base.version" value="0.7.1"/> + <condition property="version" value="${base.version}"> + <isset property="release"/> + </condition> + <property name="version" value="${base.version}-SNAPSHOT"/> + <property name="final.name" value="${ant.project.name}-${version}"/> + <property name="mavenanttasks.version" value="2.1.1" /> + <property name="maven-repository-url" value="https://repository.apache.org/service/local/staging/deploy/maven2" /> + <property name="maven-repository-id" value="apache.releases.https" /> + <path id="maven-ant-tasks.classpath" path="${cassandra.dir}/build/maven-ant-tasks-${mavenanttasks.version}.jar" /> + <path id="classpath"> <path> <fileset dir="${cassandra.lib}"> @@ -52,6 +64,13 @@ <mkdir dir="${build.classes}" /> </target> + <target name="maven-ant-tasks-init" depends="init" unless="mavenanttasks.initialized"> + <typedef resource="org/apache/maven/artifact/ant/antlib.xml" + uri="antlib:org.apache.maven.artifact.ant" + classpathref="maven-ant-tasks.classpath" /> + <property name="mavenanttasks.initialized" value="true"/> + </target> + <target depends="init" name="build"> <javac destdir="${build.classes}"> <src path="${build.src}" /> @@ -59,17 +78,85 @@ </javac> </target> + <target name="pom" depends="init,maven-ant-tasks-init" description="Create Maven POM file"> + <exec executable="svn" dir="${basedir}" output="${build.out}/svn-info.xml"> + <arg line="info --xml"/> + </exec> + <xmlproperty file="${build.out}/svn-info.xml" collapseAttributes="true" prefix="svn" keepRoot="false"/> + <echo file="${build.out}/scm.properties"> +connection=scm:svn:${svn.entry.url}@${svn.entry.commit.revision} +developerConnection=scm:svn:${svn.entry.url}@${svn.entry.commit.revision} +url=${svn.entry.url}?pathrev=${svn.entry.commit.revision} + </echo> + <replace file="${build.out}/scm.properties"> + <replacefilter token="connection=scm:svn:https:" value="connection=scm:svn:http:"/> + <replacefilter token="Connection=scm:svn:http:" value="Connection=scm:svn:https:"/> + <replacefilter token="url=${svn.entry.repository.root}" value="url=http://svn.apache.org/viewvc"/> + </replace> + <property file="${build.out}/scm.properties" prefix="scm"/> + <artifact:pom id="all-pom" + groupId="org.apache.cassandra" + artifactId="cassandra-javautils" + version="${version}" + url="http://cassandra.apache.org" + name="Java utilities for cassandra clients" + inceptionYear="2009" + description="Java utilities for cassandra clients."> + <license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt"/> + <scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/> + <dependency groupId="org.apache.cassandra" artifactId="cassandra-all" version="${version}"/> + <developer id="alakshman" name="Avinash Lakshman"/> + <developer id="antelder" name="Anthony Elder"/> + <developer id="brandonwilliams" name="Brandon Williams"/> + <developer id="eevans" name="Eric Evans"/> + <developer id="gdusbabek" name="Gary Dusbabek"/> + <developer id="goffinet" name="Chris Goffinet"/> + <developer id="ianh" name="Ian Holsman"/> + <developer id="jaakko" name="Laine Jaakko Olavi"/> + <developer id="jbellis" name="Jonathan Ellis"/> + <developer id="johan" name="Johan Oskarsson"/> + <developer id="junrao" name="Jun Rao"/> + <developer id="mriou" name="Matthieu Riou"/> + <developer id="pmalik" name="Prashant Malik"/> + </artifact:pom> + <artifact:writepom pomRefId="all-pom" file="${build.out}/${final.name}.pom"/> + </target> + <target name="jar" depends="build"> <mkdir dir="${build.classes}/META-INF" /> <jar jarfile="${build.out}/${final.name}.jar" basedir="${build.classes}" /> </target> + <target name="javadoc-jar" depends="javadoc"> + <jar jarfile="${build.out}/${final.name}-javadoc.jar" + basedir="${javadoc.dir}"/> + </target> + + <target name="sources-jar" depends="init"> + <jar jarfile="${build.out}/${final.name}-sources.jar"> + <fileset dir="${build.src}" defaultexcludes="yes"/> + </jar> + </target> + <target name="build-tests" depends="build" description="Builds the test files"> <javac debug="true" srcdir="${test.src}" destdir="${build.classes}"> <classpath refid="test.classpath"/> </javac> </target> + <target name="javadoc" depends="init"> + <tstamp> + <format property="YEAR" pattern="yyyy"/> + </tstamp> + <javadoc destdir="${javadoc.dir}" author="true" version="true" use="true" + windowtitle="${ant.project.name} API" classpathref="classpath" + bottom="Copyright &copy; ${YEAR} The Apache Software Foundation" + maxmemory="256m"> + + <fileset dir="${build.src}" defaultexcludes="yes"/> + </javadoc> + </target> + <target name="test" depends="build-tests"> <delete dir="${test.reports}" failonerror="yes"/> <mkdir dir="${test.reports}"/> @@ -88,5 +175,40 @@ <delete dir="${build.out}" /> <delete dir="${test.reports}" /> </target> + + <target name="publish" depends="maven-ant-tasks-init,pom,jar,sources-jar,javadoc-jar"> + <!-- sign and deploy the main artifact --> + <artifact:mvn> + <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file" /> + <arg value="-Durl=${maven-repository-url}" /> + <arg value="-DrepositoryId=${maven-repository-id}" /> + <arg value="-DpomFile=${build.out}/${final.name}.pom" /> + <arg value="-Dfile=${build.out}/${final.name}.jar" /> + <arg value="-Pgpg" /> + </artifact:mvn> + + <!-- sign and deploy the sources artifact --> + <artifact:mvn> + <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file" /> + <arg value="-Durl=${maven-repository-url}" /> + <arg value="-DrepositoryId=${maven-repository-id}" /> + <arg value="-DpomFile=${build.out}/${final.name}.pom" /> + <arg value="-Dfile=${build.out}/${final.name}-sources.jar" /> + <arg value="-Dclassifier=sources" /> + <arg value="-Pgpg" /> + </artifact:mvn> + + <!-- sign and deploy the javadoc artifact --> + <artifact:mvn> + <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file" /> + <arg value="-Durl=${maven-repository-url}" /> + <arg value="-DrepositoryId=${maven-repository-id}" /> + <arg value="-DpomFile=${build.out}/${final.name}.pom" /> + <arg value="-Dfile=${build.out}/${final.name}-javadoc.jar" /> + <arg value="-Dclassifier=javadoc" /> + <arg value="-Pgpg" /> + </artifact:mvn> + </target> + </project>