The Fabric3 assembly plugin is used to create a runtime image as part of an automated, reproducible Maven build process. The plugin downloads the Fabric3 standalone runtime as well as required profiles and extensions and application contributions. In addition, it can apply custom configuration to the runtime image. The Fabric3 assembly plugin will use these artifacts to create a runtime distribution complete with installed application contributions. During a Maven release process, the runtime image can be uploaded to a Maven repository where it can be accessed by IT automation software during system deployment.
Plugin Setup
When executed, the Fabric3 assembly plugin will place the resulting runtime image in the project.build.directory/image
directory. The Fabric3 assembly plugin is typically used in conjunction with the Maven assembly plugin to produce a compressed archive. This can be done as follows:
Code Block |
---|
|
<plugins>
<plugin>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>fabric3-assembly-plugin</artifactId>
<version>${fabric3.version}</version>
<executions>
<execution>
<id>fabric3-assembly</id>
<goals>
<goal>fabric3-assembly</goal>
</goals>
</execution>
</executions>
<configuration>
<runtimeVersion>${fabric3.version}</runtimeVersion>
<contributions>
<dependency>
<groupId>org.fabric3.samples</groupId>
<artifactId>gateway</artifactId>
<version>${app.version}</version>
</dependency>
<contributions>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${assembly.version}</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
|
...
Code Block |
---|
|
<assembly ....>
<id>bin</id>
<baseDirectory>${project.build.directory}</baseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<outputDirectory>/</outputDirectory>
<directory>${project.build.directory}/image</directory>
</fileSet>
</fileSets>
</assembly> |
Adding Contributions
Contributions are added using the contributions
element of the plugin configuration
as shown in the previous example. Note that the order of the contributions is not important: at startup, Fabric3 will introspect and order the contributions based on declared dependencies such as Java package imports (for details of dependency ordering, see Contribution Modularity).
...
Code Block |
---|
|
<plugins>
<plugin>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>fabric3-assembly-plugin</artifactId>
...
<configuration>
<runtimeVersion>${fabric3.version}</runtimeVersion>
<contributionTarget>controller</contributionTarget>
<contributions>
<dependency>
<groupId>org.fabric3.samples</groupId>
<artifactId>gateway</artifactId>
<version>${app.version}</version>
</dependency>
<contributions>
</configuration>
</plugin>
...
</plugins>
|
...
Code Block |
---|
|
<plugins>
<plugin>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>fabric3-assembly-plugin</artifactId>
<version>${fabric3.version}</version>
.....
<configuration>
<runtimeVersion>${fabric3.version}</runtimeVersion>
<configurationFiles>
<copy>
<source>../../../config/security.xml</source>
<destination>runtimes/vm/config</destination>
</copy>
</configurationFiles>
</configuration>
</plugin>
</plugins> |
...
Code Block |
---|
<config>
...
<scanner production="true"/>
</config> |
Profiles and Extensions
Specifying profiles and extensions to include in the runtime image is done using the profiles
and extensions
elements respectively:
Code Block |
---|
|
<plugins>
<plugin>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>fabric3-assembly-plugin</artifactId>
<version>${fabric3.version}</version>
<executions>
<execution>
<id>fabric3-assembly</id>
<goals>
<goal>fabric3-assembly</goal>
</goals>
</execution>
</executions>
<configuration>
<runtimeVersion>${fabric3.version}</runtimeVersion>
<profiles>
<!-- JMS support -->
<profile>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>profile-jms</artifactId>
<version>${fabric3.version}</version>
</profile>
<!-- JAX-RS support -->
<profile>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>profile-rs</artifactId>
<version>${fabric3.version}</version>
</profile>
</profiles>
<!-- add contributions -->
<contributions>
<dependency>
<groupId>org.fabric3.samples</groupId>
<artifactId>gateway</artifactId>
<version>${app.version}</version>
</dependency>
<dependency>
<groupId>org.fabric3.samples</groupId>
<artifactId>backend</artifactId>
<version>${app.version}</version>
</dependency>
</contributions>
<!-- overlay configuration -->
<configurationFiles>
<copy>
<source>../../../config/security.xml</source>
<destination>runtimes/vm/config</destination>
</copy>
</configurationFiles>
</configuration>
</plugin>
</plugins>
|
Excluding Extensions
Runtime extensions included as part of the standard standalone runtime distribution can be removed using the removeExtensions
element:
Code Block |
---|
|
<plugins>
<plugin>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>fabric3-assembly-plugin</artifactId>
...
<configuration>
<runtimeVersion>${fabric3.version}</runtimeVersion>
<!-- add contributions -->
<contributions>
<dependency>
<groupId>org.fabric3.samples</groupId>
<artifactId>gateway</artifactId>
<version>${app.version}</version>
</dependency>
<dependency>
<groupId>org.fabric3.samples</groupId>
<artifactId>backend</artifactId>
<version>${app.version}</version>
</dependency>
</contributions>
<!-- overlay configuration -->
<removeExtensions>
<dependency>
<groupId>org.codehaus.fabric3</groupId>
<artifactId>fabric3-management-jmx</artifactId>
<version>${app.version}</version>
</dependency>
</removeExtensions>
</configuration>
</plugin>
</plugins>
|
...