h1. Developer commands Karaf provides a set of commands specific for developer use. They allow for getting detailed detailed information about the Karaf instance and the applications running in them. h2. Diagnostic dump command Karaf provides a {{dev:create-dump}} command which creates a dump files containing diagnostic information. The dumps can be packaged in a zip archive (default) or directly into a given directory. {code} karaf@root> dev:create-dump Diagnostic dump created. {code} The previous command generates a zip archive in the KARAF_HOME (by default the name is the generation timestamp). The following dumps are available in the zip archive: * {{features.txt}} provides an overview of the features. It means: ** the repository list ** the feature list including bundles URL * {{bundles.txt}} provides an overview of the installed bundles, with the ID and the state of each bundle. * {{threads.txt}} provides a complete threads dump. It describe all threads running in Karaf and their current state (blocked, waiting, etc) with the associated class hierarchy. These dumps are very helpful when you would like to take a snapshot of a current Karaf running instance. h2. Dynamic import The {{dev:dynamic-import}} command allows you to enable or disable the dynamic import of a given bundle: {code} karaf@root> dev:dynamic-import 41 Enabling dynamic imports on bundle org.apache.karaf.shell.config [41] {code} h2. OSGi framework The {{dev:framework}} command shows you the current OSGi framework in use, and enables debugging of the underlying OSGi framework. {code} karaf@root> dev:framework Current OSGi framework is Felix karaf@root> dev:framework -debug Enabling debug for OSGi framework (Felix) - set felix.log.level=4 in etc/config.properties Restart Karaf now to enable Felix debug logging karaf@root> dev:framework -nodebug Disabling debug for OSGi framework (Felix) - removed felix.log.level from etc/config.properties Restart Karaf now to disable Felix debug logging {code} h2. Print stack trace The {{dev:print-stack-traces}} command prints the full stack trace in the console when the execution of a command throws an exception. You can enable or disable this behavior by passing true (to enable) or false (to disable) on the command on the fly: {code} karaf@root> dev:print-stack-traces karaf@root> osgi:start Error executing command osgi:start: argument ids is required org.apache.felix.gogo.commands.CommandException: Argument ids is required at org.apache.felix.gogo.commands.basic.DefaultActionPreparator.prepare(DefaultActionPreparator.java:284) at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:34) at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78) at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:474) at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:400) at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108) at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183) at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120) at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:79) at org.apache.karaf.shell.console.jline.Console.run(Console.java:180) at java.lang.Thread.run(Thread.java:619) karaf@root> dev:print-stack-traces false karaf@root> osgi:start Error executing command osgi:start: argument ids is required {code} h2. Karaf restart The {{dev:restart}} command allows you to restart the running Karaf instance: {code} karaf@root> dev:restart karaf@root> __ __ ____ / //_/____ __________ _/ __/ / ,< / __ `/ ___/ __ `/ /_ / /| |/ /_/ / / / /_/ / __/ /_/ |_|\__,_/_/ \__,_/_/ Apache Karaf (2.1.99-SNAPSHOT) Hit '' for a list of available commands and '[cmd] --help' for help on a specific command. Hit '' or 'osgi:shutdown' to shutdown Karaf. karaf@root> {code} h2. Bundle tree The {{dev:show-tree}} command shows the bundle dependency tree based on the wiring information of a given single bundle ID. {code} karaf@root> dev:show-tree 40 Bundle org.apache.karaf.diagnostic.command [40] is currently ACTIVE org.apache.karaf.diagnostic.command [40] +- org.apache.aries.blueprint [10] | +- org.apache.aries.util [8] | +- org.apache.felix.configadmin [5] | +- org.apache.aries.proxy [7] | | +- org.apache.aries.util [8] | | +- org.apache.servicemix.bundles.asm [9] | | +- org.ops4j.pax.logging.pax-logging-api [3] | +- org.ops4j.pax.logging.pax-logging-api [3] +- org.apache.karaf.shell.console [22] | +- org.apache.aries.blueprint [10] | +- org.ops4j.pax.logging.pax-logging-api [3] | +- org.apache.karaf.jaas.modules [13] | +- org.apache.aries.blueprint [10] | +- org.apache.felix.configadmin [5] | +- org.apache.karaf.jaas.config [29] | | +- org.apache.aries.blueprint [10] | | +- org.ops4j.pax.logging.pax-logging-api [3] | +- org.ops4j.pax.logging.pax-logging-api [3] +- org.apache.karaf.diagnostic.core [23] {code} h2. Watching and updating bundle The {{dev:watch}} watches and updates bundles. It's especially helpful in development mode. It allows you to configure a set of URLs that will be monitored. All bundles whose location matches the given URL will be automatically updated. This avoids needing to manually update the bundles or even copy the bundles to the system folder. Note that only Maven based URLs and Maven SNAPSHOTs will actually be updated automatically, so if you do: {code} karaf@root> dev:watch * {code} it will actually monitor all bundles that have a location matching mvn:* that have '-SNAPSHOT' in their URL.