MicroBean Launcher lets you run a Java SE CDI 2.0 application from the command line by specifying Maven artifact coordinates to other bean archives, transitively resolving them and their dependencies, using MicroBean Maven CDI, to your local Maven repository.
To install MicroBean Launcher, place it (and its minimal dependencies) on your classpath.
Here is an example of its usage, assuming it and its dependencies are on your classpath already:
java org.microbean.launcher.main.Main --artifactPath com.foobar:frobnicator:1.0,com.foobar:caturgiator:2.0
This command will download, if necessary,
jar artifact at version
jar artifact at version
2.0. These files and their transitive compile- and runtime-scoped dependencies will be placed in the current user’s local Maven repository (
~/.m2/repository by default, but the user’s
~/.m2/settings.xml file, which can dictate where the local repository is, is honored). (If the artifacts already exist, then no download happens.) A classpath will be built out of all of these artifacts and effectively appended to the current classpath, and MicroBean Main will be invoked.
Why is this useful? For one, specifying a classpath can now be done in terms of Maven artifact coordinates instead of local filesystem references. Because MicroBean Maven CDI is in charge of dependency resolution using Maven’s own resolution machinery under the covers, you don’t need to be aware of whether the artifacts in question were downloaded or already present.
But more than this, note that in the last ten blog posts the installation instructions have been the same: you place whatever bean archive is being described on your classpath. This is one of the nice things about CDI: CDI archives are loosely coupled modules that can be discovered.
This means you can compose a Java SE CDI 2.0 application together by simply referring to Maven artifacts.
Specifically, assuming you have MicroBean Launcher and its dependencies on your
CLASSPATH, if you write, say, a JAX-RS
Application and a root resource class that it exposes, and place them on your classpath, then you can run that application immediately, downloading only what you need and only what you don’t already have, by running a command line similar to the following:
java org.microbean.launcher.main.Main --artifactPath org.microbean:microbean-jersey-container-grizzly2-http-cdi-extension,org.microbean:microbean-jersey-container-grizzly2-http-cdi,org.microbean:microbean-grizzly-http-server-cdi
Note in particular that your application remains standards-compliant, and you selected the server you wanted to use to run it dynamically from the command line. You wrote only the code you needed to and none other.
Note that the second time you run this all of the artifacts will already be present on your system.
These are early days for these personal projects and I’ll have plenty more to say about them in the future. Thanks for reading!