【问题标题】:Checking if Java is installed in a makefile检查 Java 是否安装在 makefile 中
【发布时间】:2011-03-25 23:57:48
【问题描述】:

我正在编写一个编译和运行 Java 程序的 make 文件,但它会在不同的平台上运行,所以我希望 make 文件首先确定是否安装了 Java,然后它才会编译并运行.java 文件。

我该怎么做呢?

【问题讨论】:

  • 你有什么理由在目标机器上编译,而不是简单地将 .class 文件捆绑在 JAR 中?
  • 我想在 makefile 中做所有事情。我想避免使用 JAR、eclipse、shell 脚本等。
  • 使用 .jar 文件是运行 Java 软件的标准方式。

标签: java compiler-construction makefile jvm javac


【解决方案1】:

我正在尝试了解您正在尝试做的事情,但我预感到您不会采用公认的做法,这将使您的流程变得脆弱而脆弱。

编译和运行 Java 的“公认”方式是使用 Ant 或 Maven,然后在构建机器上构建它们。您不需要 eclipse 或任何其他工具来仅在您的计算机上构建 Java JDK 或 SDK(名称可互换)以及 ant 或 maven。

您可以将 Java 代码目录结构放在机器上并通过 ant 或 maven 运行它,然后会得到类文件或 JAR、EAR、WAR 或您正在开发的任何东西。

部署的正确方法是通常将类文件部署到要运行的机器上,而这又需要 JRE(Java 运行时环境)。 JAR 文件的原因是把类文件的目录结构放在一个文件中。所以很容易部署是一件好事。

由于您可以控制“构建机器”,因此您可以确保在其上安装了 JDK 和 ant 以便能够进行编译。挑战在于确保您要部署的机器具有 JRE。

确保机器具有 JRE。你有几个选择。

  1. 使用 JNLP 并拥有安装程序 提示用户下载 如果他没有正确的 JRE。
  2. 将您的代码编译为本机代码 使用 GCJ(有一些问题 - 是否 不适用于所有代码)
  3. 提示用户安装 Java 其他方式。

【讨论】:

    【解决方案2】:

    如果您不介意将自己限制在 GNU Make(我不认为这是可移植的),您可以使用 $(shell) 函数和 which 命令来做一些事情:

    JAVAC := $(shell which javac)
    
    ifeq ($(JAVAC),)
    $(warning No javac found!)
    endif
    

    【讨论】:

      【解决方案3】:

      检查“java”可执行文件是否可以运行(例如使用-version),如果不能运行则失败。

      另请注意,JDK 安装程序默认情况下不会将 java 编译器 (javac) 放置在 PATH 中。如果您需要编译器,最简单的方法是包含并使用 Eclipse 编译器 ecj,该编译器可以从 eclipse.org 单独下载。

      【讨论】:

        【解决方案4】:

        我想知道这些是完成一项非常简单的任务的非常复杂的方法。
        即使安装了 Java 并且没有添加到 Environment Path 中,也会遇到问题,所以为什么不做一个简单的检查:

        String check = System.getenv("PATH");  
        

        现在过滤掉这个 Java 的检查字符串。如果你找到了,说明你有,如果没有找到,请用户安装java。

        编辑:我不懂 C,所以我写了 java 命令。想法是您需要检查环境变量以确保最终用户是否有 java。

        【讨论】:

          【解决方案5】:

          考虑将 jar 文件与 java 代码捆绑在一起。

          makefile 只是一个可执行脚本,因此您可以检查 java 是否在执行环境的 $PATH 中。

          你也可以这样做:

          #!/bin/bash
          java>/dev/null
          if [ $? -eq 0 ]
          then 
             echo "java is installed"
          else
             echo "java is not installed"
          fi
          

          但这再次检查脚本的 $PATH 中是否存在 java。

          【讨论】:

            猜你喜欢
            • 2010-11-20
            • 2014-10-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-26
            • 1970-01-01
            • 2010-11-12
            相关资源
            最近更新 更多