All the Java-based Shibboleth projects have a POM file that inherits the net.shibboleth:parent:*. This parent POM, found in the java-parent-project project, contains:

The result of this is that each project's metadata is significantly shorter and only contains project-specific information. Otherwise each project's POM would be around 1,000 lines long which would be a total pain to maintain.

Managed Dependencies

As mentioned above, the parent POM contains definitions for managed dependencies. These are dependencies that are defined within the parent POM but are not automatically available to projects which inherit from the parent POM. This allows us to peg the version, scope, and exclusions of the dependency across all the projects that use the dependency.

To use a managed dependency within a project, you define it like you normally would except you leave off the version. So, for example, to declare a dependncy on the Servlet API within your project you would add the following:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
</dependency>

The fact that the version we use is 3.1.0 and that this artifact has a scope of provided will be inherited from the parent POM.

Build Profiles

The parent POM defines two profiles.

The release profile includes:

The sign profile includes: