【问题标题】:How to silently install Java JDK into a specific directory on windows如何将 Java JDK 静默安装到 Windows 上的特定目录中
【发布时间】:2013-02-23 21:46:14
【问题描述】:

在我的开发机器上,我总是必须安装 Java 6 Java 7,并且为了测试目的,我必须同时安装 32 位和 64 位版本的每个 JDK。由于 Java 更新的频率似乎越来越荒谬(现在每周两次?)每次更新都需要我卸载然后重新安装 4 JDK。所以这真的很烦人,因此我想编写整个过程的脚本。

我的问题是,默认情况下,每个 JDK 版本都安装到包含更新号的目录路径中(默认:“C:\Program Files\Java\jdk1.6.0_\”)。为了让我不必适应大量的构建脚本,我总是手动从安装路径中删除尾随的“_”,并始终安装到相同的“C:\Program Files\Java\jdk1.6.0”或“C:\Program Files\Java\jdk1.7.0”,分别用于 64 位版本和 C:\Program Files (x86)\Java\jdk1.6.0" 或 "C:\Program Files (x86) \Java\jdk1.7.0",分别用于 32 位版本。

虽然我发现了如何为 JRE 安装程序(即 Java 运行时)指定安装目录:

<jre-installfile>.exe [/s] [INSTALLDIR=<drive>:\<JRE_install_path>] 
    [STATIC=1] [WEB_JAVA=0/1] [WEB_JAVA_SECURITY_LEVEL=VH/H/M/L]

我还没有找到类似的描述如何为 JDK 安装程序指定安装目录。

有谁知道是否以及如何指定 JDK 安装程序的安装路径,以便可以将静默 JDK 安装定向到特定安装目录?

【问题讨论】:

  • “在我的开发机器上,我总是必须安装 Java 6 和 Java 7,而且我必须安装每个 JDK” 我认为你错了。为什么您认为需要安装两个版本的 SDK?它提供了什么好处或能力?顺便说一句 - 留下签名。没有问题 - 它们是噪音。
  • @AndrewThompson "我必须在 32 位和 64 位版本中安装每个 JDK,出于测试目的"
  • @assylias 我的错。 - 好的。您不需要两个 JDK,但需要一个 JDK(用于编译)和两个 JRE(用于测试)。
  • 我认为这是一个不同的讨论。我也用杂项。工具,需要安装 JDK。其中一些是 32 位的,一些是 64 位的。也许我不需要所有这些,但至少需要 2 或 3 个不同的,所以我只需安装所有变体,当有更新时。但是,拜托,我真的对我原来的问题的答案更感兴趣。
  • 看起来像是 oracle bug parade 的一个项目,以添加为未来的功能。也许你可以试试opensdk?

标签: java java-7 java-6 silent-installer


【解决方案1】:

我刚刚在搜索时发现了这篇文章...它为 INSTALLDIR 指定了一个参数。

http://makeitfaster.wordpress.com/2011/03/25/java-jdk-silent-install-on-windows/

jdk-7u2-windows-i586.exe /s ADDLOCAL="ToolsFeature,SourceFeature" INSTALLDIR="%CD%\jdk7u2"

不幸的是,我已经在我的开发机器上安装了,所以我无法测试...

【讨论】:

  • 唉,这似乎行不通。当调用参考文章中所示的命令行时,我总是弹出一个 Windows Installer 显然试图教我,我错误地指定了一些选项。但是列出的选项是指一个 .msi 文件(大概包含在 jdk.exe 中,但在执行命令时不能直接使用...)。
【解决方案2】:

尝试: jdk-7u2-windows-i586.exe /s INSTALLDIR=\"C:\Program Files\JAVA\JDK\"

【讨论】:

  • 这与上面的建议相同,并且 - 正如我已经在评论中写的那样 - 它不起作用,但会显示 MSI 安装程序的一些错误对话框......
【解决方案3】:

我刚刚在 JDK7 安装程序中发现了一个回归,导致它忽略了 INSTALLDIR。最后一个正确的版本是更新 21。

我已提交错误报告,一旦 Oracle 回复,我会通知您。

更新:事实证明这是由损坏(不完整)的 JDK 安装引起的。一旦我卸载了这个版本(添加/删除程序),新的安装运行得很好。

