当前位置: 首页 > Linux

真正手把手教你从零开始编译JDK

时间:2023-04-06 02:33:05 Linux

使用JAVA作为开发工具的人对JDK不会陌生。有多少人在几乎天天用JDK的时候真正编译过的?估计很少,但是我们可能经常会遇到一些问题。这种现象很奇怪,很难定义,但如果我们能在JDK中做一些小技巧,也许问题就会找到解决办法。本文只是一个牵手。教你如何编译一个JDK别光看,一切都需要自己动手环境准备我使用的环境是虚拟机安装的Centos7.6,纯系统,其他什么都不装查看说明这个是openjdk8的build指令,后面我会把重要部分的截图拿出来简单说明http://hg.openjdk.java.net/jd...按照指令,命令是两步bash。/configuremakeall,但是需要一些环境来准备make版本。要求大于3.8.1,自己查,centos7.6以上必须满足需要有BootstrapJDK,需要7,不能用8,需要在路径中加bin,所以你不需要配置参数下载jdk7,tar格式为jdk-7u80-linux-x64.tar.gz解压tarzxvfjdk-7u80-linux-x64.tar.gz记下java/home/jdk/jdk1的位置。7.0_80/bin不用担心加路径,后面编译的时候用临时的。需要注意的一点是,如果环境变量中有JAVA_HOME,需要把安装组件去掉才能查看组件。您需要搜索这四个组件。yumsearchalsafreetypecupsxrenderselectaparttoinstallyuminstallalsa-libalsa-lib-develfreetype-develfreetypecupscups-devellibXrenderlibXrender-devel有很多教程说需要安装ant,其实ant是不再需要。安装OpenJDK且版本高于所需版本时不再使用Ant。Centos7.6通过yum安装即可满足要求。安装其他组件说了这么多,其实只要安装下面的yumgroupinstall"开发工具"yuminstalllibXilibXi-devellibXtst-devellibXt-devel下载资源,安装mercurial,然后下载源文件的资源获取工程(类似git的一个clone命令,里面包含一些编译好的配置和资源获取文件,体积小,clone后获取大资源)然后进入目录yuminstallmercurialhgclonehttp://hg.openjdk.java.net/jdk8u/jdk8u60jdk8u60cdjdk8u60bash./get_source.sh然后泡茶等着。这个过程很容易失败。如果发现这样的提示WARNING:jaxwsexitedabnormally(255)WARNING:jdkexitedabnormally(255)然后再执行get_source。它只会下载一些没有成功的组件。已成功下载的将不再下载。如果长时间卡住没有动静,请检查带宽使用情况。如果没有,请使用psaux|grepclone终止python克隆进程。Get_source将失败。然后删除失败的目录并再次执行get_source。这部分可能会重复很多次。我至少重复了四五次。jaxws和jdk这两个下载不了,最后放弃。反正jdk下载不了。直接使用控制台打印的克隆地址在浏览器中访问zip包,然后解压。它很快就会完成。我之前已经重试过很多次了。我简直就是个傻瓜。在执行编译之前,将BootstrapJDK添加到环境变量中。网上有很多帖子。这一步会添加很多参数进行配置,比如BootstrapJDK。alsa等的路径其实如果通过yum安装alsa的依赖,把BootstrapJDK的bin目录加到路径中,就不需要加exportPATH=/home/jdk/jdk1.7.0_80/bin:$PATHjava-versionbash./configure--enable-debug--with-target-bits=64这样配置就OK了。最后提示的ccache可以忽略。这是一个编译加速的东西。没关系,而且即使安装了,你也会发现在yum里找不到OK。根据官网提示,执行最后一步makeall。漫长的等待,中间有无数的警告,让人焦急万分。汇编完毕。是这里吗?当然不是,我们还是要用到自己编译好的JDKimages。下面是j2sdk-image的包:JDKj2re-image:JREintoJDK看看目录结构是不是熟悉。我们使用cp命令复制jdk目录到cp-r/home/jdk/jdk8u60/build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image/home/jdk/openjdk-8u60-make到检查版本/home/jdk/openjdk-8u60-make/bin/java-versionopenjdkversion"1.8.0-internal-fastdebug"OpenJDKRuntimeEnvironment(build1.8.0-internal-fastdebug-root_2020_03_22_10_01-b00)OpenJDK64-BitServerVM(build25.60-b23-fastdebug,mixedmode)接下来我们验证一下,我们要找的是Java实现,比较复杂。我选择metabase去metabase官网下载执行jar,写个运行。MB_DB_HOST=mysql所在机器/home/jdk/openjdk-8u60-make/bin/java-jarmetabase.jar执行中间有一个小插曲。Metabase最后初始化数据库连接失败,提示Timedoutafter5.0s。好烦,一直没有解决,关掉防火墙也不行,换成Oracle的JDK也不行。看来是我创建虚拟机的时候网络设置错了。我们先把它放在一边。从已经执行的日志来看,编译好的jdk可以顺利运行。恭喜。至此,终于编译成功,可以打包使用了。欢迎关注公众号,交流共同进步