# Maven plugin

To support the development of OSGi bundles for Eclipse Virgo with Maven a Maven plugin is available. This plugin is able to start/stop a local Eclipse Virgo instance. Moreover it is possible to deploy/undeploy/refresh bundles via Maven.

## Build

In order to use the plugin one has to download the source code from Github and build the binary manually. This can be easily done by executing the following Maven command in the root folder of the plugin where the pom.xml file is located.

    mvn clean install

Moreover to generate the documentation just execute the following Maven command (or take the one provided in the repository on Github).

    mvn clean&nbsp;plugin:xdoc javadoc:javadoc jxr:jxr site

## Goals

The plugin provides a set of Maven goals that allow different actions.

Goal | Description
<code>virgo:start</code> | Starts a Virgo instance by executing the provided startup script.
<code>virgo:shutdown</code> | Stops a running Virgo instance.
<code>virgo:immediateShutdown</code> | Stops a running Virgo instance immediately.
<code>virgo:deploy</code> | Deploys an OSGi bundle to a running Virgo instance.
<code>virgo:undeploy</code> | Undeploys an OSGi bundle from a running Virgo instance.
<code>virgo:refresh</code> | Refreshs an already installed module on a running Virgo instance.
<code>virgo:bundleRefresh</code> | Refreshs an already installed OSGi bundle on a running Virgo instance.

## Simple example POM

Once the plugin has been build and installed in the local Maven repository it can be used within a Maven project. Following is a simple example of a pom file that uses the Maven plugin.

    &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
    	&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    	&lt;groupId&gt;org.example.osgi&lt;/groupId&gt;
    	&lt;artifactId&gt;test-bundle&lt;/artifactId&gt;
    	&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
    	&lt;packaging&gt;bundle&lt;/packaging&gt;
    	&lt;name&gt;OSGi Test Bundle&lt;/name&gt;
    	&lt;properties&gt;
    		&lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
    	&lt;/properties&gt;
    	&lt;build&gt;
    		&lt;plugins&gt;
    			&lt;plugin&gt;
    				&lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
    				&lt;artifactId&gt;maven-bundle-plugin&lt;/artifactId&gt;
    				&lt;version&gt;2.3.6&lt;/version&gt;
    				&lt;extensions&gt;true&lt;/extensions&gt;
    				&lt;configuration&gt;
    					&lt;instructions&gt;
    						&lt;Bundle-SymbolicName&gt;${project.groupId}.${project.artifactId}&lt;/Bundle-SymbolicName&gt;
    						&lt;Bundle-Name&gt;${project.name}&lt;/Bundle-Name&gt;
    						&lt;Bundle-Version&gt;${project.version}&lt;/Bundle-Version&gt;
    					&lt;/instructions&gt;
    				&lt;/configuration&gt;
    			&lt;/plugin&gt;
    			&lt;plugin&gt;
    				&lt;groupId&gt;net.flybyte.virgo&lt;/groupId&gt;
    				&lt;artifactId&gt;virgo-maven-plugin&lt;/artifactId&gt;
    				&lt;version&gt;1.0.0&lt;/version&gt;
    				&lt;configuration&gt;
    					&lt;virgoRoot&gt;C:/Java/virgo-tomcat-server-3.0.2.RELEASE&lt;/virgoRoot&gt;
    				&lt;/configuration&gt;
    			&lt;/plugin&gt;
    		&lt;/plugins&gt;
    	&lt;/build&gt;
    &lt;/project&gt;

More examples can be found in the documentation. Following are some exemplary Maven commands.

    mvn virgo:start &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;-- will start a Virgo instance
    mvn clean package virgo:deploy &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;-- will create an artifact and deploy it to Virgo