# 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
osgi.property org.osgi.framework.startlevel.beginning 32
osgi.property felix.startlevel.bundle 22

# 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
 
