我有一些使用Eclipse的Java代码,我想将其部署到Unix环境中。 该程序是简单的控制台程序,只需在运行时接受一些参数,读取文件并打印出一些结果。
我的问题是,在Unix环境中部署和运行它的最佳方法是什么。 我只是想将所有类文件复制到 unix 环境并创建一个批处理文件来运行主类文件。 这听起来还行吗?或者,我应该创建一个可运行的 jar 文件吗?
另外,我应该将 prgram 引用的 jar 文件放在哪里(在类路径中(?
谢谢
一个可执行的jar文件可以解决你在这里的目的。
您应该能够将其执行为
java -jar <jarfilename> <arguement1> <arguement2> .... <arguementN>
您可以从当前目录本身执行 jar 文件,只需确保您的 jar 文件具有可执行权限即可。
chmod +x <jarfilename>
ls -la
在我看来,易于部署的设计很重要。在我们的例子中,有一些组件:
-
将项目存储在源代码管理系统 (Git( 中。 我们将源代码分解为
- 开发
- 源代码到开发分支
- 稳定源代码发布分支
-
使用生成工具(如 Ant 或 Maven(,并在项目中提供部署脚本。(我们将在 3 中讨论部署脚本(。
-
提供部署脚本到:
- 在构建服务器中获取最新的稳定源代码 构建
- 到构建服务器中的可执行文件(无论您做什么(
- 将包发送到目标服务器
- 目标服务器中的启动器(关闭旧应用程序并运行新应用程序((通过远程 SSH 命令(
目前,您正在考虑如何打包Java,但是构建和运行是一件简单的事情。当您谈论部署时,请使其尽可能简单。每次我们部署时只是为了调用发布脚本。
附言。我不喜欢可执行的罐子。使用解包 jar 和编译类可以通过 rsync 非常有效地发送。
听起来不错,会为你工作。只有一个修复:您将为 unix 编写 shell 脚本,而不是批处理文件。
但你可以做得更好。通常,Java 类被打包到 jar 文件中。Jar文件只是一个zip文件,带有可选的META-INF
,目录,MANIFEST.MF
和其他东西。因此,最好将应用程序打包到 jar 中,然后按 java -cp yourjar.jar YourMainClass
运行。
要创建 jar 文件,您可以使用任何可以创建 zip 或实用程序的工具,这些jar
是 JDK 的一部分。您还可以使用ant,maven,gradle,bildr等创建自动构建,这将帮助您打包应用程序。
我会执行以下操作:
- 为此程序创建一个专用目录。将依赖.jar文件复制到该目录
- 编写一个(短(脚本,将类路径设置为指向这些 jar,然后执行主类
鉴于上述情况,这在很大程度上取决于是否创建可运行的.jar的风格问题。它将对用户隐藏。
我建议使用脚本,因为:
- 您可以轻松设置常用的 JVM 参数(内存选项等(
- 键入
java -jar {pathtojar}
等是一种痛苦(而且几乎不直观(。
通过将 jar 复制到专用目录,您可以为不同的脚本使用不同版本的 jar(例如,您可能有 2 个程序使用两个不同版本的 commons-lang(
您还应该(可能(使用此脚本来显式确定用于运行程序的 Java 版本。安装/升级时,您不希望破坏程序,并且可以将脚本配置为显式绑定此信息。
我发现这是最快的:
首先,创建一个jar,复制到Unix服务器并更改文件权限,就像下面提到的dopplesoldner一样。
您可以将库类和/或 jar 依赖项放在 lib
文件夹中
然后执行罐子
java -Djava.ext.dirs=lib/ -classpath yourJar.jar com.yourPackage.yourClass
yourClass
将是具有要执行main(String args[])
方法的类。