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

\\

  • 打出的包要小、可移植、便捷:不管多复杂的JVM应用程序,经过Capsule打包后都只会生成一个名为capsule(注:Capsule指工具本身,capsule指由该工具生成的包)的可在所有平台上执行的JAR包。capsule可以直接包含所有的应用程序依赖,也可以仅仅声明部分或全部依赖,并在启动时下载。capsule本身也可以存放在Maven库中,然后在启动时下载。 \\
  • 最小化安装JVM应用程序对主机系统的影响,并提供更新支持选项:capsule首次安装时会在一个临时目录中创建一些文件,用户可以随时删除这些文件,并不会带来不良影响。capsule也可以根据需要查找更新。 \\
  • 启动必须有确定性,同时要灵活、安全,可以施加限制:启动capsule不需要脚本。它会自行查找所需的JVM版本,设置classpath和必要的代理及JVM标识。capsule在启动时还可以创建自己的容器。JVM应用程序可以在这个没有特权的容器中运行,并由JVM的安全机制提供安全保障。而且,所有这些功能都可以通过caplets进行编程和组合。 \\
  • 如果现有的工具满足要求,就不创建新的工具和标准:Capsule使用Java编写,可以用Java扩展。capsule被打包在一个可执行的JAR包中,所有的元数据均以JAR-manifest属性的形式存储。同其它所有构建工具插件一样,capsule本身就是一个简单的Maven依赖项。 \

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:

\\

  • 守护进程caplet:将capsule作为一个Unix守护进程或Windows服务启动; \\
  • 安全caplet:在Java沙箱中启动capsule; \\
  • 桌面caplet:将一个包含GUI应用程序的capsule转换成一个原生可执行程序; \\
  • 容器caplet:在容器中运行capsule。 \

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

\\

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

\\

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

\\


感谢郭蕾对本文的审校。

\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群)。

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

  1. c# winform 程序打包部署

    c# winform 程序打包部署 1 新建一个 c# 安装部署项目 2 在文件系统编辑器里把做好的项目的可执行文件及要用到的其它文件(相关dll及资源文件)添加进来(应用程序文件夹) 3 如果要在程 ...

  2. flask程序打包部署_如何使用Flask构建Web应用程序并将其部署到云中

    flask程序打包部署 by Salvador Villalon 萨尔瓦多·维拉隆(Salvador Villalon) 介绍 (Introduction) In each section, I wi ...

  3. .Net应用程序打包部署总结

    编译源代码并完成测试以后,开发过程其实并没有结束.在这个极端,需要把应用程序提供给用户.无论是ASP.NET应用程序,客户端应用程序还是 Compact Framework构建的应用程序,开发出来的软 ...

  4. VS2012程序打包部署详解

    2019独角兽企业重金招聘Python工程师标准>>> http://blog.csdn.net/zhang_xinxiu/article/details/9099757 转载于:h ...

  5. seajs打包部署工具spm的使用总结

    相信使用seajs的好处大家都是知道的,接触seajs好像是在半年前,当时还不知道页面阻塞问题,这里不带多余的话了. seajs实现了模块化的开发,一个网站如果分了很多很多模块的话,等开发完成了,发现 ...

  6. springboot入门_打包部署

    程序打包部署一般有两种,jar和war,本文以打war包为例,部署springboot项目. 首先,创建一个springboot项目(此处就不在多说如何创建了),修改pom.xml文件 1 <p ...

  7. 各种安装包打包发布工具(安装制作工具)评测

    各种安装包打包发布工具(安装制作工具)评测        作为程序员,经常遇到需要打包自己劳动成果的时候,这也算是广大码工辛苦奔波之后的杀青之作,收尾之笔.因此,安装包制作的好坏也直接关系到整个工程项 ...

  8. 各种安装包打包发布工具

    各种安装包打包发布工具(安装制作工具)评测        作为程序员,经常遇到需要打包自己劳动成果的时候,这也算是广大码工辛苦奔波之后的杀青之作,收尾之笔.因此,安装包制作的好坏也直接关系到整个工程项 ...

  9. vue 不生效 打包 样式_Vue打包部署到Nginx时,css样式不生效的解决方式

    今天在将使用Vue-cli编写的前端项目部署到Nginx的时候发生了一件很困扰的问题: Vue-cli项目在本地 使用 npm run dev的时候,页面样式是可以正常加载出来的,但是我将Vue-cl ...

最新文章

  1. 这才是未来真正的风口,一文看清13种硬科技投资趋势
  2. 上古时期的 TeX Users 都有哪些当今 TeX Users 无法想象的神级操作?
  3. Windows彻底卸载删除MySQL
  4. django12:form 组件/渲染标签/数据校验/钩子函数/
  5. c++面向对象高级编程 学习十六 vptr和vtbl
  6. java web中出现莫名错误,出现错误标识和红线但不影响运行。
  7. 焦作市职业技术学校工业机器人专业_职业技术学院 工业机器人专业方向
  8. win10远程登陆deepin xrdp
  9. 去掉 RHEL AS 3 内存检测达不到256MB的警告
  10. DE15 Introduction to Fourier Series
  11. 一篇文章搞定Python多进程
  12. 京香julia_百度百科
  13. 随机过程 - 马尔可夫链
  14. 从苏宁电器到卡巴斯基第05篇:我的创业梦
  15. vue3格式校验邮箱和手机号
  16. 用vs code 搭建stm32 开发环境(详细)
  17. veu项目中引入jquery
  18. please execute the cleanup command
  19. Java笔记01——JAVA基础部分
  20. Docker的安装以及解决启动失败问题

热门文章

  1. AIX详细查看用户/进程使用内存
  2. MyBatis中Like语句使用方式
  3. spring security 的 logout 功能
  4. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException
  5. event.target
  6. ScrollView详解
  7. KVM精简教程(七):常用虚拟机管理
  8. C Primer Plus 第8章 字符输入/输出和输入确认 8.11 编程练习答案
  9. C++Primer第5版学习笔记(一)
  10. Outlook 2003解除附件下载限制