Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fun Projects: Maven support #57

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 23 additions & 1 deletion build.properties
@@ -1,10 +1,11 @@
## Main source
## Main source
src.dir=src
java.dir=src/java
python.dir=clients/python
python.proto.dir=clients/python/voldemort/protocol
protobuff.dir=src/proto
lib.dir=lib
lib-test.dir=lib-test
classes.dir=dist/classes
resources.dir=dist/resources
commontestsrc.dir=test/common
Expand Down Expand Up @@ -35,3 +36,24 @@ tomcat.context=/voldemort

## Release
curr.release=0.90.1

## Ivy (http://ant.apache.org/ivy)
# ivy.lib.dir should point to the directory containing ivy*.jar
# please make sure to use version 2.2.0 or newer
# default configuration assumes presence of ivy-x.x.x.jar inside ANT_HOME/lib directory
ivy.lib.dir=${ant.home}/lib
ivy.organisation=com.github.voldemort
ivy.module=voldemort
ivy.revision=${curr.release}
# make sure GPG is correctly installed and configured
# for more information, please refer to
# https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
gpg.passphrase=<your gpg key passphrase goes here>
# in case you don't have account at Sonatype OSS Maven Repository
# please read https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
# and change nexus.username and nexus.password accordingly
nexus.hostname=oss.sonatype.org
nexus.username=<your nexus username goes here>
nexus.password=<your nexus password goes here>
nexus.repository-id=sonatype-nexus-staging
nexus.repository-url=https://${nexus.hostname}/service/local/staging/deploy/maven2
126 changes: 96 additions & 30 deletions build.xml
@@ -1,20 +1,12 @@
<?xml version="1.0"?>

<project name="voldemort" basedir="." default="all">
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="voldemort" basedir="." default="all">
<property file="build.properties" />

<property name="name" value="voldemort" />
<property name="display.name" value="Voldemort" />
<property name="author" value="Jay Kreps, Roshan Sumbaly, Alex Feinberg, Bhupesh Bansal, Lei Gao" />
<property environment="env" />

<path id="main-classpath">
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
<pathelement path="${classes.dir}" />
</path>

<!-- set the build number based on environment variable, otherwise blank -->
<property environment="env" description="System environment variables (including those set by Hudson)"/>
<condition property="curr.release.snapshot" value="${curr.release}-snapshot-${env.BUILD_NUMBER}" else="${curr.release}">
Expand All @@ -26,6 +18,11 @@
</and>
</condition>

<property name="voldemort-pom" value="${dist.dir}/${name}-${curr.release}.pom" />
<property name="voldemort-jar" value="${dist.dir}/${name}-${curr.release}.jar" />
<property name="voldemort-javadoc-jar" value="${dist.dir}/${name}-${curr.release}-javadoc.jar" />
<property name="voldemort-sources-jar" value="${dist.dir}/${name}-${curr.release}-sources.jar" />

<path id="contrib-classpath">
<fileset dir="${dist.dir}">
<include name="${name}-${curr.release}.jar" />
Expand All @@ -36,12 +33,6 @@
<path refid="test-classpath" />
</path>

<path id="test-classpath">
<pathelement path="${env.VOLD_TEST_JARS}" />
<path refid="main-classpath" />
<pathelement path="${testclasses.dir}" />
</path>

<path id="contrib-test-classpath">
<path refid="main-classpath" />
<path refid="contrib-classpath" />
Expand All @@ -59,14 +50,85 @@
</sequential>
</macrodef>

<target name="all" depends="clean, jar, test, contrib-jar, srcjar" description="Build all artifacts." />
<target name="all" depends="clean, init, jar, test, contrib-jar, srcjar" description="Build all artifacts." />

<target name="clean" description="Delete generated files.">
<delete dir="${dist.dir}" />
<replace-dir dir="${javadoc.dir}" />
</target>

<target name="build" description="Compile main source tree java files">
<target name="clean-lib" description="Delete all libraries">
<delete dir="${lib.dir}" />
<delete dir="${lib-test.dir}" />
</target>

<target name="init" depends="resolve-dependencies" description="Initialize classpathes used by other tasks">
<path id="main-classpath">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
<pathelement path="${classes.dir}"/>
</path>
<path id="test-classpath">
<pathelement path="${env.VOLD_TEST_JARS}"/>
<path refid="main-classpath"/>
<pathelement path="${testclasses.dir}"/>
<fileset dir="${lib-test.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
</target>

<target name="load-ivy-tasks" description="Load Ivy Ant tasks">
<path id="ivy.lib.path">
<fileset dir="${ivy.lib.dir}" includes="ivy*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
</target>

