【问题标题】:Detect Java location from Makefile从 Makefile 检测 Java 位置
【发布时间】:2011-03-20 04:52:24
【问题描述】:

我有一个 makefile,它需要知道 Java 包含目录的位置,因为它使用了 jni.h 文件。让 Makefile 自动检测 Java 在 Linux 上的安装位置的最佳方法是什么?

谢谢,
克里斯

【问题讨论】:

  • 我想我决定让用户在运行 makefile 之前设置 JAVA_HOME 变量。

标签: java makefile java-native-interface


【解决方案1】:

JAVA_HOME 环境变量包含 Java 安装的路径。

【讨论】:

  • 我确实想到了这一点,但是在我的测试框中,没有设置 JAVA_HOME 变量(这是全新安装后的默认值)。
  • 我实际上从未见过没有设置 JAVA_HOME 变量的 java 安装。 Java 是否随您的发行版一起提供,但他们取消了 JAVA_HOME 变量?
  • 是的,它是随发行版一起提供的(Mint linux),但是当我尝试“echo $JAVA_HOME”时,它是空的。
【解决方案2】:

在 Linux 上,您可以使用 which 命令,例如 which java。它应该告诉您它将使用的 java exec 的位置在哪里。

但是,我建议按照 Erick 指出的那样设置 JAVA_HOME。

【讨论】:

  • 结果可能会是/etc/alternatives/java,这不是很有帮助
  • 酷,我不知道那个命令。这告诉我“java”可执行文件在哪里,但这只是指向真实位置的链接,应该类似于 (/usr/lib/jvm/java-version-here/bin)。我需要找到这个文件夹的位置。
  • 你得到的结果不是一个链接——它是一个字符串,你可以解析它并从中获取文件夹,不是吗?
  • 另外,我仍然建议设置 JAVA_HOME,因为这是基于 Java 的程序和脚本中更常见的约定。尽管如此,值得注意的是,使用ant 构建的Java 比使用make 构建的更多。
  • 哦,好的,我明白了。是的,当我在“/usr/bin”目录上执行“ls -la”时,我看到“javac -> /usr/lib/jvm/jdk1.5.0_22/bin/javac”行。我认为这会起作用,但是我如何在 Makefile 中获取该字符串,然后对其进行解析,以便我只有字符串“/usr/lib/jvm/jdk1.5.0_22”?
【解决方案3】:

如何使用

JAVA_HOME=$(shell readlink -f /usr/bin/javac | sed "s:bin/javac::")

改编自: https://serverfault.com/questions/143786/how-to-determine-java-home-on-debian-ubuntu

【讨论】:

    【解决方案4】:

    你也可以试试这个:

    JAVA_HOME:=$(jrunscript -e 'java.lang.System.out.println(new java.io.File(java.lang.System.getProperty("java.home")).getParent());')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多