Add support for OpenJDK 11 on CentOS
jdmarble opened this issue · comments
I'm trying to use the role with Java 11 after installing the CentOS 7 packaged OpenJDK 11. Here is a minimal play book:
---
- hosts: localhost
tasks:
- name: install OpenJDK 11
become: true
package:
name: java-11-openjdk-devel
state: present
roles:
- role: gantsign.intellij
users:
- username: "{{ ansible_user_id }}"
intellij_jdks:
- name: '11'
home: '/usr/lib/jvm/java-11'
intellij_default_jdk: '11'
I get a failure on the "configure JDKs" task:
TASK [gantsign.intellij : configure JDKs] ***************************************************************
failed: [localhost] (item=[{u'username': u'jmarble', u'intellij_default_jdk': u'11'}, {u'home': u'/usr/lib/jvm/java-11', u'name': u'11'}]) => {"changed": false, "item": [{"intellij_default_jdk": "11", "username": "jmarble"}, {"home": "/usr/lib/jvm/java-11", "name": "11"}], "msg": "Unsupported JDK directory layout: /usr/lib/jvm/java-11"}
CentOS Linux release 7.6.1810 (Core)
java-11-openjdk-devel version 11.0.2.7
ansible version 2.7.10
gantsign.intellij version 5.6.1
Here's the directory layout of /usr/lib/jre/java-11
:
/usr/lib/jvm/java-11
├── bin
├── conf
│ ├── management
│ └── security
│ └── policy
│ ├── limited
│ └── unlimited
├── include
│ └── linux
├── legal
│ ...
├── lib
│ ├── client
│ ├── jfr
│ ├── jli
│ ├── security
│ └── server
└── tapset
@jdmarble thanks for reporting this issue. It looks to be down to how CentOS package Open JDK 11. They don't include the Java modules or sources by default. Running the following should fix your issue:
yum install java-11-openjdk-jmods java-11-openjdk-src
I'll look into improving the error message to help other users.
Your fixed example playbook would be:
---
- hosts: localhost
pre_tasks:
- name: install OpenJDK 11
become: true
# `yum` supports a list of package names (invokes `yum` once - faster)
# or use `package` and `with_items` (invokes `yum`/`dnf` multiple times - more portable)
yum:
name:
- java-11-openjdk-devel
- java-11-openjdk-jmods
- java-11-openjdk-src
state: present
roles:
- role: gantsign.intellij
users:
- username: "{{ ansible_user_id }}"
intellij_jdks:
- name: '11'
home: '/usr/lib/jvm/java-11'
intellij_default_jdk: '11'
That did it! Thanks a lot for your help! Good to know about pre_tasks
too.