【问题标题】:Deploying Java Server Applications That Aren't .wars部署不是 .wars 的 Java 服务器应用程序
【发布时间】:2012-07-10 22:08:52
【问题描述】:

是否有任何集成良好的应用程序管理堆栈允许构建、部署和更新作为服务器运行的非.war Java 应用程序?例如消息消费者是服务器(但不是网络服务器并且没有 Servlet),还是嵌入了 Jetty 的可执行 .jars?

构建和部署.wars 非常简单:Maven 具有战争原型,Jenkins 有大量插件用于将.war 文件部署到各种应用程序服务器,其中大多数接受在运行时上传新的 Web 应用程序。像 Elastic Beanstalk 这样的工具使这个过程更加容易,与服务器环境的管理联系在一起。

相比之下,部署可执行文件.jars 似乎是在重新发明轮子。需要找出遮蔽依赖关系并使用大量 Maven 插件创建可执行工件的最佳方法,将该工件存放在某处,然后找到一种将其安装在目标服务器上的方法,并在必要时替换/升级它(Debian 软件包将是这样做的一种方式)。

这一切对我来说似乎都非常“手动”,以至于将应用程序作为.wars 部署到应用程序服务器似乎是有利的,即使它们不适合这样的环境,只是这样你得到工具支持的好处。

【问题讨论】:

  • 对于消息消费者,MessageDriven EJB 是否适合?这些可以作为 JAR 发布到应用服务器。
  • 他们很可能是 - 不幸的是,我在一家小型初创公司,他们认为任何“重量级”的东西都是撒旦的作品。

标签: java deployment automation build-automation executable-jar


【解决方案1】:

您似乎正在寻找用于构建自包含可执行 jar 的依赖项管理器和用于部署的包管理器。除了您提到的工具之外,您还可以查看ant+ivy 了解构建+依赖管理和rpmbuild+rpm+yum 了解Linux 上的包管理。

【讨论】:

    【解决方案2】:

    您可以通过将应用程序部署到 osgi 容器来实现这一点。

    您可以挂钩到 osgi 生命周期以在 osgi 包启动时运行您的应用程序。然后您可以远程启动和停止容器(如果容器支持)。

    您的应用程序可以将它们的依赖项定义为 osgi 清单的一部分 - 但是在使用 maven 时,使用 shade 插件对 jar 进行着色并不困难,而且我认为管理而不是处理容器中的数百个 jar 会更容易。

    This question 谈论使用 jenkins 持续部署 osgi 包。

    另一种(也是更标准的)方法是编写自动化部署的脚本 - 可能使用专门构建的工具,如 puppetchef。有一个用于 puppet 的 maven plugin,它允许您从 maven 存储库中提取工件以用于您的 puppet 脚本。

    从 jenkins 运行 puppet 或 Chef 很简单,如果您愿意,您可以向非技术人员提供对部署构建的访问权限,让他们只需单击一个按钮即可将新构建部署到环境中。

    @bagheera 建议构建应用程序的 rpm 并将它们作为服务启动是一种很好的方法,可以降低部署脚本的复杂性。

    【讨论】:

    • 感谢您的回答 - 我会研究 OSGi。关于编写脚本,这通常是我希望避免的方法,但看起来这可能是不可能的。
    • 如果您将脚本编写与 rpm 建议配对,那么脚本非常简单 1.) 从 maven repo 下载 rpm 2.) 安装 rpm。这个slideshow 显示了使用 rpms 后脚本变得多么简单 - 它使用 webapps 作为示例,但 jars 也同样有效。
    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2012-06-23
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多