Skip to content

Instantly share code, notes, and snippets.

@antoniomaria
Created April 12, 2016 06:46
Show Gist options
  • Save antoniomaria/59e66efa5642f74a7412e960835f3f1d to your computer and use it in GitHub Desktop.
Save antoniomaria/59e66efa5642f74a7412e960835f3f1d to your computer and use it in GitHub Desktop.
Gradle Karaf assembly
apply plugin: 'base'
configurations {
runtime
paxlogback
}
dependencies {
runtime "org.apache.karaf:apache-karaf:$karafVersion@zip"
paxlogback "ch.qos.logback:logback-core:$logbackVersion@jar"
paxlogback "org.ops4j.pax.logging:pax-logging-logback:$paxLogbackVersion@jar"
}
/**
* Download fresh karaf and unzip it
*/
task prepareKaraf << {
copy {
from configurations.runtime
into "build/dependencies"
}
// Unzip fresh karaf
copy{
from zipTree(file("${buildDir}/dependencies/apache-karaf-${karafVersion}.zip"))
into file("${buildDir}/dependencies")
}
copy {
from "${buildDir}/dependencies/apache-karaf-$karafVersion"
into "${buildDir}/assembly"
}
}
/**
* Replace pax-logging implentation to logback
* Use this syntax in order to use default implentation:
* $ gradle assemble -x addLogbackSupport
*/
task addLogbackSupport(dependsOn: 'prepareKaraf') << {
copy{
from ("${buildDir}/dependencies/apache-karaf-${karafVersion}/etc"){
include "startup.properties"
filter { line -> line.contains('pax-logging-service') ? "mvn\\:org.ops4j.pax.logging/pax-logging-logback/${paxLogbackVersion} = 8\nmvn\\:ch.qos.logback/logback-core/${logbackVersion} = 8" : line }
}
into "${buildDir}/assembly/etc"
}
copy{
from ("src/main/resources/etc"){
include "logback.xml"
include "devicegateway-logback-included.xml"
include "org.ops4j.pax.logging.cfg"
}
into "${buildDir}/assembly/etc"
}
copy{
def fileRenameMap = [:];
from configurations.paxlogback.resolvedConfiguration.resolvedArtifacts.collect {
dependency ->
def groupAsPath = dependency.moduleVersion.id.group.replace('.' as char, File.separatorChar)
def version = dependency.moduleVersion.id.version
def newFileName = "${groupAsPath}/${dependency.name}/${version}/${dependency.name}-${version}.${dependency.type}"
fileRenameMap[dependency.file.name] = newFileName
dependency.file
}
rename { oldName -> fileRenameMap[oldName] }
into("${buildDir}/assembly/system")
}
}
//for Ant filter
import org.apache.tools.ant.filters.ReplaceTokens
/**
* Populate feature repository with features
*/
task addFilteredResources(type: Copy) {
from('src/main/resources/etc') {
include 'org.apache.karaf.features.cfg'
include 'branding.properties'
filter(ReplaceTokens, tokens : [
"version" : project.version,
"karafVersion" : karafVersion
])
}
into "${buildDir}/assembly/etc"
}
addFilteredResources.dependsOn prepareKaraf
/**
* Add static resources into assembly.
*/
task addStaticResources(type: Copy) {
from('src/main/resources/etc') {
include 'org.ops4j.pax.url.mvn.cfg'
include 'org.apache.karaf.management.cfg'
include 'org.apache.karaf.shell.cfg'
include 'org.ops4j.pax.web.cfg'
}
into "${buildDir}/assembly/etc"
}
addStaticResources.dependsOn prepareKaraf
/**
* Exclude certains system packages
*/
task adjustSystemExportedPackages() << {
copy{
from ("${buildDir}/dependencies/apache-karaf-${karafVersion}/etc"){
include "jre.properties"
filter { line -> line.contains("javax.xml.bind") ? "#$line": line }
}
into "${buildDir}/assembly/etc"
}
}
adjustSystemExportedPackages.dependsOn prepareKaraf
assemble.dependsOn addLogbackSupport
assemble.dependsOn addFilteredResources
assemble.dependsOn addStaticResources
assemble.dependsOn adjustSystemExportedPackages
task cleanKaraf() << {
delete "${buildDir}/assembly/data"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment