---
title: Cómo construir el JDK de Java 9
url: https://jarroba.com/construir-jdk-9/
author: Dionisio Cortes
date: 2017-06-03
modified: 2026-10-23
language: es
license: CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/) — attribution: "Cómo construir el JDK de Java 9", Dionisio Cortes, jarroba.com
categories: Lenguajes de Programación
tags: java, java 9
---

# Cómo construir el JDK de Java 9

> Este artículo pretende dar una idea sobre cómo construir el jdk 9 a partir del código fuente aprovechando el inminente lanzamiento del mismo.

Java 9 está a la vuelta de la esquina, y desde [Jarroba](https://jarroba.com) queríamos dedicar un artículo para ver cómo construir el jdk.

 

Es una buena idea pensar en ir comprobando el comportamiento de nuestras aplicaciones en este nuevo JDK, ya que aunque es retrocompatible, por ejemplo, han quitado algunas opciones del recolector de basura (DefNew + CMS, ParNew + SerialOld, Incremental CMS), y ahora G1 es el recolector por defecto.

 

Tenemos la opción de usar unas de versiones compiladas que están en acceso anticipado que podemos encontrar en la página oficial o estar a la última y divertirnos con el código fuente.

 

Java 9 aún no está listo para producción, se espera que lo esté para el 2017/07/27, pero siempre conviene ver si estamos preparados. Para nuestros proyectos personales da igual las versiones que usemos, y siempre es interesante ir usando las últimas para ver qué nos depara el futuro, para producción tenemos que encontrar el balance entre estar obsoletos y correr el riesgo de que nos dejen de dar soporte (incluidas actualizaciones de seguridad, lo cual es peligroso) y arriesgarnos a estar a la última, ya que el software no está tan bien probado como cuando lleva ya bastante tiempo.

 

Hacer una build de la jdk no es algo muy común, ya que la mejor idea es coger un binario e instalarlo, pero a veces nos apetece cacharrear un poco, estar a la última, somos impacientes o queremos colaborar con la creación de la jdk con iniciativas como adoptopenjdk

 

Este artículo está orientado a usuarios de mac osx, los pasos para otros sistemas operativos son similares, pero solo está probado en osx.

 

## Requisitos

 
- Mercurial (ya que el repositorio está en mercurial.)
- La última JDK8.
- freetype.

 

Si consultáis algunos sitios os dirán que instaléis xquartz y luego al hacer el configure, lo hagáis de la siguiente manera:

 

```bash

bash configure --with-freetype-include=/usr/X11/include/freetype2 --with-freetype-lib=/usr/X11/lib --disable-warnings-as-errors --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
```

 

Los JDK se construyen usando siempre el JDK anterior, es decir, para construir el jdk 7 se usa el jdk 6, para el jdk 8 se usa el jdk 7 y para el jdk 9 se usa el jdk 8

 

## Pasos

 

Clonamos el repositorio

 

```bash

hg clone http://hg.openjdk.java.net/jdk9/jdk9
```

 

Nos vamos al directorio que se acaba de crear

 

```bash

cd jdk9
```

 

Ahora tenemos dos opciones, o decirle a bash que nos ejecute el script

 

```bash

bash ./get_source.sh
```

 

O cambiarle los permisos (darle permisos de ejecución) y ejecutarlo

 

```bash

chmod u+x get_source.sh
./get_source.sh
```

 

Hacemos la configuración

 

```bash

bash configure --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home --disable-warnings-as-errors
```

 

Cuando acabe nos dirá algo como:

 

```bash

====================================================
A new configuration has been successfully created in
/Users/dionisio/jdk9/build/macosx-x86_64-normal-server-release
using configure arguments '--with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home --disable-warnings-as-errors'.
 
Configuration summary:
* Debug level:    release
* HS debug level: product
* JDK variant:    normal
* JVM variants:   server
* OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64
* Version string: 9-internal+0-adhoc.dionisio.jdk9 (9-internal)
 
Tools summary:
* Boot JDK:       java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)  (at /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home)
* Toolchain:      clang (clang/LLVM from Xcode 8.3.2)
* C Compiler:     Version 8.1.0 (at /usr/bin/clang)
* C++ Compiler:   Version 8.1.0 (at /usr/bin/clang++)
 
Build performance summary:
* Cores to use:   8
* Memory limit:   16384 MB
```

 

Creamos los ejecutables

 

```bash

make clean images
```

 

Y ya lo tenemos. Podemos comprobar que todo fue bien haciendo:

 

```bash

build/macosx-x86_64-normal-server-release/jdk/bin/java --version
openjdk 9-internal
OpenJDK Runtime Environment (build 9-internal+0-adhoc.dionisio.jdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.dionisio.jdk9, mixed mode)
```

 

Una de las cosas interesantes que trae Java 9 es un REPL llamado JShell. REPL significa read, eval, print and loop (como la consola de python).

 
- Read: Lee lo que introducimos.
- Eval: Evalúa lo que hemos escrito.
- Print: Muestra el resultado.
- Loop: Vuelve al inicio.

 

```bash

build/macosx-x86_64-normal-server-release/jdk/bin/jshell
|  Welcome to JShell -- Version 9-internal
|  For an introduction type: /help intro
```

 

```bash

jshell> System.out.println("Hola")
Hola
```

 

### Bibliografía

 

- [Oracle JDK 9 Migration Guide (Oracle docs)](https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-7744EF96-5899-4FB2-B34E-86D49B2E89B6)
- [OpenJDK Build README (README-builds)](http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html)
