如何在“现实世界”中部署Java应用程序?

时间:2013-05-14 17:54:37

标签: java deployment jar war ear

作为Java编程世界的新手,这个问题一直让我难以置信。我首先相信所有Java文件都被压缩到applets然后运行,但我很快就意识到情况并非如此。有人可以向我解释我们如何将我们的Java应用程序交织成日常生活的真实产品吗?

TL; DR:我们如何实施我们的代码以供实际使用?

4 个答案:

答案 0 :(得分:21)

这取决于应用程序。根据您希望用户使用您的应用的方式,有很多选项。通常它被打包成罐子或专用罐子(战争,耳朵)。

理论上,您可以使用其中的.class文件压缩原始目录结构,并提供一个shell脚本/指令,为用户运行java命令。我不推荐这个,因为它有点不专业,需要你为每个想要能够运行程序的操作系统维护一个shell脚本。

Jar files用于打包库,但你也可以在其中有一个清单文件,“当有人双击/执行此操作时,运行此类”。该类可以启动GUI或者是响应参数的无头任务等。

你可以拥有applets,就像你说的那样。这些程序在用户的浏览器中运行。

您可以拥有war file,这是一种打包Web应用程序的方法。您将此提供给Web服务器,它知道如何部署它以便您可以访问Web页面。示例Web服务器/容器是tomcatjetty

您可以拥有ear file,其中可以包含其他战争文件。这用于需要javaee功能的其他部分(ejbs,jms队列等)的应用程序。应用程序服务器的示例是jbossglassfish

还有java web start个应用。这些是您可以通过访问网页运行的应用程序,但它们会下载到您的计算机并在用户的计算机上运行(而不是在服务器的后端,如在战争/耳朵中)。

还有javafx。我对此一无所知。 By skimming the FAQ,它似乎是Java对Adobe's Flex的回答。您使用xml配置配置UI组件。我不确定JavaFX应用程序使用的格式,但确实说“在桌面或浏览器中部署”。


正如Sotirios Delimanolis在下面的评论中提到的,您可以使用Ant或Maven等构建系统构建这些文件。您还可以使用java / javaee sdk附带的工具“手动”构建它们。例如,如果安装了sdk,则路径中应该有jar命令。以下是这些构建系统的一些细节:

  • 的Maven
    1. 高级别(你告诉它要构建什么,而不是如何构建它)
    2. 不仅仅是一个构建系统。它还有依赖管理等。
    3. 意见(它使用约定优于配置,每个配置文件生成1个工件等)
  • 蚂蚁
    1. 低级别(你告诉它如何建造东西)
    2. 弹性
    3. 配置文件可以随心所欲,根据需要构建任意数量的工件
    4. 易于学习
  • SDK工具
    1. 始终保持最新状态。 EG:很少,maven / ant可能无法设置配置选项
    2. 难以记住命令
    3. 非常低级别
    4. 单独使用,不可重复(EG:除非您构建脚本,否则每次都必须自己键入jar命令)

答案 1 :(得分:4)

  • Applets从未真正流行起来,现在很少使用。
  • 简单的应用程序可以部署为“可执行”JAR文件,这些文件基本上是ZIP存档,带有额外的元数据,告诉JVM哪个类包含要运行的主要方法。它们可以使用-jar选项在命令行上运行,或者在大多数桌面环境中通过双击运行(这也需要安装JVM)。
  • 可以通过Java Web StartIzPackInstall4J等安装程序部署桌面应用程序,但Java桌面应用程序也不常见。
  • 现在大多数Java软件只在服务器(Web服务器或应用服务器)上运行。它们通常部署为WAREAR个文件,这些文件也是包含类和其他资源的ZIP存档。然后,这些应用程序按照ServletEJB标准在服务器组件内运行。

答案 2 :(得分:1)

创建一个可执行jar,一个放入Web服务器的战争或另一个项目使用的库,该项目是前两个项目之一。

答案 3 :(得分:1)

如果应用程序意味着在客户端上运行,那么它将被打包为可执行JAR,然后进一步打包为应用程序包(Mac),可能包装在exe(Windows)中,或者与可执行脚本配对。启动JAR并设置任何所需的VM参数。

如果它是Web应用程序的一部分,那么它将打包为WAR或EAR并放置在Web服务器上的适当位置。

如果它只是一个库,那么它通常被打包为一个JAR(不可执行)并且这样分发以便集成到更大的项目中。

  

小程序然后跑了,但我很快就意识到情况并非总是如此

实际上,applets现在很少见,不鼓励使用它们。