<target name="resolve-dependencies" depends="load-ivy-tasks" description="Retrieve dependencies">
<ivy:retrieve pattern="${lib.dir}/[artifact]-[revision].[ext]" type="jar,bundle" conf="compile,runtime"/>
<ivy:retrieve pattern="${lib-test.dir}/[artifact]-[revision].[ext]" type="jar" conf="test"/>
</target>

<target name="generate-pom" depends="load-ivy-tasks" description="Generate Maven pom.xml">
<ivy:resolve transitive="false"/>
<property name="ivy.pom.version" value="${curr.release}"/>
<ivy:makepom ivyfile="ivy.xml" pomfile="${voldemort-pom}" templatefile="pom.template" printIvyInfo="false"/>
</target>

<macrodef name="sign-artifact" description="Sign single artifact">
<attribute name="input.file"/>
<attribute name="output.file" default="@{input.file}.asc"/>
<attribute name="gpg.passphrase"/>
<sequential>
<echo>Signing @{input.file} -> @{output.file}</echo>
<exec executable="gpg">
<arg value="--armor"/>
<arg value="--output"/>
<arg value="@{output.file}"/>
<arg value="--passphrase"/>
<arg value="@{gpg.passphrase}"/>
<arg value="--detach-sig"/>
<arg value="@{input.file}"/>
</exec>
</sequential>
</macrodef>

<target name="sign-artifacts" description="Sign artifacts">
<sign-artifact input.file="${voldemort-pom}" output.file="${voldemort-pom}.asc" gpg.passphrase="${gpg.passphrase}"/>
<sign-artifact input.file="${voldemort-jar}" output.file="${voldemort-jar}.asc" gpg.passphrase="${gpg.passphrase}"/>
<sign-artifact input.file="${voldemort-sources-jar}" output.file="${voldemort-sources-jar}.asc" gpg.passphrase="${gpg.passphrase}"/>
<sign-artifact input.file="${voldemort-javadoc-jar}" output.file="${voldemort-javadoc-jar}.asc" gpg.passphrase="${gpg.passphrase}"/>
</target>

<target name="publish-artifacts" depends="generate-pom,jar,srcjar,javadocjar,sign-artifacts" description="Publish artifacts to Nexus">
<ivy:resolve transitive="false"/>
<ivy:publish resolver="nexus" artifactspattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]"
publishivy="false" pubrevision="${curr.release}" overwrite="true"/>
</target>

<target name="build" depends="init" description="Compile main source tree java files">
<replace-dir dir="${classes.dir}" />
<!-- copy non-java files to classes dir to load from classpath -->
<copy todir="${classes.dir}">
Expand All @@ -85,7 +147,7 @@
</javac>
</target>

<target name="buildtest" description="Compile test classes">
<target name="buildtest" depends="init" description="Compile test classes">
<replace-dir dir="${testclasses.dir}" />
<copy todir="${testclasses.dir}">
<fileset dir="${commontestsrc.dir}">
Expand All @@ -104,6 +166,7 @@
<src path="${inttestsrc.dir}" />
<src path="${commontestsrc.dir}" />
<classpath refid="main-classpath" />
<classpath refid="test-classpath" />
</javac>
</target>

Expand Down Expand Up @@ -132,7 +195,7 @@
</target>

<target name="jar" depends="build" description="Build server jar file">
<jar destfile="${dist.dir}/${name}-${curr.release}.jar">
<jar destfile="${voldemort-jar}">
<fileset dir="${classes.dir}">
<include name="**/*.*" />
</fileset>
Expand All @@ -145,7 +208,7 @@

<target name="srcjar" description="Build source jar file">
<mkdir dir="${dist.dir}" />
<jar destfile="${dist.dir}/${name}-${curr.release}-src.jar">
<jar destfile="${voldemort-sources-jar}">
<fileset dir="${java.dir}">
<include name="**/*.java" />
</fileset>
Expand All @@ -168,7 +231,7 @@
</target>

<target name="war" depends="build" description="Build server war file">
<war destfile="${dist.dir}/${name}.war" webxml="web.xml" basedir="${classes.dir}">
<war destfile="${dist.dir}/${name}-${curr.release}.war" webxml="web.xml" basedir="${classes.dir}">
<classes dir="${classes.dir}"/>
<lib dir="${lib.dir}">
<exclude name="${lib.dir}/servlet-api*.jar"/>
Expand Down Expand Up @@ -411,29 +474,32 @@
</sequential>
</macrodef>

<target name="docs" description="Create complete Javadoc documentation">
<target name="docs" description="Create complete Javadoc documentation" depends="init">
<make-javadocs dir="${javadoc.dir}/all" packagenames="*" javadir="${java.dir}"/>
<make-javadocs dir="${javadoc.dir}/client" packagenames="voldemort.versioning.*, voldemort.client.*,voldemort.serialization.*" javadir="${java.dir}"/>
</target>

