# Minimal webconsole example for the Sling crankstart launcher

# Set bootstrap classpath, mvn: protocol can be used
classpath mvn:org.apache.felix/org.apache.felix.framework/4.4.0
classpath mvn:org.osgi/org.osgi.compendium/4.2.0
classpath mvn:org.slf4j/slf4j-api/1.6.2
classpath mvn:org.slf4j/slf4j-simple/1.6.2
classpath mvn:org.ops4j.pax.url/pax-url-aether/1.6.0
classpath mvn:org.ops4j.pax.url/pax-url-commons/1.6.0

# Except the bootstrap launcher, crankstart jars are also provided via classpath
classpath mvn:org.apache.sling/org.apache.sling.crankstart.core/0.0.1-SNAPSHOT
classpath mvn:org.apache.sling/org.apache.sling.crankstart.api/0.0.1-SNAPSHOT

# Set OSGi framework properties
osgi.property org.osgi.service.http.port 1234

# Once OSGi properties are set, start the framework
start.framework

# Install a minimal set of bundles for now, just to 
# demonstrate that we can start the webconsole.
# mvn: protocol can be used.
bundle mvn:org.apache.felix/org.apache.felix.configadmin/1.2.8
bundle mvn:org.apache.felix/org.apache.felix.http.jetty/2.2.0
bundle mvn:org.apache.felix/org.apache.felix.metatype/1.0.4
bundle mvn:org.apache.felix/org.apache.felix.scr/1.6.0
bundle mvn:org.apache.felix/org.apache.felix.webconsole/3.1.6
bundle mvn:org.apache.sling/org.apache.sling.commons.log/2.1.2

# Start all bundles and log a friendly message
start.all.bundles
log OSGi webconsole should soon be available at http://localhost:1234/system/console
 