Adopt Open JDK官方文档(四)基于虚拟机的编译环境

简介:

译文地址 译者:bobwenx@gmail.com

4.基于虚拟机的编译环境


  • 准备工作
  • 编译你自己的虚拟机
  • 编译你自己的轻量级虚拟机
  • 在Host 与 Guest VM 之间共享文件
  • 适用于 OpenJDK 8 的Vagrant Puppet 环境

4.1 准备工作


请注意,因为所需下载的VM镜像文件高达数GB, 请在稳定的网络环境中进行下载。如果有可能,请使用支持断点续传的下载管理器。

MacOS 用户: 请使用 zipeg 来解压缩下载后的文件。

下载后的 .OVA 与 .OVF 文件可以使用VirtualBox进行装载(Import Appliance…)

这些VM镜像包含了OpenJDK 8 与 OpenJDK 9 相关的源码和编译环境.

运行这些VM镜像的最低配置需求:

  • 64-bit 架构的操作系统和CPU
  • 15-20 GB 可用磁盘空间
  • 一台可以高速运行虚拟机的笔记本/Server
  • 已安装VirtualBox
  • 理解Java相关技术
  • 了解一些OpenJDK相关的知识
包含OpenJDK 源码与Eclipse的 Ubuntu 12.04 VM镜像

该VM中已包含一个基于Eclipse的 OpenJDK 编译环境:

包含OpenJDK 源码与IntelliJ的 Ubuntu 12.04 VM镜像

该VM中已包含一个基于IntelliJ的 OpenJDK 编译环境:

包含OpenJDK 9(jigsaw) 源码与Eclipse的 Ubuntu 12.04 VM镜像

该VM中已包含一个基于Eclipse的 OpenJDK 编译环境:

包含OpenJDK 9(jigsaw) 源码与IntelliJ的 Ubuntu 12.04 VM镜像

该VM中已包含一个基于IntelliJ的 OpenJDK 编译环境:

4.2 设置编译VM


如果你已经下载了设置后的VM镜像,你可以:

  • 使用Build your own VirtualBox VM 项目提供的可执行脚本(基于Packer/Puppet/Vagrant/Chef)来执行编译VM自动化环境设置. 详细步骤可以参考该项目的 wiki.

4.3 创建轻量级VM镜像


这里简化地描述如何设置一个用于编译OpenJDK的标准VM

快速指南

https://www.vagrantup.com/downloads.html下载 Vagrant (1.7.2或更高版本)。

下载完成后,请执行如下命令:


# Clone the adopt-openjdk-kiss-vagrant repo
$ git clone git@github.com:neomatrix369/adopt-openjdk-kiss-vagrant.git

# Change to a folder to create the Vagrantfile
$ cd adopt-openjdk-kiss-vagrant.git
$ vagrant init

# Start up the machine
$ vagrant up

# ssh into the VM
$ vagrant ssh

# in the ssh shell
# Mapping in place: /vagrant/scripts/ ==> [currentfolder]/scripts
AI 代码解读


请注意这里将 当前目录/scripts 映射到了VM中的 /vagrant/scripts/ 目录. 之后的镜像构建过程中都需要在scripts目录中执行各种脚本。在完成上诉步骤后,你便已成功构建了一个VM镜像。此时你可以使用 Build your own VirtualBox VM 项目提供的可执行脚本来设置编译VM. 详细步骤可以参考该项目的 wiki.

请注意:创建VM镜像大致需要下载 377MB 数据,如果你的网速不佳,请下载事先编译好的VM镜像。使用编译VM,从头开始编译OpenJDK 9 大概需要1个小时(MacBook pro 2013, 16GB内存, SSD磁盘).

详细技术实现

这里描述上述快速指南中涉及到的技术细节。 这里的文档描述中,所有标注(*)的步骤都是必须执行的,所有粗体章节将会提供详细解释或可选配置项。所有以($)开头的命令行均代表需要在Vagrant VM 中执行。

  • 安装Virtual Box, Vagrant 与 Git
  • 下载 Ubuntu VM镜像
  • 初始化 Vagrant VM 设置
  • 编译 OpenJDK 9
安装Virtual Box, Vagrant 与 Git

至目前为止(2015/01/18),在Mac上测试通过的软件版本为:

下载 Ubuntu VM镜像

当Vagrant安装完成后,可以从Ubuntu仓库从下载VM镜像(377MB):


vagrant box add ubuntu-14.10-amd64 https://cloud-images.ubuntu.com/vagrant/utopic/current/utopic-server-cloudimg-amd64-vagrant-disk1.box;
AI 代码解读


下载完成后,可使用Virtual Box 装载并启动镜像。

初始化 Vagrant VM 设置

当VM依赖设置完成并且成功启动后,下一步则需要更新OpenJDK 9 源码:


  $ vagrant ssh
  $ sh /vagrant/scripts/source-share-with-host.sh
AI 代码解读


编译 OpenJDK 9

  $ vagrant ssh
  $ cd /vagrant/sources/jdk9 ;
  $ bash get_source.sh ;
  $ bash configure;
  or  
  $ bash configure --disable-warnings-as-errors;
  $ make clean images ;
$ make test ;
AI 代码解读


此外,也可以使用该https://github.com/neomatrix369/adopt-openjdk-kiss-vagrant 提供的脚本来完成上述工作.

