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>

Reply via email to