gantsign / ansible-role-intellij

Ansible role for installing the IntelliJ IDEA IDE

Home Page:https://galaxy.ansible.com/gantsign/intellij

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.