我见过许多使用JDK的产品,我想知道是否有一种方法可以通过简单地将内容解压缩到目录来安装JDK,因此在添加/删除程序中没有创建图标,没有注册表项等。 / p>
同样在这种情况下: 我们如何为浏览器配置Java插件? 我们如何配置通过Java的控制面板条目看到的设置?
答案 0 :(得分:34)
根据this,我创建了一个batch script来自动构建jdk档案。
链接的基本部分是:
- 创建工作JDK目录(本例中为“C:\ JDK”)
- 从oracle下载最新版本的JDK(例如“jdk-7u7-windows-i586.exe”)
- 下载并安装7-zip(如果您不是管理员,请下载7-zip便携版)
- 使用7-zip解压缩目录“C:\ JDK”中“jdk- [6-7] u?-windows-i586.exe”中的所有文件
- 在命令shell(cmd.exe)中执行以下操作:
- 将目录更改为目录C:\ JDK.rsrc \ JAVA_CAB10
- 执行命令: extrac32 111
- 使用7-zip解压缩C:\ JDK.rsrc \ JAVA_CAB10 \ tools.zip
- 在命令shell(cmd.exe)中执行以下操作:
- 将目录更改为C:\ JDK.rsrc \ JAVA_CAB10 \ tools \
- 执行命令: for / r%x in(* .pack)do。\ bin \ unpack200 -r“%x”“%~dx%~px%~nx.jar”(这会将所有包文件转换为jar)
- 将整个目录和c:\ JDK.rsrc \ JAVA_CAB10 \ tools的所有子目录复制到您希望JDK的位置,并手动设置JAVA_HOME和PATH以指向您的JDK目录及其BIN子目录。
答案 1 :(得分:15)
是的,您可以创建一个压缩的JDK,将其解压缩到目标计算机上,然后从该目录运行java,javac等,直到您心中的内容。
创建此类zip文件的最简单方法是在计算机上安装JDK,然后压缩JDK目录的内容。我们在某些情况下执行此操作,在这些情况下,我们需要准确控制将在部署中使用的Java配置。在这种情况下,我们的脚本只是将JAVA_HOME(或等效的)指向我们内部捆绑的JDK,而不是依赖于系统管理员来准确安装到达之前我们需要的东西。
在与浏览器集成方面,这可能会有点问题。简短的回答是否定的,如果没有某些类型的安装程序,则无法直接与浏览器集成。
答案 2 :(得分:4)
您可以使用SysInternals RegMon和FileMon(现在由MS拥有和dist)来查看完全 Java安装程序修改的内容。我相信你会想要创建一些reg条目。例如,WISE安装程序等产品也会在引擎盖下使用这种方法来重新打包产品安装(例如,作为MSI)。
请小心,因为安装程序也会做出一些动态决定,这可能会影响安装的内容(例如在XP v.s. W2K3服务器上)。关于已安装的代码页,我曾被此感到厌烦。我不记得确切的细节,但结果是我的嵌入式JRE + JDK(仅限法律可再分发部分)中缺少代码页文件。这导致我的代码中出现了一个非常奇怪且看似荒谬的运行时错误。不言而喻,这同样适用于Server v.s.客户端JVM DLL。
答案 3 :(得分:3)
真的,不,至少如果你想在Windows上使用它而不是从cygwin那里使用它。 Windows太依赖于注册表;您可以模拟必要的注册表更新,但将文件移动到正确位置并更新注册表的软件称为“安装程序”;你只需重新发明安装程序。
答案 4 :(得分:3)
我相信至少在早期版本的Java中,这在某种程度上是可行的 - 我不知道它是否仍然存在。
正如您在问题中提到的,大多数注册表项都用于浏览器插件等内容。如果只是希望能够运行Java(例如从批处理文件中),这是一回事 - 但实际上安装则是另一回事。即使您只是想要运行它,您也需要小心谨慎,始终明确地使用您想要的那个,而不是意外地使用已安装的部分应用程序。
您的实际使用案例是什么?你真的需要一个浏览器插件吗?您对此配置的哪个方面感兴趣?许多控制面板配置与更新和浏览器集成有关。可以使用命令行选项控制许多其他方面来设置特定的系统属性。
答案 5 :(得分:2)
如果你只想提供一个JVM,你的应用程序是好的,但不止于此我不推荐。
答案 6 :(得分:1)
如果您只想拥有JDK(JRE)文件,可以在sandboxie内运行安装程序。安装在沙箱中后,只需复制c:\sandbox
中的文件即可完成。
我正在使用它编译和运行遗留的Java应用程序,这些应用程序无法轻松迁移到较新版本的java。我可以将Eclispe指向这个JDK并告诉它符合Java 1.3。
答案 7 :(得分:1)
只需从Oracle下载页面下载Windows服务器版本的Java即可。自己设置JAVA_HOME和PATH变量。