Author: brett
Date: Thu Jun 2 17:26:21 2005
New Revision: 179682
URL: http://svn.apache.org/viewcvs?rev=179682&view=rev
Log:
PR: MAVEN-1611
Submitted by: Robert Burrell Donkin
Reviewed by: Brett Porter
improvements to the text of the release document
Modified:
maven/maven-1/core/trunk/xdocs/using/releasing.xml
Modified: maven/maven-1/core/trunk/xdocs/using/releasing.xml
URL:
http://svn.apache.org/viewcvs/maven/maven-1/core/trunk/xdocs/using/releasing.xml?rev=179682&r1=179681&r2=179682&view=diff
==============================================================================
--- maven/maven-1/core/trunk/xdocs/using/releasing.xml (original)
+++ maven/maven-1/core/trunk/xdocs/using/releasing.xml Thu Jun 2 17:26:21 2005
@@ -27,35 +27,41 @@
<body>
<section name="Making Releases">
<p>
- Maven can simplify several areas of the release process for software,
but it is always worth having a process
- in order.
+ Maven can simplify several areas of the release process for software
but it cannot substitute for
+ planning. Think about the process before starting any release.
</p>
<subsection name="Determine Format">
<p>
- Firstly, you must decide what format you will be distributing your
software in. For example:
+ Firstly, you must decide what form your distribution will take. For
example:
</p>
<ul>
- <li>Standalone library</li>
+ <li>Standalone library artifact</li>
<li>Binary and source distributions</li>
<li>Installer</li>
</ul>
<p>
- If you are distributing your artifact as is, you can use the
existing deployment goals (as discussed in
- <a
href="../reference/internal-repositories.html#Deploying_to_the_Internal_Repository">Deploying
to the
- Internal Repository</a>).
+ Once you have decided: it's time to set up maven.
</p>
<p>
- For binary and source archives, see the
+ If you plan to distribute your normal artifact as is then use the
existing deployment goals. See
+ <a
href="../reference/internal-repositories.html#Deploying_to_the_Internal_Repository">
+ Deploying to the Internal Repository</a> for discussions about
distributing raw artifacts.
+ Public releases (of course) require deployment to a public repository.
+ If your usual internal repository is private (and you want to use
maven to upload the artifacts)
+ then some changes to your project's properties may be needed for the
release.
+ </p>
+ <p>
+ Distributions as binary and source archives are supported by the
<a href="../reference/plugins/dist/">distribution plugin</a>.
For installers, currently, Maven only supports the NSIS installer on
Windows.
See the
- <a href="../reference/nsis/">NSIS plugin</a> for information.
- In both cases, some configuration will be necessary. You may have to
do additional scripting to get the
+ <a href="../reference/plugins/nsis/">NSIS plugin</a> for information.
+ In both cases, some configuration will be necessary. You may have to
add extra scripting to get the
release just as you want it.
</p>
<p>
- Once you have decided on one or more formats and have tested being
able to generate a release, you are ready
- to go, and this won't need to be changed in the future.
+ It may take a little effort to create and test release generation but
it only needs to be done once.
+ Maven will then be able reliable to generate all future releases to
this format.
</p>
</subsection>
<subsection name="Check Dependencies">
@@ -64,18 +70,20 @@
<a href="bestpractices.html#Reproduciblity">Best Practices</a> for
more).
</p>
<p>
- You should check the dependencies of the project you will be
releasing to ensure that all dependencies on
- snapshots or other non-final releases are resolved to proper
releases and that the software is tested against
- them.
+ You should check the dependencies of the project you will be
releasing. Ensure that all dependencies on
+ snapshots or other non-final releases are resolved to proper releases.
+ Then test that the software runs correct against them.
</p>
<p>
- If you remain pointing to a development dependency that is later
overwritten, attempting to rebuild your
- release may lead to at best a different result, at worst a failure
to build.
+ Releasing against a development dependency may lead to problems later.
+ Not only may this cause future compatibility problems for your users
but if you remain pointing to a development
+ dependency that is later overwritten, attempting to rebuild your
+ release may lead to at best a different result, at worst a failure to
build.
</p>
<p>
- If there is no release of the software, but you know the current
development build to be stable, as a last
- resort you should internally release that library, using the current
time as a version, or similar that will
- not be overwritten.
+ If there is no release of the software, but you know the current
development build to be stable, as a last
+ resort you should internally release that library (using the current
time as a version, or similar).
+ At least then your software has a concrete dependency that should not
be overwritten.
</p>
<p>
Future Maven release tools will help to identify the existence of
such snapshots and help to resolve them,
@@ -84,16 +92,17 @@
</subsection>
<subsection name="Utilise Source Control">
<p>
- If you are using a source control system, make sure to tag the
release so that it can be built cleanly from
- the system. Maven can provide assistance with this.
+ If you are using a source control system, the release should be
cleanly built from a tag
+ (so that the release codebase is clearly known). So, the SCM needs to
be tagged before the release is cut.
+ Maven can provide assistance with this.
</p>
<p>
- Currently, the only automated release mechanism in Maven is that
provided by the SCM plugin.
+ Currently, the only automated release mechanism in Maven for cutting
releases is provided by the SCM plugin.
Please refer to the documentation on
<a href="../reference/plugins/scm/releasing.html">Making Releases
from SCM</a>.
</p>
<p>
- The SCM plugin performs a release in two steps:
+ The SCM plugin cuts a release in two steps:
</p>
<ol>
<li>preparation - where the descriptors are updated, committed and
the code is tagged</li>
@@ -101,24 +110,41 @@
using the distribution goals you selected in the first
section.</li>
</ol>
</subsection>
- <subsection name="Perform the Release">
+ <subsection name="Cutting the Release">
+ <p>
+ As discussed previously, if you are using an SCM, you should utilise
the SCM plugin to do this as this will
+ ensure a build against a clean checkout. Ideally you should also build
in a known environment each time.
+ Pay attention to the version of Java used to compile the release: some
bytecode produced by later versions
+ may be incompatible with earlier versions. Look out for warnings
provided by maven about this.
+ </p>
<p>
- With everything together, performing the release is quite simple. If
the plugin supports it, you can deploy
- the released artifact directly to the repository.
+ With everything together and prepared, cutting the release is quite
simple (whether the project uses SCM or not).
+ If the plugin supports it, you can deploy the released artifact
directly to the repository.
</p>
+
<p>
- As discussed previously, if you are using an SCM, you should utilise
the SCM plugin to do this, as it will
- build in a clean checkout. Ideally you should also build in a known
environment each time.
+ While Maven will currently create and deploy an MD5 checksum along
with your distribution, this is only useful for verifying
+ download integrity when the sum can be download from a trusted
repository.
+ In many environments (including where there is public distribution
over the internet) it is therefore
+ recommended that additional measures be put in place to allow the
authenticity of the release to be verified.
</p>
<p>
- While Maven will currently deploy an MD5 checksum along with your
distribution, this is only used to verify
- download integrity. In many environments where there is public
distribution over the internet, it is
- recommended that additional security be put in place to verify the
authenticity of the release.
+ It is therefore recommended that (in these cases), an <a
href='http://www.ietf.org/html.charters/openpgp-charter.html'>OpenPGP</a>
+ compatible digital signature is also created.
+ The original signatures and (most importantly) the public keys used to
sign the releases
+ should be held on a tightly secured central server.
+ (Most users will need to download the public key but may not be able
to verify it using the
+ <a href='http://www.gnupg.org/gph/en/manual.html#AEN385'>web of
trust</a>.
+ It is therefore vital that they can download the key from a secure
server.)
+ The public key should also be made available through a public key
server (for example,
+ <a href='http://pgp.mit.edu'>the MIT key server</a>) and efforts made
to link it strongly into the web of trust.
+ It is of crucial importance that all private keys used to sign
releases be kept
+ <a href='http://www.gnupg.org/gph/en/manual.html#AEN513'>secure</a>.
</p>
<p>
- While Maven does not currently support automatically generating it,
it is recommended that you sign your
- release using GPG, and provide the original signatures only on the
tightly secured central server, instead of
- on distribution mirrors.
+ Since Maven does not currently support automatically generating
digital signatures,
+ it is recommended that you sign your release using <a
href='http://www.gnupg.org'>GPG</a>
+ (or some other OpenPGP compatible application).
</p>
</subsection>
<subsection name="Republish the Site">
@@ -129,7 +155,9 @@
</subsection>
<subsection name="Announce the Release">
<p>
- Finally, after the release is out, checked, and propogated to the
mirrors, you will want to make announcements.
+ Finally, after the release is out and checked, you will want to make
announcements to tell the world
+ about it. Here again, maven can help. (If you are using a
sophisticated distribution system with mirroring,
+ you should wait until the mirrors have sync'd before making the
annoucements.)
</p>
<p>
If you are maintaining a change record, you can use the
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]