在 Unix 中运行 Java 控制台程序



我有一些使用Eclipse的Java代码,我想将其部署到Unix环境中。 该程序是简单的控制台程序,只需在运行时接受一些参数,读取文件并打印出一些结果。

我的问题是,在Unix环境中部署和运行它的最佳方法是什么。 我只是想将所有类文件复制到 unix 环境并创建一个批处理文件来运行主类文件。 这听起来还行吗?或者,我应该创建一个可运行的 jar 文件吗?

另外,我应该将 prgram 引用的 jar 文件放在哪里(在类路径中(?

谢谢

我认为

一个可执行的jar文件可以解决你在这里的目的。

您应该能够将其执行为

java -jar <jarfilename> <arguement1> <arguement2> .... <arguementN>

您可以从当前目录本身执行 jar 文件,只需确保您的 jar 文件具有可执行权限即可。

chmod +x <jarfilename>
ls -la

在我看来,易于部署的设计很重要。在我们的例子中,有一些组件:

  1. 将项目存储在源代码管理系统 (Git( 中。 我们将源代码分解为

      开发
    1. 源代码到开发分支
    2. 稳定源代码发布分支
  2. 使用生成工具(如 Ant 或 Maven(,并在项目中提供部署脚本。(我们将在 3 中讨论部署脚本(。

  3. 提供部署脚本到:

    1. 在构建服务器中获取最新的稳定源代码
    2. 构建
    3. 到构建服务器中的可执行文件(无论您做什么(
    4. 将包发送到目标服务器
    5. 目标服务器中的启动器(关闭旧应用程序并运行新应用程序((通过远程 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等创建自动构建,这将帮助您打包应用程序。

我会执行以下操作:

  1. 为此程序创建一个专用目录。将依赖.jar文件复制到该目录
  2. 编写一个(短(脚本,将类路径设置为指向这些 jar,然后执行主类

鉴于上述情况,这在很大程度上取决于是否创建可运行的.jar的风格问题。它将对用户隐藏。

我建议使用脚本,因为:

  1. 您可以轻松设置常用的 JVM 参数(内存选项等(
  2. 键入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[])方法的类。

最新更新