4.4 在Host 与 Guest VM 之间共享文件


本节描述如何在宿主机器上使用IDE访问虚拟机中的Java源码。当设置完成后,你可以在自己熟悉的IDE(IntelliJ/Eclipse)中编辑源码,当编辑完成后再切换到虚拟机中执行JDK Build。

本节所述步骤均在 Mac OSX 10.10 + VirtualBox 4.3.20 上使用VM 镜像(Ubuntu_12.04_OpenJDK_dev_1) 通过测试.

理想情况下,VirtualBox 就自带了文件夹共享功能,但是该共享方式无法与OpenJDK 编译系统完美工作, 特别是C++预编译头文件的处理上.目前为止,我们使用Samba方式来在宿主机和VM之间共享文件, 如下所述:

  1. 在VM中启用Samba服务:编辑Samba配置文件:
     
    AI 代码解读
    sudo gedit /etc/samba/smb.conf
    AI 代码解读

    找到[homes] 小节,将下面的几行取消注释:

    AI 代码解读
     [homes]
     comment = Home Directories
     browseable = yes
     writable = yes
    AI 代码解读

    重启Samba服务:

    AI 代码解读
     sudo restart smbd
    AI 代码解读

  2. 在宿主机上为VM分配静态IP地址:在Virtual Box中,访问菜单项: Machine > Network > Attached to
    • 在 Attached to 下拉列表中选择: Bridged Adapter
    • 在 Name 下拉列表中选择: en0

    将虚拟机的子网设置为与宿主机一致, 你可以在宿主机上通过ifconfig命令(windows为ipconfig)来查看子网地址. 这里以200.200.0.xxx为例, 使用一个未被占用的地址200.200.0.129:

    • 点击 Network
    • 在左侧列表中选中 Wired
    • 点击 Options Button
    • 选择 IPv4 选项栏
    • 在 Method 列表中选择 Manual
    • 在 Addresses 下方,点击 Add 并输入:
      • 未占用的IP地址,例如: 200.200.0.129
      • 与宿主机一致的子网掩码, 例如: 255.255.255.0
      • 当前网络的网管地址, 例如: 200.200.0.90
      • 当前网络的DNS服务器地址, 例如: 200.200.0.90
    • 点击保存.

    可以在宿主机上通过ping来测试网络是否设置正确:

    AI 代码解读
    ping 200.200.0.129
    AI 代码解读

  3. 从宿主机上连接共享目录:使用Samba 映射如下共享目录:
    • VM服务器: openjdk
    • 用户: OpenJDK

    Windows 宿主机, 使用Explorer 映射地址: \200.200.0.129\OpenJDK

    Mac 宿主机, 在Finder中使用CMD-K 连接地址: smb://200.200.0.129/openjdk

    可以参见这两篇文章进行设置: Share Ubuntu Home Directories using samba Share Virtual Box folders in reverse guest host

  4. 使用你熟悉的IDE,从共享目录下编辑OpenJDK源码

4.5 适用于 OpenJDK 8 的Vagrant Puppet 环境


概述

Ubuntu 12.04 沙盒镜像是一个基于Vagrant, 供OpenJDK 8 运行和测试的Puppet 开发环境.

通过使用Vagrant, 你可以快速上手OpenJDK的编译过程.

安装需求

为了使用改环境,你必须安装如下软件:

使用方法

获取puppet vm 配置


git clone https://github.com/soujava/adoptjdk-puppet-vm.git
AI 代码解读


Initial Startup

adoptjdk-puppet-vm目录下,执行如下脚本来启动Puppet 沙盒环境:


    $ vagrant up
AI 代码解读


Puppet 会自动安装Mercurial和OpenJDK. 其克隆 OpenJDK 8 项目, 执行 get_source.sh 以下载所有模块源码,之后执行 ‘bash configure’ 保证编译环境配置正确. 最后执行 make images 来编译JDK 8 分发镜像.

注意,该过程可能会持续 50分钟左右.(测试机: MacPro 2014 250GB SSD 16GB RAM).

如果一切执行顺利,你将会看到如下日志输出:


==> default: ## Finished images (build time 00:00:49)
==> default: ----- Build times -------
==> default: Start 2015-05-01 20:04:30
==> default: End   2015-05-01 20:51:58
==> default: 00:00:42 corba
==> default: 00:00:53 demos
==> default: 00:34:31 hotspot
==> default: 00:00:49 images
==> default: 00:00:26 jaxp
==> default: 00:00:38 jaxws
==> default: 00:08:28 jdk
==> default: 00:00:49 langtools
==> default: 00:00:12 nashorn
==> default: 00:47:28 TOTAL
==> default: -------------------------
==> default: Finished building OpenJDK for target 'images'
AI 代码解读


目录
相关文章
JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用
以上就是JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用的基本步骤。这些步骤可能会因为你的具体需求和环境而有所不同,但是基本的思路是一样的。希望这些信息能够帮助你更好地理解和使用这些工具。
57 17
|
7月前
|
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
667 61
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。
【Azure 环境】Azure 虚拟机上部署 DeepSeek R1 模型教程(1.5B参数)【失败】
遇见错误一:operator torchvision::nms does not exist 遇见错误二:RuntimeError: Failed to infer device type
327 22
|
7月前
|
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
242 2
|
4月前
|
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
94 7
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
189 2
|
7月前
|
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
74 3
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等