【讨论】:

  • 升级 7u51 现在也不再适用于 JRE 安装程序。 JRE 和 JDK 安装程序,当使用 .exe /s INSTALLDIR="" 通过命令行启动时,只会弹出一个 msi-installer 错误对话框... :-(
  • &lt;installer&gt;.exe /passive INSTALLDIR="&lt;dir&gt;" 与 7u79 一起为我工作。
【解决方案4】:

编辑 - 更简单的方法

执行jdk-7u60-windows-x64.exe /passive /log install.log INSTALLDIR:c:\pippo

适用于 7u45 和 7u60

旧答案

exe 包含 msi 安装程序。提取是(肯定有更优雅的方法,但我只知道这一种)

  1. 手动运行 exe - 您只需在第一次运行时,将其转换为 msi
  2. 从 C:\Users\AppData\LocalLow\Sun\Java\jdx.x.y\jdk.x.y.z.msi 获取 msi(和所有 other.cab 文件)
  3. 运行msiexec /i jdkx.y.z.msi /passive INSTALLDIR:c:\pippo

【讨论】:

    【解决方案5】:

    避免在脚本中重写目录的一种方法是使用符号链接(NTFS 上的连接)。 首先,在此处从 SysInternals 下载联结实用程序: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx 然后解压,复制到 PATH 上的某个目录,然后运行一次以接受许可证。

    然后您可以轻松创建符号链接: junction "C:\Program Files\Java\jdk1.6.0" "C:\Program Files\Java\jdk1.6.0_37" junction "C:\Program Files (x86)\Java\jdk1.6.0" "C:\Program Files (x86)\Java\jdk1.6.0_37"

    要删除一些符号链接: junction -d "C:\Program Files\Java\jdk1.6.0"

    您也可以使用 mklink (http://technet.microsoft.com/en-us/library/cc753194.aspx) 代替(并使用 del 删除),但我更喜欢 junction 的简单明了。

    【讨论】:

    • +1 用于在 Windows 上使用联结点(重解析点)。我使用我的 Ruby 和 Python 版本以及用于版本管理的简单批处理文件来做到这一点。没有足够的人知道它们存在于 Windows 上..
    【解决方案6】:

    这是适用于 JDK_7u55 的方式。我也选择安装 JRE:

    PowerShell 命令

    $strJavaInstallExe=<Your JDK executable>
    $strJavaInstallDir=<The directory you want the JDK and JRE to install to>
    
    $cmdInstallJava=$strJavaInstallExe+' /passive /log "'+$strJavaInstallDir+'\install.log" ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR="'+$strJavaInstallDir+'" INSTALLDIRPUBJRE="'+$strJavaInstallDir+'"'
    
    Invoke-Expression $cmdInstallJava
    

    希望这会有所帮助!

    【讨论】:

      【解决方案7】:

      我可以使用以下命令成功安装 x64 和 x86 版本的 JDK 8 更新 60,包括公共 JRE:

      这里带有源代码的 JDK 1.8.60 (x86) 将转到 C:\Java\x86\jdk1.8.0_60 和 JRE 到 C:\Java\x86\jre1.8.0_60

      jdk-8u60-windows-i586.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR=C:\Java\x86\jdk1.8.0_60 /INSTALLDIRPUBJRE=C:\Java\x86\jre1.8.0_60
      

      以类似的方式,带有源代码的 JDK 1.8.60 (x64) 将转到 C:\Java\x64\jdk1.8.0_60,而 JRE 将转到 C:\Java\x64\jre1.8.0_60

      jdk-8u60-windows-x64.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR=C:\Java\x64\jdk1.8.0_60 /INSTALLDIRPUBJRE=C:\Java\x64\jre1.8.0_60
      

      见甲骨文JRE installer options

      【解决方案8】:

      文件 jreinstall.bat(例如:桌面存储)(将 jre 替换为 jdk)

      @echo off
      start /w %UserProfile%\Desktop\jre-8u65-windows-x64.exe /s
      setx JAVA_HOME "C:\Program Files\Java\jre1.8.0_65"
      exit
      

      【讨论】:

        猜你喜欢
        • 2015-10-23
        • 1970-01-01
        • 2013-01-28
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        相关资源
        最近更新 更多