[关闭]
@lsmn 2015-09-13T00:41:42.000000Z 字数 2353 阅读 2609

Capsule:支持容器的JVM应用程序打包部署工具

JVM JAR 打包 部署 容器


摘要

近日,Parallel Universe宣布,Capsule 1.0正式发布。这是一个简洁、健壮而又不失灵活的开源JVM应用程序部署工具。它可以用于部署桌面应用程序、微服务或复杂的Web应用程序,而且不仅支持Java应用程序,还支持其它所有的JVM语言,如JRuby、Jython、Groovy、Clojure、OCaml-Java等。

正文

尽管JVM应用程序对环境的依赖非常小,但让人奇怪的是,现在并没有一种通用又好用的JVM应用程序部署工具。Fat JAR不支持本地库,而且需要特定于平台的脚本。Docker太笨重,而且作为一个运行时无关的工具,无法利用JVM的优势。近日,Parallel Universe宣布Capsule 1.0正式发布。这是一个简洁、健壮而又不失灵活的开源JVM应用程序部署工具。它可以用于部署桌面应用程序、微服务或复杂的Web应用程序,而且不仅支持Java应用程序,还支持其它所有的JVM语言,如JRubyJythonGroovyClojureOCaml-Java等。用户可以将它视为一个增强版的Fat JAR和一个一体的声明式启动脚本;也可以将它视为构建工具伴侣,构建工具负责构建,而它负责应用程序构建与启动之间的事情。Capsule主要遵循如下设计原则:

Capsule能在提供所有这些功能的同时保持简洁,主要得益于caplets。用户可以使用它们定制capsule的行为。Caplets可以嵌入到capsule中,也可以单独打包。Maven caplet是Capsule的第一个caplet。它允许用户在manifest属性中声明应用程序的部分或全部依赖,而不用将它们嵌入到capsule JAR中。让我们看一个例子,这是一个简单的Hello World Servlet。构建完成后,它会创建一个标准的WAR文件。该文件可以部署到任何Servlet容器,其内容如下:

247     META-INF/MANIFEST.MF
1124    WEB-INF/classes/co/paralleluniverse/examples/HelloWorldServlet.class
653     WEB-INF/web.xml
161596  Capsule.class
1467463 capsule-maven-1.0.jar

可以看到,WAR文件中包含Capsule类,表明该文件是一个capsule。它还嵌入了一个JAR包 capsule-maven-1.0.jar,这是一个Maven caplet,其JAR manifest文件内容如下:

Manifest-Version: 1.0
Main-Class: Capsule
Premain-Class: Capsule
Caplets: co.paralleluniverse:capsule-maven:1.0
Application: org.eclipse.jetty:jetty-runner:9.3.3.v20150827
Allow-Snapshots: true
Min-Java-Version: 1.7.0
Args: $CAPSULE_JAR

如果该capsule真正执行,那么它会自动下载Jetty,并使用它启动该Servlet。此外,Capsule还提供了如下caplet:

此外,与Docker相比,capsule容器更轻量级,构建速度更快。而且,由于capsule在没有特权的容器中运行,所以更安全:在容器中进行root访问不会转变成主机上的root访问。借助Shield caplet(即安全caplet),使用如下代码就可以让Web应用程序quasar-stocks在容器中运行:

java -jar capsule-shield-0.1.0.jar quasar-stocks-thin.jar

要了解更多信息,请查看Capsule网站用户指南

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注