| <!--/******************************************************************************* |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 |
| * which accompanies this distribution. |
| * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html |
| * and the Eclipse Distribution License is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * Ant naming conventions: |
| * - regardless of the actual OS platform,'/' is the directory separator |
| * (Ant will convert as appropriate). |
| * - multi-word properties use periods '.' |
| * - properties ending in .jar define jarfile names only (no path) |
| * - properties ending in .lib are fully qualified jars (path and filename) |
| * - properties ending in .dir are directory paths |
| * - properties ending in .path are path refid names (classpath fragments) |
| * - multi-word targets use hyphens '-' |
| * - targets beginning with test- are reserved for high level test targets, |
| * and are used in test results parsing |
| * - targets typically use the form <action>-<object>-<type> (ie. package-bundle-zip) |
| * - multi-word macros use underscores '_' |
| * - multi-word macro attributes are concatenated |
| * e.g. 'runpathref' |
| * - multi-word tasks (taskdef) names are concatenated |
| * e.g. 'validateconnection' |
| * - OS environment variables are in ALLCAPS and have 'env' as a prefix |
| * e.g. ${env.XXX}. |
| * - Ant properties are lower case. |
| * |
| * Contributors: |
| * mmeswani - initial API and implementation (checked in by tware) |
| * egwin - updated variables as they have changed in the rest of the system |
| * updated svnversion to not break build, and default if exec fails |
| * egwin - updated for publishing to Maven Central, add ability to override |
| * destination URL (to pub elsewhere override ${maven.repo.url}) |
| * egwin - converted svn.revision to git.hash (was missed in original |
| * migration to Git) |
| * egwin - migrated to javax.persistence |
| #******************************************************************************/--> |
| <!-- Variables Needed: |
| * build.type - should be set to "SNAPSHOT, "M##", or "RELEASE" |
| * git.hash - for stamping pom, to link build with source repo |
| * |
| *********************************************************************************--> |
| <!-- Build Assumptions: |
| * running from a "view" |
| * Needs: |
| * ${mavenant.dir}/maven-ant-tasks-2.0.8.jar (assumes: ${build.deps.dir}/mavenant) |
| * ../eclipselink.releng/ant_customizations.jar |
| * |
| *********************************************************************************--> |
| <project name="Upload2Maven" basedir="." xmlns:artifact="urn:maven-artifact-ant" default="info"> |
| <property file="${user.home}/build.properties"/> |
| <!-- The following properties defined so they can be overridden for testing --> |
| <property name="mavenant.dir" value="${build.deps.dir}/mavenant"/> |
| <property name="eclipselink.root.download.dir" value="home/data/httpd/download.eclipse.org/rt/eclipselink"/> |
| |
| <path id="maven-ant-tasks.classpath" path="${mavenant.dir}/maven-ant-tasks-2.1.3.jar" /> |
| <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" |
| classpathref="maven-ant-tasks.classpath" /> |
| |
| <!-- Tool version definitions --> |
| <property name="gpg.plugin.version" value="1.4"/> |
| <property name="wagon.http.version" value="2.4"/> |
| |
| <!-- "maven dir" defined for later use ensuring only single upload occurs --> |
| <property name="maven.repo.dir" value="${eclipselink.root.download.dir}/maven.repo"/> |
| |
| <!-- The repository info of where maven artifacts will be uploaded --> |
| <!-- Override value to change defaults --> |
| <property name="stagingId" value="eclipselink.repository"/> |
| <property name="stagingURL" value="file:///${maven.repo.dir}"/> |
| <property name="snapshotId" value="eclipselink.repository"/> |
| <property name="snapshotURL" value="file:///${maven.repo.dir}"/> |
| |
| <target name="init"> |
| <dirname property="maven.build.location_temp" file="${ant.file.Upload2Maven}"/> |
| <pathconvert targetos="unix" property="maven.build.location"> |
| <path> |
| <pathelement location="${maven.build.location_temp}"/> |
| </path> |
| </pathconvert> |
| <property file="${user.home}/build.properties"/> |
| <!-- discover path definitions --> |
| <property name="maven.2.target.dir" value="${maven.build.location}/target"/> |
| <property name="maven.2.releng.dir" value="${maven.build.location}/../eclipselink.releng"/> |
| |
| <echo message="maven.build.location = ${maven.build.location}"/> |
| <echo message="maven.2.target.dir = ${maven.2.target.dir}"/> |
| <echo message="maven.2.releng.dir = ${maven.2.releng.dir}"/> |
| |
| <!-- Test for Basic run requirements --> |
| <available file="${maven.2.releng.dir}" type="dir" property="releng.exist"/> |
| <fail message="Cannot find Releng repo! Exiting." unless="releng.exist"/> |
| |
| <!-- Custom task definitions --> |
| <property name="custom.tasks.lib" value="${maven.2.releng.dir}/ant_customizations.jar"/> |
| <property name="custom.echo.task.class" value="org.eclipse.persistence.buildtools.ant.taskdefs.Say"/> |
| <property name="custom.selectbundle.task.class" value="org.eclipse.persistence.buildtools.ant.taskdefs.SelectBundle"/> |
| <property name="custom.stripqualifier.task.class" value="org.eclipse.persistence.buildtools.ant.taskdefs.StripQualifier"/> |
| <taskdef name="say" classname="${custom.echo.task.class}" classpath="${custom.tasks.lib}"/> |
| <taskdef name="selectbundle" classname="${custom.selectbundle.task.class}" classpath="${custom.tasks.lib}"/> |
| <taskdef name="stripQualifier" classname="${custom.stripqualifier.task.class}" classpath="${custom.tasks.lib}"/> |
| |
| <property name="bundle.prefix" value="javax.persistence"/> |
| <property name="bundle.criteria" value="[2.0.100, 2.2)"/> |
| <property name="bundle.name" value="Javax Persistence"/> |
| |
| <!-- Determine Version info from built bundle filename --> |
| <selectbundle basename="${bundle.prefix}" directory="${maven.2.target.dir}" |
| criterion="${bundle.criteria}" property="OSGi.version" versiononly="true" |
| /> |
| <say message="OSGi.version: ${OSGi.version}" if="OSGi.version"/> |
| <fail message="${OSGi.version} property not set! SelectBundle failure. Exiting..." unless="OSGi.version"/> |
| |
| <!-- Maven standards state we should publish with a stripped down 3-part version rather --> |
| <!-- than the 4-part OSGi version. So we need to generate a "base.version" from the --> |
| <!-- discovered "OSGi.version". "base.version" will be combined with build.type to get --> |
| <!-- the actual "maven.version" --> |
| <stripQualifier input="${OSGi.version}" property="base.version"/> |
| <say message="base.version: ${base.version}" if="base.version"/> |
| <fail message="${base.version} property not set! StripQualifier failure. Exiting..." unless="base.version"/> |
| |
| <say message="build.type: ${build.type}" if="build.type"/> |
| <fail message="Cannot upload to Maven without a build.type defined!" unless="build.type"/> |
| |
| <!-- used to determine whether to publish if version exists, and could also be used if --> |
| <!-- pgp signing required (not currently used in eclipse maven.repo) --> |
| <condition property="sign"> |
| <not> <equals arg1="${build.type}" arg2="SNAPSHOT"/> </not> |
| </condition> |
| |
| <!-- Set maven.version appropriately depending upon ${build.type}. --> |
| <!-- variable should only be used for maven version element in POM. --> |
| <condition property="maven.version" value="${base.version}" |
| else="${base.version}-${build.type}"> |
| <equals arg1="${build.type}" arg2="RELEASE"/> |
| </condition> |
| <say message="maven.version: ${maven.version}"/> |
| |
| <say message="git.hash: ${git.hash}" if="git.hash"/> |
| <fail message="Cannot upload to Maven without 'git.hash' defined!" unless="git.hash"/> |
| |
| <condition property="target.repo.message" value="Target repository ID: '${stagingId}' URL:'${stagingURL}'" |
| else="Target repository ID: '${snapshotId}' URL:'${snapshotURL}'"> |
| <isset property="sign"/> |
| </condition> |
| <echo message="${target.repo.message}"/> |
| </target> |
| |
| <target name="info" depends="init, verify-publish"> |
| <say message="If above info is correct, and you want to pubish for real, Re-run specifying target 'upload'."/> |
| </target> |
| |
| <target name="upload" depends="init"> |
| <antcall target="upload-artifact"> |
| <param name="repo.dir" value="/${maven.repo.dir}/org/eclipse/persistence/${bundle.prefix}/${maven.version}"/> |
| <param name="groupId" value="org.eclipse.persistence"/> |
| <param name="artifactId" value="${bundle.prefix}"/> |
| <param name="artifactVersion" value="${maven.version}"/> |
| <param name="artifact" value="${maven.2.target.dir}/${bundle.prefix}_${bundle.version}.jar"/> |
| <param name="artifactSrc" value="${maven.2.target.dir}/${bundle.prefix}.source_${bundle.version}.jar"/> |
| <param name="artifactJavadoc" value="${maven.2.target.dir}/${bundle.prefix}.javadoc_${bundle.version}.jar"/> |
| <param name="artifactName" value="${bundle.name}"/> |
| <param name="dependencies" value=""/> |
| </antcall> |
| </target> |
| |
| <!-- Generic targets to do the Maven work --> |
| <target name="prepare-pom"> |
| <!-- Copy pom.template to pom.xml filtering various properties --> |
| <copy file="pom.xml.template" tofile="pom.xml" overwrite="true"> |
| <filterset> |
| <filter token="groupId" value="${groupId}"/> |
| <filter token="version" value="${artifactVersion}"/> |
| <filter token="git.hash" value="${git.hash}"/> |
| <filter token="artifactId" value="${artifactId}"/> |
| <filter token="artifactName" value="${artifactName}"/> |
| <filter token="dependencies" value="${dependencies}"/> |
| </filterset> |
| </copy> |
| </target> |
| |
| <target name="verify-publish"> |
| <available file="${maven.repo.dir}" property="repo.exist" type="dir" value="true"/> |
| <say message="Repository: '${maven.repo.dir}' inaccessible. Upload will fail." unless="repo.exist"/> |
| <fail message="Repository inaccessible" unless="repo.exist"/> |
| |
| <available file="${repo.dir}" property="repo.version.exist" type="dir" value="true"/> |
| <condition property="publish.ok"> |
| <or> |
| <!-- if unpublished staging --> |
| <and> |
| <isset property="sign"/> |
| <not><isset property="repo.version.exist"/></not> |
| </and> |
| <!-- if snapshot --> |
| <not><isset property="sign"/></not> |
| </or> |
| </condition> |
| <condition property="publish.message" |
| value="'${artifactName}' version '${artifactVersion}' SNAPSHOT upload ok." |
| else="'${artifactName}' version '${artifactVersion}' never deployed to ... upload ok."> |
| <equals arg1="${build.type}" arg2="SNAPSHOT"/> |
| </condition> |
| <say message="'${artifactName}' version '${artifactVersion}' already deployed to repository... skipping." unless="publish.ok"/> |
| <say message="${publish.message}" if="publish.ok"/> |
| </target> |
| |
| <!-- Uploads a single artifact & source to maven repository --> |
| <target name="upload-artifact" if="publish.ok" depends="verify-publish, prepare-pom"> <!-- , upload-snapshot, upload-artifact-staging, upload-source-staging"> --> |
| <!-- only needed if publishing to two repos (staging and snapshot) |
| <delete file="pom.xml"/> |
| </target> |
| <target name="upload-snapshot" unless="sign"> --> |
| <!-- Deploy the jar to maven repository along with sources --> |
| <artifact:pom id="maven.project" file="pom.xml" /> |
| <!-- Deploy Artifact to repote repo, attach source and javadoc --> |
| <artifact:deploy file="${artifact}"> |
| <artifact:remoteRepository id="${snapshotId}" url="${snapshotURL}"/> |
| <artifact:pom id="maven.project" file="pom.xml"/> |
| <artifact:attach file="${artifactSrc}" type="jar" classifier="sources"/> |
| <!-- artifact:attach file="${artifactJavadoc}" type=zip classifier="javadoc"/ --> |
| </artifact:deploy> |
| <!-- cleanup --> |
| <delete file="pom.xml"/> |
| </target> |
| |
| <!-- Staging targets --> |
| <target name="upload-artifact-staging" if="publish.ok" > |
| <!-- sign and deploy the main artifact --> |
| <artifact:mvn> |
| <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/> |
| <arg value="-Durl=${stagingURL}"/> |
| <arg value="-DrepositoryId=${stagingId}"/> |
| <arg value="-DpomFile=${maven.build.location}/pom.xml"/> |
| <arg value="-Dfile=${artifact}"/> |
| <arg value="-Pgpg"/> |
| </artifact:mvn> |
| </target> |
| <target name="upload-source-staging" if="publish.ok" > |
| <!-- sign and deploy the sources artifact --> |
| <artifact:mvn> |
| <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/> |
| <arg value="-Durl=${stagingURL}"/> |
| <arg value="-DrepositoryId=${stagingId}"/> |
| <arg value="-DpomFile=${maven.build.location}/pom.xml"/> |
| <arg value="-Dfile=${artifactSrc}"/> |
| <arg value="-Dclassifier=sources"/> |
| <arg value="-Pgpg"/> |
| </artifact:mvn> |
| </target> |
| <target name="upload-javadoc-staging" if="publish.ok" > |
| <!-- sign and deploy the javadoc artifact --> |
| <artifact:mvn> |
| <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/> |
| <arg value="-Durl=${stagingURL}"/> |
| <arg value="-DrepositoryId=${stagingId}"/> |
| <arg value="-DpomFile=${maven.build.location}/pom.xml"/> |
| <arg value="-Dfile=${artifactJavadoc}"/> |
| <arg value="-Dclassifier=javadoc"/> |
| <arg value="-Pgpg"/> |
| </artifact:mvn> |
| </target> |
| |
| </project> |
| |
| |