Has anyone created a Gradle build script to create a custom Karaf assembly?
I work on project whose application is developed on a network with Internet access, but runs on a standalone computer (no Internet access). We currently create a custom Karaf assembly using Maven and then install the assembly on the the standalone computer. The project has to move its development environment to a network without any Internet access. Running Maven on this isolated network is problematic, so we are switching to Gradle. We have successfully built and tested the individual modules that go into the custom Karaf assembly. However, we are having trouble creating a Gradle build script that creates the custom Karaf assembly. The specific problems that we are having are: - identifying dependencies and copying them to the system directory - identifying the three Karaf library jar files and copying them to the lib directory - creating a feature file as a separate artifact - creating a jar file that only contains resources (for branding) I was hoping that someone had some experience that could provide some insight and be able to answer questions. I've attatched the pom.xml that we are currently using with Maven so that it is clear what we need to do in Gradle. Thanks, Tim
<?xml version="1.0" encoding="UTF-8"?> <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"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp</artifactId> <version>2.6.2-SNAPSHOT</version> </parent> <artifactId>scimitar</artifactId> <version>5.0.0-SNAPSHOT</version> <packaging>bundle</packaging> <name>VP Scimitar</name> <description>VP Scimitar application package</description> <properties> <!-- MRSL software versions --> <autotasker.version>1.4.4-SNAPSHOT</autotasker.version> <cluster.version>1.0.0-SNAPSHOT</cluster.version> <correlator.version>1.1.0-SNAPSHOT</correlator.version> <cwd.version>1.5.5-SNAPSHOT</cwd.version> <database.version>1.2.0-SNAPSHOT</database.version> <framework.version>1.5.5-SNAPSHOT</framework.version> <identification.version>1.0.0-SNAPSHOT</identification.version> <legacy.version>1.6.6-SNAPSHOT</legacy.version> <legacy.identification.version>3.16-SNAPSHOT</legacy.identification.version> <legacy.sdw.measurement.version>3.0.2-SNAPSHOT</legacy.sdw.measurement.version> <normalizer.version>1.0.0-SNAPSHOT</normalizer.version> <rtt.version>1.4.4-SNAPSHOT</rtt.version> <rules.version>1.1.1-SNAPSHOT</rules.version> <schemas.version>1.5.0-SNAPSHOT</schemas.version> <scimitar.stream.version>1.5.5-SNAPSHOT</scimitar.stream.version> <sdw.agg.version>1.4.4-SNAPSHOT</sdw.agg.version> <types.version>1.2.0-SNAPSHOT</types.version> <!-- Other software versions --> <bnd.version>1.50.0</bnd.version> </properties> <dependencies> <!-- The following dependencies will be installed in the lib directory. --> <dependency> <groupId>org.apache.karaf</groupId> <artifactId>org.apache.karaf.main</artifactId> <version>${org.apache.karaf.main.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf</groupId> <artifactId>org.apache.karaf.client</artifactId> <version>${org.apache.karaf.client.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.jaas</groupId> <artifactId>org.apache.karaf.jaas.boot</artifactId> <version>${org.apache.karaf.jaas.boot.version}</version> <scope>compile</scope> </dependency> <!-- The following dependencies will be installed in the system repository. --> <!-- OSGi bundles --> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> <version>${org.osgi.core.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.compendium</artifactId> <version>${org.osgi.compendium.version}</version> <scope>compile</scope> </dependency> <!-- Apache Aries bundles --> <dependency> <groupId>org.apache.aries.blueprint</groupId> <artifactId>org.apache.aries.blueprint</artifactId> <version>${org.apache.aries.blueprint.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.aries.proxy</groupId> <artifactId>org.apache.aries.proxy</artifactId> <version>${org.apache.aries.proxy.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.aries</groupId> <artifactId>org.apache.aries.util</artifactId> <version>${org.apache.aries.util.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.servicemix.bundles</groupId> <artifactId>org.apache.servicemix.bundles.asm</artifactId> <version>${org.apache.servicemix.bundles.asm.version}</version> <scope>compile</scope> </dependency> <!-- Apache Felix bundles --> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.framework</artifactId> <version>${org.apache.felix.framework.version}</version> <scope>compile</scope> <exclusions> <exclusion> <groupId>org.apache.felix</groupId> <artifactId>org.osgi.compendium</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.configadmin</artifactId> <version>${org.apache.felix.configadmin.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.fileinstall</artifactId> <version>${org.apache.felix.fileinstall.version}</version> <scope>compile</scope> </dependency> <!-- Apache Karaf bundles --> <dependency> <groupId>org.apache.karaf.features</groupId> <artifactId>org.apache.karaf.features.command</artifactId> <version>${org.apache.karaf.features.command.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.features</groupId> <artifactId>org.apache.karaf.features.core</artifactId> <version>${org.apache.karaf.features.core.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.jaas</groupId> <artifactId>org.apache.karaf.jaas.config</artifactId> <version>${org.apache.karaf.jaas.config.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.jaas</groupId> <artifactId>org.apache.karaf.jaas.modules</artifactId> <version>${org.apache.karaf.jaas.modules.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.commands</artifactId> <version>${org.apache.karaf.shell.commands.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.console</artifactId> <version>${org.apache.karaf.shell.console.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.dev</artifactId> <version>${org.apache.karaf.shell.dev.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.log</artifactId> <version>${org.apache.karaf.shell.log.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.osgi</artifactId> <version>${org.apache.karaf.shell.osgi.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.packages</artifactId> <version>${org.apache.karaf.shell.packages.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.wrapper</artifactId> <version>${org.apache.karaf.shell.wrapper.version}</version> <scope>compile</scope> </dependency> <!-- OPS4J bundles --> <dependency> <groupId>org.ops4j.pax.logging</groupId> <artifactId>pax-logging-api</artifactId> <version>${pax-logging-api.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.ops4j.pax.logging</groupId> <artifactId>pax-logging-service</artifactId> <version>${pax-logging-service.version}</version> <scope>compile</scope> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.ops4j.pax.url</groupId> <artifactId>pax-url-mvn</artifactId> <version>${pax-url-mvn.version}</version> <scope>compile</scope> </dependency> <!-- build tools --> <dependency> <groupId>biz.aQute</groupId> <artifactId>bnd</artifactId> <version>${bnd.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet.api.version}</version> <scope>provided</scope> </dependency> <!-- Bundles referenced in the features repository --> <!-- http feature bundles --> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.http.bundle</artifactId> <version>${org.apache.felix.http.version}</version> <scope>compile</scope> </dependency> <!-- webconsole feature bundles --> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.metatype</artifactId> <version>${org.apache.felix.metatype.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.webconsole</artifactId> <version>${org.apache.felix.webconsole.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.webconsole</groupId> <artifactId>org.apache.karaf.webconsole.features</artifactId> <version>${org.apache.karaf.webconsole.features.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.karaf.webconsole</groupId> <artifactId>org.apache.karaf.webconsole.gogo</artifactId> <version>${org.apache.karaf.webconsole.gogo.version}</version> <scope>compile</scope> </dependency> <!-- the Ajax framework bundles --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>net.kadigan</groupId> <artifactId>net.kadigan.util</artifactId> <version>${net.kadigan.util.version}</version> <scope>compile</scope> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>${mongo.driver.version}</version> </dependency> <!-- the VP bundles --> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.autotasker</artifactId> <version>${autotasker.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.cluster</artifactId> <version>${cluster.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.correlator</artifactId> <version>${correlator.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.cwd</artifactId> <version>${cwd.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.database</artifactId> <version>${database.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.framework</artifactId> <version>${framework.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.identification</artifactId> <version>${identification.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.legacy</artifactId> <version>${legacy.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp.legacy</groupId> <artifactId>com.mrsl.vp.legacy.identification</artifactId> <version>${legacy.identification.version}</version> <scope>provided</scope> <type>nar</type> </dependency> <dependency> <groupId>com.mrsl.vp.legacy</groupId> <artifactId>com.mrsl.vp.legacy.sdw.measurement</artifactId> <version>${legacy.sdw.measurement.version}</version> <scope>provided</scope> <type>nar</type> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.normalizer</artifactId> <version>${normalizer.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.rtt</artifactId> <version>${rtt.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.rules</artifactId> <version>${rules.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.schemas</artifactId> <version>${schemas.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.scimitar.stream</artifactId> <version>${scimitar.stream.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.sdw.agg</artifactId> <version>${sdw.agg.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mrsl.vp</groupId> <artifactId>com.mrsl.vp.types</artifactId> <version>${types.version}</version> <scope>provided</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>${project.basedir}/src/main/filtered-resources</directory> <filtering>true</filtering> <includes> <include>**/*</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package>org.apache.karaf.branding;version=${project.version}</Export-Package> <Include-Resource>{org/apache/karaf/branding/branding.properties=src/main/filtered-resources/org/apache/karaf/branding/branding.properties}</Include-Resource> </instructions> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>attach-artifacts</id> <phase>package</phase> <goals> <goal>attach-artifact</goal> </goals> <configuration> <artifacts> <artifact> <file>target/classes/features.xml</file> <type>xml</type> <classifier>features</classifier> </artifact> </artifacts> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>org.apache.karaf</groupId> <artifactId>org.apache.karaf.main</artifactId> <outputDirectory>${project.build.directory}/dependencies/lib</outputDirectory> <destFileName>karaf.jar</destFileName> </artifactItem> <artifactItem> <groupId>org.apache.karaf</groupId> <artifactId>org.apache.karaf.client</artifactId> <outputDirectory>${project.build.directory}/dependencies/lib</outputDirectory> <destFileName>karaf-client.jar</destFileName> </artifactItem> <artifactItem> <groupId>org.apache.karaf.jaas</groupId> <artifactId>org.apache.karaf.jaas.boot</artifactId> <outputDirectory>${project.build.directory}/dependencies/lib</outputDirectory> <destFileName>karaf-jaas-boot.jar</destFileName> </artifactItem> </artifactItems> </configuration> </execution> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <excludeArtifactIds>org.apache.karaf.main,org.apache.karaf.client,org.apache.karaf.jaas.boot</excludeArtifactIds> <excludeTransitive>true</excludeTransitive> <includeScope>compile</includeScope> <outputDirectory>${project.build.directory}/dependencies/system</outputDirectory> <useRepositoryLayout>true</useRepositoryLayout> </configuration> </execution> <execution> <id>copy-legacy</id> <phase>package</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>com.mrsl.vp.legacy</groupId> <artifactId>com.mrsl.vp.legacy.identification</artifactId> <version>${legacy.identification.version}</version> <type>nar</type> <classifier>i386-Linux-gpp-executable</classifier> </artifactItem> <artifactItem> <groupId>com.mrsl.vp.legacy</groupId> <artifactId>com.mrsl.vp.legacy.sdw.measurement</artifactId> <version>${legacy.sdw.measurement.version}</version> <type>nar</type> <classifier>i386-Linux-gpp-executable</classifier> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptors> <descriptor>src/main/assembly/release.xml</descriptor> </descriptors> <appendAssemblyId>false</appendAssemblyId> <tarLongFileMode>gnu</tarLongFileMode> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <configuration> <filesets> <fileset> <directory>${basedir}</directory> <includes> <include>${project.build.finalName}</include> <include>**/*~</include> </includes> </fileset> </filesets> </configuration> </plugin> </plugins> </build> </project>
