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 &amp;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>
 

Reply via email to