A Plugin has to be constructed in exactly the right way to allow installation - there are several places where data is unavoidably replcated.
Currently there is no way to automatically ensure that the build will be correct, so this page provides a check list
Pre Build Checks
For the parent project
Ensure that the parent project versions are correct. For full release the parent project should be a non-snapshot release)
Check that the dependency versions are non SNAPSHOT.
Note that for various javadoc reasons the java-parent project defines version properties for java-support, opensaml and spring-extensions, so you will only need to add these if you are depending on a currently unreleased version. At time of release these should be removed and the parent pom version matched to the ones used to build the idp (assuming that the parent pom has been moved forward). This ensures that your plugin does not require features not available on the IdP. If the version properties have to be present (because the parent pom is out of date) then the values must be equal to or less than the versio in the idp. But it's easier to start by removing them.
In the dist project
Ensure that src/main/resources/bootstrap/idp.property exists and defines a propery pluginId which must be the same as the value returned by #getPluginId() in the Dwescription
Optionally check that src/main/resources/bootstrap/keys.txt contains the public key for corresponding to the private key you are going to sign the package with (see PluginTrust
Ensure that any license information is up to date usually in src/main/resources/bootstrap/doc/....
In the impl project
Ensure that the version numbers returned from the plugin description match the version you are about to build (and as defined in the pom)
Ensure that getUpdateURLs() returns a non-empty list of https URLs pointing to property files that you have write permission for
A source control system with a web front end works very well
Build in the usual manner and upload the version to a website. Maven works well
Post Build Work
Update the version number in the Description to match the pom
Update the property file to reflect the new release.
Change the supportLevel of the old version appropriately. Levels are defined in net.shibboleth.idp.plugin.PluginSupport.SupportLevel (in idp module idp=admin-api} and currently consist of
Add downloadURL and baseName information about the new release.
The idpVersionMin for the new release will usually be the version of the IdP that that version of the plugin was built against.