blob: 312a162aba42bffdb5bc994462a05a9708a651c7 [file] [log] [blame]
import groovy.jmx.builder.JmxBuilder
import java.util.HashMap;
import java.util.Map;
import java.nio.file.Files
import java.nio.file.Paths
import javax.management.MBeanServerConnection
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.TabularData
import javax.management.remote.JMXConnector;
// tag::custom_virgo_runtime_configuration[]
dockerizor {
repository = 'virgo-recipe/custom-virgo-runtime' // <1>
description = 'Virgo Recipe Custom Virgo (runtime-only) created with Gradle Plugin: com.eclipsesource.dockerizor'
createLocalCopy = true // <2>
}
// end::custom_virgo_runtime_configuration[]
repositories {
mavenCentral()
}
// tag::custom_virgo_runtime_dependencies[]
dependencies {
repositoryExt("org.mongodb:mongo-java-driver:${mongoJavaDriverVersion}") // <1>
repositoryUsr files("com.rabbitmq.amqp.client-${rabbitmqAmqpClientVersion}/build/com.rabbitmq.amqp.client-${rabbitmqAmqpClientVersion}.jar") // <2>
}
// end::custom_virgo_runtime_dependencies[]
task unzipRuntime(type: Copy, dependsOn: dockerize) {
outputs.upToDateWhen { false } // always unzip
def buildDir = project.buildDir
if (buildDir != null && buildDir.exists()) {
def fileNames = new FileNameByRegexFinder().getFileNames("${-> buildDir.absolutePath}", /.*\.tar/)
if (fileNames) {
def tarFile = fileNames.get(0)
def outputDir = file("${buildDir}")
from tarTree(tarFile)
into outputDir
}
}
}
// tag::task_start_virgo_runtime[]
task startVirgoRuntime(type:Exec, dependsOn: unzipRuntime) {
workingDir "${buildDir}/virgo"
//on Uni*
commandLine './bin/startup.sh'
}
// end::task_start_virgo_runtime[]
// OSGi-ify 3rd party dependencies
subprojects {
apply plugin: 'base'
repositories {
mavenCentral()
maven { url "http://build.eclipse.org/rt/virgo/maven/bundles/release" }
maven { url "http://repository.springsource.com/maven/bundles/external" }
}
configurations {
bundlorRuntime
sourceBundle
}
dependencies {
bundlorRuntime('org.eclipse.virgo.bundlor:org.eclipse.virgo.bundlor.commandline:1.1.2.RELEASE')
bundlorRuntime('org.eclipse.virgo.bundlor:org.eclipse.virgo.bundlor:1.1.2.RELEASE')
bundlorRuntime('org.eclipse.virgo.bundlor:org.eclipse.virgo.bundlor.blint:1.1.2.RELEASE')
}
def artifactName = project.name.split('-')[0]
def artifactVersion = project.name.split('-')[1]
task createBuildDir() {
doLast() {
file(project.buildDir).mkdir()
}
}
def outputFile = new File(file(project.buildDir), "${project.name}.jar")
// tag::task_bundlor[]
task bundlor(type: JavaExec, dependsOn: createBuildDir) {
classpath = configurations.bundlorRuntime
main = 'org.eclipse.virgo.bundlor.commandline.Bundlor'
args '-D', "version=${artifactVersion}"
args '-i', "${->configurations.sourceBundle[0]}" // lazy GString to resolve the configuration at runtime
args '-m', "${artifactName}.mf"
args '-o', outputFile
}
// end::task_bundlor[]
// tag::task_deploy[]
task('deploy', dependsOn: bundlor) << {
def virgoHome = project.parent.buildDir.absolutePath + "/virgo"
System.getProperties().put("javax.net.ssl.trustStore", virgoHome + "/configuration/keystore") // <1>
def client = new JmxBuilder().connectorClient(port: 9875, properties:[])
client.connect([ 'jmx.remote.credentials' : ['admin', 'admin' ] as String[] ]) // <2>
MBeanServerConnection server = client.getMBeanServerConnection()
ObjectName deployer = new ObjectName("org.eclipse.virgo.kernel:category=Control,type=Deployer"); // <3>
Object deploymentResult = server.invoke(deployer, "deploy", [outputFile.toURI().toString() ] as Object[],
[String.class.getName() ] as String[])
}
// end::task_deploy[]
dockerize.dependsOn bundlor
}