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

18
作为一个Java编程世界的新手,这个问题一直让我困扰。我最初认为所有的Java文件都会被压缩成applets然后运行,但我很快意识到并非总是如此。有人能向我解释一下如何将Java应用程序实际融入到日常生活中吗?
简而言之:我们如何将代码用于实际应用?

8
过去14年,我只实现了服务器端的Java(完全不使用小程序)。今天,我怀疑小程序只占所有Java程序的一小部分。 - Peter Lawrey
请参见 http://docs.oracle.com/javase/tutorial/deployment/,http://docs.oracle.com/javaee/6/tutorial/doc/bnaby.html。 - PM 77-1
4个回答

30
这取决于应用程序。根据您希望用户如何使用您的应用程序,有许多选项。通常打包为jar或专用jar(war、ear)。
理论上,您可以将原始目录结构与其中的.class文件压缩,并提供运行java命令的shell脚本/说明。我不建议这样做,因为它有点不专业,并且需要您为希望能够在其上运行程序的每个操作系统维护一个shell脚本。 Jar文件用于打包库,但您也可以在其中添加清单文件,指定“双击/执行此文件时运行此类”。该类可以启动GUI或成为响应参数的无头任务等。
您可以像您所说的那样使用小程序。这些程序在用户的浏览器中运行。
你可以拥有一个war文件,它是打包Web应用程序的一种方式。将其提供给Web服务器,它知道如何部署它,以便您可以访问Web页面。一个例子是Web服务器/容器tomcatjetty
你可以拥有一个 ear 文件,其中可以包含其他的 war 文件。这适用于需要其他 JavaEE 功能(ejb、jms 队列等)的应用程序。一个应用服务器的例子是 jboss 或者 glassfish

还有Java Web Start应用程序。这些是您可以通过访问网页来运行的应用程序,但它们会下载到您的计算机并在用户的计算机上运行(而不是在服务器的后端运行,例如war/ear)。

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


正如Sotirios Delimanolis在下面的评论中提到的那样,您可以使用构建系统(如Ant或Maven)来构建这些文件。您也可以使用随Java/JavaEE SDK提供的工具“手动”构建它们。例如,如果您安装了SDK,则应该在路径中拥有一个“jar”命令。以下是这些构建系统的一些详细信息:
  • Maven
    1. 高级别(您告诉它要构建什么,而不是如何构建)
    2. 不仅是一个构建系统。它还具有依赖管理等功能。
    3. 有偏见(它使用约定优于配置,每个配置文件生成1个工件等)
  • Ant
    1. 低级别(您告诉它如何构建东西)
    2. 灵活
    3. 配置文件可以做任何您想要的事情,构建尽可能多的工件
    4. 易于学习
  • SDK 工具
    1. 始终保持最新状态。例如:很少情况下,maven/ant 可能无法设置配置选项
    2. 难以记住命令
    3. 非常低级别
    4. 单独使用时不可重复(例如:除非您构建脚本,否则每次都必须自己键入 jar 命令)

@Tdorno NP,如果您有其他问题,请告诉我。 - Daniel Kaplan
我们是使用外部应用程序来打包我们的Java文件,还是可以直接通过IDE完成这项工作? - Tdorno
@Tdorno 所有这些东西都可以在 IDE 内部或外部完成。但是 IDE 通常会使事情更加方便。例如,我没有记住 jar 命令,但我知道如何在我的 IDE 中构建一个 jar,因为它给了我一个很好的视觉理解。 - Daniel Kaplan
2
@Tdorno,你还可以使用类似“Ant”或“Maven”的构建系统来编译和打包你的“jar”文件。 - Sotirios Delimanolis
1
@Tdorno 我已经添加了更多关于那个的细节。我推荐使用Maven。学习起来可能需要更长时间,但我认为它是比Ant更有价值的技能。 - Daniel Kaplan
显示剩余4条评论

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

请参阅SO上的JWS信息页面 - Andrew Thompson

1
创建一个可执行的JAR包,一个被放置在Web服务器中的WAR包,或者是被前面提到的两个项目之一所使用的库。

2
一个被部署到Web服务器中的war是什么? - Tdorno
https://dev59.com/MG025IYBdhLWcg3wqn4N - orangegoat

1
如果应用程序旨在在客户端上运行,则将其打包为可执行的JAR文件,然后进一步打包为应用程序包(Mac),可能会在exe(Windows)中包装,或与可执行脚本配对,该脚本将启动JAR并设置任何所需的VM参数。
如果它是Web应用程序的一部分,则将其打包为WAR或EAR,并将其放置在Web服务器上的适当位置。
如果它只是一个库,则通常将其打包为JAR(非可执行文件)并作为此类分发以集成到更大的项目中。
实际上,小程序现在很少见,使用它们也不被鼓励。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接