blob: 400ffa59e00229aa680db3e9c0a9b3c52d87e366 [file] [log] [blame]
Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at,
or the Eclipse Distribution License v. 1.0 which is available at
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
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
* 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.
<project name="Upload2Maven" basedir="." xmlns:artifact="urn:maven-artifact-ant" default="info">
<property file="${user.home}/"/>
<!-- The following properties defined so they can be overridden for testing -->
<property name="mavenant.dir" value="${build.deps.dir}/mavenant"/>
<property name="" value="home/data/httpd/"/>
<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="${}/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="" file="${ant.file.Upload2Maven}"/>
<pathconvert targetos="unix" property="">
<pathelement location="${}"/>
<property file="${user.home}/"/>
<!-- discover path definitions -->
<property name="" value="${}/target"/>
<property name="maven.2.releng.dir" value="${}/../eclipselink.releng"/>
<echo message=" = ${}"/>
<echo message=" = ${}"/>
<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="jakarta.persistence"/>
<property name="bundle.criteria" value="[2.0.100, 2.2)"/>
<property name="" value="Java Persistence"/>
<!-- Determine Version info from built bundle filename -->
<selectbundle basename="${bundle.prefix}" directory="${}"
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>
<!-- 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}"
<equals arg1="${build.type}" arg2="RELEASE"/>
<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"/>
<echo message="${target.repo.message}"/>
<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 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="${}/${bundle.prefix}_${bundle.version}.jar"/>
<param name="artifactSrc" value="${}/${bundle.prefix}.source_${bundle.version}.jar"/>
<param name="artifactJavadoc" value="${}/${bundle.prefix}.javadoc_${bundle.version}.jar"/>
<param name="artifactName" value="${}"/>
<param name="dependencies" value=""/>
<!-- 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">
<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}"/>
<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">
<!-- if unpublished staging -->
<isset property="sign"/>
<not><isset property="repo.version.exist"/></not>
<!-- if snapshot -->
<not><isset property="sign"/></not>
<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"/>
<say message="'${artifactName}' version '${artifactVersion}' already deployed to repository... skipping." unless="publish.ok"/>
<say message="${publish.message}" if="publish.ok"/>
<!-- 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 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"/ -->
<!-- cleanup -->
<delete file="pom.xml"/>
<!-- Staging targets -->
<target name="upload-artifact-staging" if="publish.ok" >
<!-- sign and deploy the main artifact -->
<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=${}/pom.xml"/>
<arg value="-Dfile=${artifact}"/>
<arg value="-Pgpg"/>
<target name="upload-source-staging" if="publish.ok" >
<!-- sign and deploy the sources artifact -->
<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=${}/pom.xml"/>
<arg value="-Dfile=${artifactSrc}"/>
<arg value="-Dclassifier=sources"/>
<arg value="-Pgpg"/>
<target name="upload-javadoc-staging" if="publish.ok" >
<!-- sign and deploy the javadoc artifact -->
<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=${}/pom.xml"/>
<arg value="-Dfile=${artifactJavadoc}"/>
<arg value="-Dclassifier=javadoc"/>
<arg value="-Pgpg"/>