我已经看到许多产品与JDK捆绑在一起,我不知道是否有一种方法可以通过简单地将内容解压到一个目录来安装JDK,所以在添加/删除程序中没有创build图标,没有registry项等。
同样在这种情况下:我们如何configuration浏览器的Java插件? 我们如何configurationJava的控制面板中的设置?
是的,您可以创建一个压缩的JDK,将其解压缩到目标机器上,然后从该目录运行java,javac等到您的内容。
创建这样一个zip文件的最简单方法是在一台机器上安装JDK,然后压缩JDK目录的内容。 我们在某些情况下这样做,我们需要精确控制部署中将使用的Java配置。 在这种情况下,我们的脚本只是将JAVA_HOME(或等价物)指向我们内部捆绑的JDK,而不是依靠系统管理员在到达之前安装我们需要的东西。
就整合浏览器而言,这可能会有点问题。 简短的答案是否定的,你不能没有某种安装程序直接与浏览器集成。
据此,我创建了一个批处理脚本来自动生成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”中提取所有文件
- 在命令行程序(cmd.exe)中执行以下操作:
- 将目录切换到目录C:\ JDK.rsrc \ JAVA_CAB10
- 执行命令: extrac32 111
- 用7-zip解压C:\ JDK.rsrc \ JAVA_CAB10 \ tools.zip
- 在命令行程序(cmd.exe)中执行以下操作:
- 将目录更改为C:\ JDK.rsrc \ JAVA_CAB10 \ tools \
- 执行命令: (* .pack)中的/ r%x做。\ bin \ unpack200 -r“%x”“%〜dx%〜px%〜nx.jar” (这会将所有的包文件转换成jar)
- 复制完整目录和所有需要JDK的c:\ JDK.rsrc \ JAVA_CAB10 \ tools的子目录,并手动设置JAVA_HOME和PATH指向您的JDK目录及其BIN子目录。
您可以使用SysInternals RegMon和FileMon(现在由MS拥有和分配)来确切地查看由Java安装程序修改的内容。 我相信会有一些你想要创建的注册条目。 像WISE安装程序这样的产品也使用这种方法来重新包装产品(例如MSI)。
请注意,因为安装程序也会做出一些动态决定,这可能会影响安装的内容(例如在XP和W2K3服务器上)。 我被这个关于安装的代码页咬了一次。 我不记得确切的细节,但效果是,我的嵌入式JRE + JDK(仅限法定可再发行部分)中缺少代码页文件。 这在我的代码中造成了一个非常奇怪和看似无意义的运行时错误。 不言而喻,这同样适用于服务器与客户端JVM DLL。
真的,不,至少如果你想从Windows使用它,而不是从cygwin。 Windows依赖注册表太多; 您可以模拟必要的注册表更新,但将文件移动到正确位置并更新注册表的软件称为“安装程序”; 你只是重塑安装程序。
我相信这至少在早期版本的Java中是可行的 – 我不知道它是否还是如此。
大多数注册表项都用于浏览器插件,正如您在问题中提到的那样。 如果你只是想能够运行Java(例如从一个批处理文件),这是一回事 – 但真正安装它是另一回事。 即使你只是想运行它,你也需要小心,总是明确地使用你想要的那个,而不是偶尔使用已安装的应用程序。
你的实际用例是什么? 你真的需要一个浏览器插件? 你感兴趣的是哪一方面的配置? 很多控制面板配置是用来更新和浏览器集成的。 可以使用命令行选项来控制许多其他方面来设置特定的系统属性。
如果你只是想提供一个JVM与你的应用程序是好的,但比我不会推荐。
如果您只想拥有JDK(JRE)文件,则可以在sandboxie内运行安装程序。 一旦安装在沙箱中,只需复制c:\sandbox
的文件即可完成。
我正在使用它来编译和运行遗留的java应用程序,这些应用程序无法轻松迁移到新版本的java。 我可以把Eclispe指向这个JDK,并告诉它符合Java 1.3。
只需从Oracle下载页面下载Java的Windows服务器版本即可。 自行设置JAVA_HOME和PATH变量。