java - 部署非 .wars 的 Java 服务器应用程序

标签 java deployment automation build-automation executable-jar

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

构建和部署 .war 非常简单:Maven 有 war 原型(prototype),Jenkins 有一堆插件用于将 .war 文件部署到各种应用服务器,大多数其中接受在运行时上传新的 Web 应用程序。 Elastic Beanstalk 等工具使此过程更加轻松,并与服务器环境的管理联系在一起。

相比之下,部署可执行文件 .jar 似乎是在重新发明轮子。人们需要找出最好的方法来隐藏依赖关系并使用过多的 Maven 插件创建一个可执行的工件,将这个工件存放在某个地方,然后找到一种方法将它安装在目标服务器上,并在必要时替换/升级它(Debian 包将是这样做的一种方式)。

这对我来说似乎非常“手动”,以至于将应用程序作为 .war 部署到应用程序服务器似乎是有利的,即使它们不适合这样的环境,这样您就可以从工具支持中获益。

最佳答案

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

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

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

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

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

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

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

关于java - 部署非 .wars 的 Java 服务器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430142/

相关文章:

bash - 如何运行新的gradle任务?

javascript - Delphi Web Automation 如何将 THIS 变量传递给 JavaScript 函数

java - 从java程序中的FFMpeg中的图像到视频

java - Hibernate二级缓存只写不读

deployment - Kubernetes部署的不同方式?

java - 如何增量更新Java EE Web应用程序?

android-studio - Flutter:用于部署的 Android 构建

c# - .NET 自动化 ControlType.Document : how to manipulate text?

java - 加载 Web 应用程序属性

java - 使用 PDFBox 使某些字符在现有 PDF 文档中不可见