如何在windows上以静默方式将Java JDK安装到特定目录中

如何在windows上以静默方式将Java JDK安装到特定目录中,java,java-7,java-6,silent-installer,Java,Java 7,Java 6,Silent Installer,在我的开发机器上,我总是必须安装Java6和Java7,并且为了测试的目的,我必须同时安装32位和64位版本的每个JDK。由于Java更新的频率似乎越来越荒谬(现在每周两次?),每次更新都需要我卸载然后重新安装4个JDK。所以这真的很烦人,我想为整个过程编写脚本 我的问题是,默认情况下,每个JDK版本都安装到包含更新号的目录路径中(默认值:“C:\Program Files\Java\jdk1.6.0\”)。为了避免我不得不调整大量的构建脚本,我总是手动从安装路径中删除尾随的“\u1”,并总是安

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

我的问题是,默认情况下,每个JDK版本都安装到包含更新号的目录路径中(默认值:“C:\Program Files\Java\jdk1.6.0\”)。为了避免我不得不调整大量的构建脚本,我总是手动从安装路径中删除尾随的“\u1”,并总是安装到相同的“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运行时)指定安装目录:

.exe[/s][INSTALLDIR=:\]
[静态=1][WEB\u JAVA=0/1][WEB\u JAVA\u安全级别=VH/H/M/L]
我还没有找到类似的描述如何为JDK安装程序指定安装目录


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

我在搜索时找到了这篇文章。。。它为INSTALLDIR指定一个参数

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

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

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

我已经提交了一份bug报告,一旦Oracle回复,我会通知您


更新:结果表明,这是由损坏(不完整)的JDK安装引起的。卸载此版本(添加/删除程序)后,新安装运行正常。

编辑-更简单的方法

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

与7u45和7u60配合使用

旧答案

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

  • 手动运行exe-您只需第一次执行,即可将其转换为msi
  • 从C:\Users\AppData\LocalLow\Sun\Java\jdx.x.y\jdk.x.y.z.msi获取msi(以及所有其他.cab文件)
  • 运行msiexec/i jdkx.y.z.msi/passive INSTALLDIR:c:\pippo

  • 避免在脚本中重写目录的一种方法是使用符号链接(NTFS上的连接)。 首先,从SysInternals下载连接实用程序: 然后解压缩,复制到路径上的某个目录,并运行一次以接受许可证

    然后您可以轻松创建符号链接:
    
    连接“C:\Program Files\Java\jdk1.6.0”“C:\Program Files\Java\jdk1.6.0\U 37”
    连接“C:\ProgramFiles(x86)\Java\jdk1.6.0”C:\ProgramFiles(x86)\Java\jdk1.6.0\U 37”
    

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


    您也可以使用mklink()(删除时使用del),但我更喜欢连接的简单性和清晰性。

    这是我对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
    
    $strjavanstallexe=
    $strjavanstalldir=
    $cmdInstallJava=$strjavanstallexe+'/passive/log“'+$strjavanstalldir+'\install.log”ADDLOCAL=“ToolsFeature,SourceFeature,PublicjreFeature”INSTALLDIR=“'+$strjavanstalldir+'”INSTALLDIRPUBJRE=“+$strjavanstalldir+””
    调用表达式$cmdInstallJava
    

    希望这有帮助

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

    这里带源代码的jdk1.8.60(x86)将转到
    C:\Java\x86\jdk1.8.0\u 60
    ,JRE转到
    C:\Java\x86\jre1.8.0\u 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-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
    
    以类似的方式,带有源代码的jdk1.8.60(x64)将进入
    C:\Java\x64\jdk1.8.0_60
    ,JRE将进入
    C:\Java\x64\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-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
    
    请参阅Oracle文件jreinstall.bat(示例:桌面存储)(将jre替换为jdk)


    “在我的开发机器上,我总是必须安装Java6和Java7,而且我必须安装每个JDK。”我认为你错了。为什么您认为需要安装两个版本的SDK?它提供了什么好处或能力?顺便说一句-离开信号。毫无疑问,它们是噪音。@AndrewThompson“为了测试目的,我必须在32位和64位版本中安装每个JDK”@assylias My bad。--好啊您不需要两个JDK,只需要一个JDK(用于编译)和两个JRE(用于测试)。我也使用misc。需要安装JDK的工具。有些是32位,有些是64位。也许我不需要所有的版本,但至少有2到3个不同的版本,所以当有更新时,我只需要安装所有的版本。但是,请告诉我,我对我原来的问题的答案更感兴趣。看起来像是oracle bug Trade未来要添加的一项功能。也许你可以试试opensdk?唉,这似乎不起作用。当调用参考文章中所示的命令行时,我总是会看到一个弹出窗口,显示Windows Installer试图告诉我,我错误地指定了一些选项。但列出的选项引用了一个.msi文件(该文件可能包含在jdk.exe中,但在执行命令时不直接可用…)。这与上面的建议相同,正如我在注释中所写的那样,它不起作用,但会弹出msi安装程序的一些错误对话框
    @echo off
    start /w %UserProfile%\Desktop\jre-8u65-windows-x64.exe /s
    setx JAVA_HOME "C:\Program Files\Java\jre1.8.0_65"
    exit