Title: EBAMavenPluginProject

<a name="EBAMavenPluginProject-EBAMavenPlugin"></a>
# EBA Maven Plugin

The EBA Maven Plugin provides the ability to generate EBA archives using
Maven.	The EBA archive format is described in [Applications](applications.html)
.  An EBA archive can optionally contain an Application manifest
(APPLICATION.MF).  This can be added in one of two ways

1. Hand written and added into the archive.
1. Generated based on pom configuration.

<a name="EBAMavenPluginProject-UsingthePlugin"></a>
## Using the Plugin

The plugin is included by as follows:


        <build>
    	<plugins>
    	    <plugin>
    		<groupId>org.apache.aries</groupId>
    		<artifactId>eba-maven-plugin</artifactId>
    	    </plugin>
    	</plugins>
        </build>


By default it will not generate a manifest, so in the above example it will
attempt to copy a pre-defined APPLICATION.MF from
src/main/resources/META-INF.  If that file does not exist, then no
application manifest will be included.

<a name="EBAMavenPluginProject-GeneratinganAPPLICATION.MF"></a>
## Generating an APPLICATION.MF

The following example shows how to get the plugin to generate an
APPLICATION.MF based on the pom configuration:


        <build>
    	<plugins>
    	    <plugin>
    		<groupId>org.apache.aries</groupId>
    		<artifactId>eba-maven-plugin</artifactId>
    		<configuration>
    		    <generateManifest>true</generateManifest>
    		</configuration>
    	    </plugin>
    	</plugins>
        </build>


The pom to application manfiest header mapping is as follows:
* Pom <groupId/>.<artifactId/> -> Application-SymbolicName
* Pom <name/> -> Application-Name
* Pom <version/> -> Application-Version (cleaned up for OSGi)
* Pom <description/> -> Application-Description
* Pom <dependencies/> -> Application-Content

<a name="EBAMavenPluginProject-OverridingApplication-SymbolicName"></a>
## Overriding Application-SymbolicName

The application symbolic name defaults to the
$\{project.groupId\}.$\{project.artifaceId\}.  The following shows how to override
this:


    <configuration>
      <instructions>
        <Application-SymbolicName>${project.artifaceId}</Application-SymbolicName>
      </instructions>
    </configuration>


<a name="EBAMavenPluginProject-AddingApplication-ExportServiceandApplication-ImportServiceheaders"></a>
## Adding Application-ExportService and Application-ImportService headers

The application import service and export service headers can be set as
follows.  The text inside the elements is included as-is.


    <configuration>
      <instructions>
        <Application-ExportService>...</Application-ExportService>
        <Application-ImportService>...</Application-ImportService>
      </instructions>
    </configuration>

<a name="EBAMavenPluginProject-AddingUseBundleheader"></a>
## Adding the Use-Bundle header

The application Use-Bundle header can be set as
follows.  The text inside the elements is included as-is.


    <configuration>
      <instructions>
        <Use-Bundle>...</Use-Bundle>
      </instructions>
    </configuration>

<a name="EBAMavenPluginProject-Includingtransitivedependencies"></a>
## Including transitive dependencies (deprecated)

This configuration option is deprecated in favor of <archiveContent />.

By default, the archive will only include the direct dependencies of the
project.  Transitive dependencies can be includes as follows:

    <configuration>
      <useTransitiveDependencies>true</useTransitiveDependencies>
    </configuration>

<a name="EBAMavenPluginProject-Archivecontent"></a>
## Including bundles in the archive

By default, the archive will only include the direct dependencies of the project.  The `<archiveContent/>` element can be used to control the archive artifact contents.  The following shows how to include all direct and transitive dependencies.

    <configuration>
      <archiveContent>all</archiveContent>
    </configuration>

The following shows how to exclude all dependencies from the archive.  This is useful if you just want the application definition and will use a bundle repository to provision the bundles during deployment.

    <configuration>
      <archiveContent>none</archiveContent>
    </configuration>

The following specifies the default of including only the direct dependencies (assumes the application contents and direct dependencies are the same).

    <configuration>
      <archiveContent>applicationContent</archiveContent>
    </configuration>


