blob: a3c86f22806928eb53bd396ec72bbf34651063fa [file] [log] [blame]
GENERATING MAVEN 2 ARTIFACTS FOR APACHE DERBY
=============================================
The POMs in the 'maven2' directory enable you to generate Maven 2 artifacts
for Apache Derby. The following software is required for deploying a release:
1. Maven 2/3
2. GnuPG (for signing the artifacts)
Note that Maven 2 will pull down quite a few required plugins the first time
you run it. They will be cached locally, so they are not downloaded again the
next time.
All commands below are to be executed from the directory 'maven2' within the
Derby source code repository.
Overview of the required steps:
a) Generate the Derby jar files.
b) Specify required information
c) 'mvn clean install'
d) 'mvn deploy' or 'mvn clean deploy'
e) Close the staging repository in Nexus.
f) Release the artifacts in Nexus after a successful vote.
g) Verify that the artifacts appear in the central Maven repository.
Description of the required steps:
a) Generate the Derby jar files.
For releases, generate the insane jars. You can override which jars to use
with the property 'sanity' in the top-level POM.
The jars are expected to be found in 'jars/[in]sane' relative to the
checked out code repository.
If generating artifacts for a release you have not built yourself, the
following steps are recommended:
1) update the source to the revision of the release.
2) build the source using sane=false.
3) make sure the version reported by sysinfo is correct.
4) download the lib distribution for the release.
5) *IMPORTANT* verify the download (checksum and signature).
6) copy the JAR files and the WAR file from the unpacked distribution
file into 'jars/insane'.
7) follow the remaining instructions for generating Maven artifacts
b) Specify required information.
To successfully generate and deploy release artifacts, all of these
must be specified:
o The Derby release version.
The version must be specified in all POMs. Compile and execute the
Java program SetDerbyVersion, found in the 'maven2' directory, i.e.:
javac SetDerbyVersion && java -cp .:../jars/insane/derbyshared.jar:../jars/insane/derby.jar SetDerbyVersion
Alternatively, use search and replace (i.e. Perl or sed) - make sure
you don't replace version tags that aren't supposed to be modified.
Make sure you diff the POMs to verify the changes.
Note that the Java program performs some extra sanity checks.
o Passphrase for your GPG signing key.
Required for step (c) and (d). See the top-level POM for details, brief
instructions in (c).
o User credentials for deployment/upload.
Required for step (d), usually you do this only once. If you change
your password or start using a different machine, you'll have to do it
again. You should encrypt your password(s), and to do that you have to
edit/create two files in USER_HOME/.m2 (i.e. ~/.m2 on *nix systems).
See http://maven.apache.org/guides/mini/guide-encryption.html
for how to do this the right way. The id to use in the server section
of settings.xml is specified in the ASF parent pom, and is currently
"apache.releases.https".
c) 'mvn clean install'
Generates the artifacts, uses GnuPG to generate signatures for the
artifacts, and installs the artifacts in the local repository.
You are required to provide your private key and the passphrase to GnuPG.
Using a passphrase agent is recommended, but you can also specify it on
the command line when invoking Maven with -Dgpg.passphrase=PASSPHRASE.
For instance:
mvn -Dgpg.passphrase="my secret passphrase" clean install
WARNING: Do not specify your passphrase in the POM that is deployed on
the Maven repositories!
The local repository is typically found in '~/.m2/repository/', and the
Derby artifacts are located under 'org/apache/derby/'.
The clean target is included to avoid unintentionally installing/deploying
artifacts not supposed to be deployed.
If you just want to build the artifacts, use 'mvn package' or 'mvn verify'.
The former will generate the artifact jars, the latter will additionally
generate/include the POMs to be deployed and the signatures.
NOTE: Do not run 'mvn package|verify install', that is to combine either
package or verify with install, as this causes the
signatures of the artifacts to be signed. This shows as files like
'./engine/target/derby-trunk-alpha.jar.asc.asc'.
d) 'mvn deploy' or 'mvn clean deploy'
Deploys the artifacts, including signatures and checksum files, to the
temporary Apache staging repository managed by Nexus.
Remember that you will need to specify your gpg passphrase here too,
preferably by using a passphrase agent. Alternatively:
mvn -Dgpg.passphrase="my secret passphrase" deploy
e) Close the staging repository in Nexus.
Once you have deployed the artifacts you should close the staging
repository to allow others to test the artifacts. Log into
https://repository.apache.org/ using your LDAP credentials.
f) Release the artifacts in Nexus after a successful vote.
Once the vote has passed, the artifacts can be released. To do this you
log in to Nexus using you LDAP credentials, select the correct staging
repository, and perform the release action on it.
g) Verify that the artifacts appear in the central Maven repository.
Some time after you have released the artifacts from the temporary Apache
staging repository in step (f), they should appear in the central Maven
repository:
http://repo1.maven.org/maven2/org/apache/derby/
After a few more days, the artifacts may also have propagated to other
repositories / services, for instance the one below:
http://mvnrepository.com/artifact/org.apache.derby
Note that for the 10.6.1 release, within a day the artifacts turned up in
the central Maven repository (the first link). It took 6 days for the
artifacts to percolate to the external aggregator site (the second link).
Other information:
o For each project, the following files should be found in the various
'maven2/[project]/target' directories after 'verify' or 'install':
ARTIFACT-VERSION.jar
ARTIFACT-VERSION.jar.asc
ARTIFACT-VERSION.pom
ARTIFACT-VERSION.pom.asc
When these are deployed, or installed locally, checksum files (a .md5 and
a .sha1 file for each artifact) will be generated by Maven. Check your
local repository to confirm this (i.e. '~/.m2/repository').
The 'derbywar' project will have a war file instead of a jar file.
o More ASF generic information about the Maven artifact release process:
http://www.apache.org/dev/publishing-maven-artifacts.html