有两种方法:
zip
即可启动下载:master
分支,点tags
,往下拖,选中JDK12最新版,最后点Code
, DownloadZip
即可。我用的是WinSCP,非常好用。
注意Ubuntu20我们装的一般是Desktop桌面版,默认是没有启动SSH服务, 可以通过下面命令安装:
sudo apt-get install openssh-server
安装好后新建一个文件夹,譬如叫jdk12
。由于Ubuntu的安全设置问题(账号权限问题),WinSCP还不能传输文件到这个文件夹,需要将文件夹的用户和用户组更改到当前用户(新建文件夹的默认用户和用户组是root,由于Ubuntu独特的设计,你没办法用root账号登陆WinSCP)。
chown james:james /jdk12 #james为我的账号名, /jdk12为新建的文件夹
cd /jdk12
unzip jdk-jdk-12-33.zip #解压你通过Github下载的压缩文件
mv jdk-jdk-12-33 jdk12-33 #把解压后的文件夹改下名字, 当然不改也没问题
cd jdk12-33 # 进入该文件夹
至少要用到以下依赖:
gcc -v #查看有没有安装gcc
# 没有的话就用命令 sudo apt-get install build-essential 安装
# 下面依赖都会用到,提前安装好
sudo apt-get install autoconf
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
sudo apt-get install libcups2-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libasound2-dev
sudo apt-get install libffi-dev
sudo apt-get install libfontconfig1-dev
这个意思是,如果你要编译版本号为N的JDK,那你的Linux系统必需已经安装有较大版本号,或者至少N-1版本号的OpenJDK。譬如要编译JDK12,那你的电脑必须已经至少安装了JDK11。官方称之为Bootstrap JDK。
在Ubuntu中安装OpenJDK11非常简单,只需一个命令:
sudo apt-get install openjdk-11-jdk
java --version #安装完后查看版本号确认
进入解压后的源码目录, 输入
bash configure
安静等待依赖检查,期间如果提示缺少依赖,按照要求安装相关依赖即可。
configure
后面可以带参数,譬如:
bash configure --enable-debug --with-jvm-variants=server
。笔者是取巧,直接使用默认的。
依赖检查通过后输入make all
执行整个JDK的编译。如果你用不同参数Configure了几次,那需要带参数CONF来指定用哪一次的。
make all CONF=linux-x86_64-server-fastdebug
我第一次编译时老是遇到一个关于C语言文件的错误,百思不得其解:
=== Output from failing command(s) repeated here ===
......
In function ‘char* strncpy(char*, const char*, size_t)’,
inlined from ‘static jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs*, bool*, JVMFlag::Flags)’ at
...
... ‘char* __builtin_strncpy(char*, const char*, long unsigned int)’ output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
... (rest of output omitted)
我测试了几个版本的JDK都是同样问题,最后才知道原来问题出在我用的gcc版本上。
GCC在8.0之后的版本加入了stringop truncation
的验证警告,这里是因为出现了警告导致编译不通过,那就禁止掉警告再进行编译。
查看我的gcc版本:
gcc -v
...
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
果然如此。禁用警告,从新编译:
bash configure --disable-warnings-as-errors --enable-debug
make all CONF=linux-x86_64-server-fastdebug
大概等了15分钟,成功!
进入/jdk12/jdk12-33/build/linux-x86_64-server-fastdebug/jdk/bin
文件夹,输入:
./java --version
如果编译失败,记得用命令make clean
和make dist-clean
来清理目录,才能确保新的配置生效。
make clean
make dist-clean
两个都要执行,再重新configure。