<target name="javadocjar" depends="docs" description="Create JAR containing javadocs">
<jar basedir="${javadoc.dir}/all" jarfile="${voldemort-javadoc-jar}"/>
</target>

<target name="redeploy" depends="war, deploy">
</target>

<taskdef file="tomcat-tasks.properties">
<classpath>
<path location="${lib.dir}/catalina-ant.jar" />
</classpath>
</taskdef>
<target name="load-tomcat-tasks" depends="init" description="Load Tomcat Ant tasks">
<ivy:cachepath organisation="tomcat" module="catalina-ant" revision="5.5.23" inline="true" pathid="tomcat.classpath"/>
<taskdef resource="org/apache/catalina/ant/antlib.xml" classpathref="tomcat.classpath" />
</target>

<target name="list" description="List Tomcat applications">
<target name="list" depends="load-tomcat-tasks" description="List Tomcat applications">
<list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
</target>

<target name="deploy" description="Deploy application" depends="war">
<target name="deploy" depends="war, load-tomcat-tasks" description="Deploy application">
<deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="${tomcat.context}" update="true" war="file:${dist.dir}/${name}.war" />
</target>

<target name="undeploy" description="Undeploy application">
<target name="undeploy" depends="load-tomcat-tasks" description="Undeploy application">
<undeploy url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
Expand Down
51 changes: 51 additions & 0 deletions ivy.xml
@@ -0,0 +1,51 @@
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:e="http://ant.apache.org/ivy/extra"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="${ivy.organisation}" module="${ivy.module}" revision="${ivy.revision}"/>
<configurations>
<conf name="compile" transitive="false"/>
<conf name="runtime" transitive="false"/>
<conf name="test" transitive="false"/>
</configurations>
<publications>
<artifact name="voldemort" type="pom"/>
<artifact name="voldemort" type="pom.asc"/>
<artifact name="voldemort" type="jar"/>
<artifact name="voldemort" type="jar.asc"/>
<artifact name="voldemort" type="sources" ext="jar" e:classifier="sources"/>
<artifact name="voldemort" type="sources.asc" ext="jar.asc" e:classifier="sources"/>
<artifact name="voldemort" type="javadoc" ext="jar" e:classifier="javadoc"/>
<artifact name="voldemort" type="javadoc.asc" ext="jar.asc" e:classifier="javadoc"/>
</publications>
<dependencies>
<dependency org="org.apache.avro" name="avro" rev="1.4.0" conf="compile->default"/>
<dependency org="commons-codec" name="commons-codec" rev="1.3" conf="compile->default"/>
<dependency org="commons-dbcp" name="commons-dbcp" rev="1.2.2" conf="compile->default"/>
<dependency org="commons-httpclient" name="commons-httpclient" rev="3.1" conf="compile->default"/>
<dependency org="commons-io" name="commons-io" rev="1.4" conf="compile->default"/>
<dependency org="commons-lang" name="commons-lang" rev="2.4" conf="compile->default"/>
<dependency org="com.google.collections" name="google-collections" rev="1.0" conf="compile->default"/>
<dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.4.0" conf="compile->default"/>
<dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.4.0" conf="compile->default"/>
<dependency org="org.jdom" name="jdom" rev="1.1" conf="compile->default"/>
<dependency org="com.sleepycat" name="je" rev="4.0.92" conf="compile->default"/>
<dependency org="org.mortbay.jetty" name="jetty" rev="6.1.18" conf="compile->default"/>
<dependency org="org.mortbay.jetty" name="jetty-util" rev="6.1.18" conf="compile->default"/>
<dependency org="net.java.dev.jna" name="jna" rev="3.2.7" conf="compile->default"/>
<dependency org="net.sf.jopt-simple" name="jopt-simple" rev="3.1" conf="compile->default"/>
<dependency org="org.apache.hadoop" name="libthrift" rev="0.5.0.0" conf="compile->default"/>
<dependency org="com.google.protobuf" name="protobuf-java" rev="2.3.0" conf="compile->default"/>
<dependency org="javax.servlet" name="servlet-api" rev="2.5" conf="compile->default"/>
<dependency org="org.apache.velocity" name="velocity" rev="1.6.2" conf="compile->default"/>
<dependency org="log4j" name="log4j" rev="1.2.15" conf="compile->default"/>
<dependency org="com.ning" name="compress-lzf" rev="0.9.1" conf="compile->default"/>
<dependency org="org.iq80.snappy" name="snappy" rev="0.1" conf="compile->default"/>
<dependency org="jline" name="jline" rev="0.9.94" conf="runtime->default"/>
<dependency org="commons-collections" name="commons-collections" rev="3.2.1" conf="runtime->default"/>
<dependency org="colt" name="colt" rev="1.2.0" conf="test->default"/>
<dependency org="commons-pool" name="commons-pool" rev="1.5.2" conf="test->default"/>
<dependency org="junit" name="junit" rev="4.6" conf="test->default"/>
<dependency org="org.mockito" name="mockito-all" rev="1.8.5" conf="test->default"/>
</dependencies>
</ivy-module>
11 changes: 11 additions & 0 deletions ivysettings.xml
@@ -0,0 +1,11 @@
<ivysettings>
<settings defaultResolver="default"/>
<credentials realm="Sonatype Nexus Repository Manager"
host="${nexus.hostname}" username="${nexus.username}" passwd="${nexus.password}"/>
<resolvers>
<chain name="nexus">
<ibiblio name="${nexus.repository-id}" root="${nexus.repository-url}" m2compatible="true"/>
</chain>
</resolvers>
<include url="${ivy.default.settings.dir}/ivysettings.xml"/>
</ivysettings>
Binary file removed lib/avro-1.4.0.jar
Binary file not shown.
Binary file removed lib/catalina-ant.jar
Binary file not shown.
Binary file removed lib/colt-1.2.0.jar
Binary file not shown.
Binary file removed lib/commons-codec-1.3.jar
Binary file not shown.
Binary file removed lib/commons-collections-3.2.1.jar
Binary file not shown.
Binary file removed lib/commons-dbcp-1.2.2.jar
Binary file not shown.
Binary file removed lib/commons-httpclient-3.1.jar
Binary file not shown.
Binary file removed lib/commons-io-1.4.jar
Binary file not shown.
Binary file removed lib/commons-lang-2.4.jar
Binary file not shown.
Binary file removed lib/commons-pool-1.5.2.jar
Binary file not shown.
Binary file removed lib/compress-lzf-0.9.1.jar
Binary file not shown.
Binary file removed lib/google-collect-1.0.jar
Binary file not shown.
Binary file removed lib/jackson-core-asl-1.4.0.jar
Binary file not shown.
Binary file removed lib/jackson-mapper-asl-1.4.0.jar
Binary file not shown.
Binary file removed lib/jdom-1.1.jar
Binary file not shown.
Binary file removed lib/je-4.0.92.jar
Binary file not shown.
Binary file removed lib/jetty-6.1.18.jar
Binary file not shown.
Binary file removed lib/jetty-util-6.1.18.jar
Binary file not shown.
Binary file removed lib/jline-0.9.94.jar
Binary file not shown.
Binary file removed lib/jna.jar
Binary file not shown.
Binary file removed lib/jopt-simple-3.1.jar
Binary file not shown.
Binary file removed lib/junit-4.6.jar
Binary file not shown.
Binary file removed lib/libthrift-0.5.0.jar
Binary file not shown.
Binary file removed lib/log4j-1.2.15.jar
Binary file not shown.
Binary file removed lib/mockito-all-1.8.5.jar
Binary file not shown.
Binary file removed lib/paranamer-2.1.jar
Binary file not shown.
Binary file removed lib/protobuf-java-2.3.0.jar
Binary file not shown.
Binary file removed lib/servlet-api-2.5.jar
Binary file not shown.
Binary file removed lib/slf4j-api-1.5.6.jar
Binary file not shown.
Binary file removed lib/slf4j-log4j12-1.5.6.jar
Binary file not shown.
Binary file removed lib/snappy-0.1.jar
Binary file not shown.
Binary file removed lib/velocity-1.6.2.jar
Binary file not shown.
Binary file removed lib/xercesImpl-2.9.1.jar
Binary file not shown.
53 changes: 53 additions & 0 deletions pom.template
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>${ivy.pom.groupId}</groupId>
<artifactId>${ivy.pom.artifactId}</artifactId>
<version>${ivy.pom.version}</version>
<name>Voldemort</name>
<description>Distributed key-value storage system</description>
<url>http://github.com/voldemort/voldemort</url>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<connection>scm:git:git@github.com:voldemort/voldemort.git</connection>
<developerConnection>scm:git:git@github.com:voldemort/voldemort.git</developerConnection>
<url>git@github.com:voldemort/voldemort.git</url>
</scm>
<developers>
<developer>
<id>jay.kreps</id>
<name>Jay Kreps</name>
<email>jay.kreps@gmail.com</email>
</developer>
<developer>
<id>rsumbaly</id>
<name>Roshan Sumbaly</name>
<email>rsumbaly@gmail.com</email>
</developer>
<developer>
<id>feinberg</id>
<name>Alex Feinberg</name>
<email>feinberg@gmail.com</email>
</developer>
<developer>
<id>bbansal.usc</id>
<name>Bhupesh Bansal</name>
<email>bbansal.usc@gmail.com</email>
</developer>
<developer>
<id>gaolei</id>
<name>Lei Gao</name>
<email>gaolei@gmail.com</email>
</developer>
</developers>

</project>