java1.8和java1.6的共存

在我们的项目中,有可能因为受服务器的限制需要安装不同的JAVA版本,可以用python写一个脚本,然后快速在1.6和1.8版本之间进行切换,省去许多麻烦。

1.准备工作

1.1 下载pywin

因为写脚本时需要导入win32api和win32com,所以需要下载Pywin,下载时需要注意,要根据自己的Python版本和操作系统位数来下载。
下载地址: pywin

1.2 java1.6和java1.8的安装

可以将java1.6和java1.8安装在同一级目录下,会方便操作。比如我将java1.6安装在 F:\360Downloads\java1_6 ;将java1.8安装在 F:\360Downloads\java1_8 .然后配置环境变量。

2.编写python

可以通过修改注册表实现。修改完后要广播WM_SETTINGCHANGE消息通知现有窗体重新加载环境变量。

如果需要改变环境变量在机器层次就需要修改注册表入口为:

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

需要修改环境变量在用户层次需要修改注册表入口为:

HKEY_CURRENT_USER\Environment\Path

需要修改环境变量在应用的层次则需要修改注册表入口为:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\

我用的是python3.5的版本,python2.7的版本需要导入的是_winreg模块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import winreg
import win32api
import win32con

def _changePath_(path):
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 'System\\CurrentControlSet\\Control\\Session Manager\\Environment', 0, winreg.KEY_WRITE)
winreg.SetValueEx(key, 'JAVA_HOME', 0, winreg.REG_SZ, path)
winreg.CloseKey(key)
win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment')
return None

j1_6Path = 'F:\\360Downloads\\java1_6\\jdk'
j1_8Path = 'F:\\360Downloads\\java1_8\\jdk'
javaPath = os.environ.get('JAVA_HOME')
print('目前java路径为: '+javaPath)
if javaPath == j1_6Path:
_changePath_(j1_8Path)
print('将java1.6切换到java1.8')
else:
_changePath_(j1_6Path)
print('将java1.8切换到java1.6')
print('change over!')

3.调用python脚本

可以在桌面新建一个J1.6ToJ1.8.bat脚本文件调用J1.6ToJ1.8.py,以后需要切换java版本时只要双击J1.6ToJ1.8.bat脚本就可以了。

1
call py3 E:\pythoncode\J1_6ToJ1_8.py