D. Kellenberger
D. Kellenberger

Reputation: 335

Zulu with Java 11 and JavaFX Docker Image

I am trying to setup a Docker Image based on Zulu OpenJDK 8 width JavaFX and Maven. But unfortunately JavaFX is not part in the debian binary.

FROM azul/zulu-openjdk-debian:8u222

ARG MAVEN_VERSION=3.6.2
ARG SHA=d941423d115cd021514bfd06c453658b1b3e39e6240969caf4315ab7119a77299713f14b620fb2571a264f8dff2473d8af3cb47b05acf0036fc2553199a5c1ee
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

RUN apt-get update \
    && apt-get upgrade -y \
    && mkdir -p /usr/share/man/man1 \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        git \
    && rm -rf /var/cache/apt/archives/* \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
  && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c - \
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
  && rm -f /tmp/apache-maven.tar.gz \
  && rm -f /usr/bin/mvn \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

Unfortunately, I am not able to build JavaFX based applications:

[ERROR] /builds/myproject/java-clients/examples/javafx/src/main/java/com/myproject/demo/fx/DemoFxClient.java:[28,20] package javafx.scene does not exist

I've also tried to just use the openjdk docker image:

FROM openjdk:8-jdk-slim-buster

ARG MAVEN_VERSION=3.6.2
ARG SHA=d941423d115cd021514bfd06c453658b1b3e39e6240969caf4315ab7119a77299713f14b620fb2571a264f8dff2473d8af3cb47b05acf0036fc2553199a5c1ee
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

RUN apt-get update \
    && apt-get upgrade -y \
    && mkdir -p /usr/share/man/man1 \
    && apt-get install -y --no-install-recommends \
        openjfx \
        ca-certificates \
        curl \
        git \
    && rm -rf /var/cache/apt/archives/* \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
  && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c - \
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
  && rm -f /tmp/apache-maven.tar.gz \
  && rm -f /usr/bin/mvn \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

Was anyone able to create a Docker Image supporting JavaFX builds?

Upvotes: 2

Views: 2093

Answers (1)

D. Kellenberger
D. Kellenberger

Reputation: 335

I have found out that the original problem was not with the JavaFX setup, but that JavaFX dependencies need to be added as maven dependencies.

Zulu JDK 11 with Java FX and Maven Docker Image (e.g. to be used in GitLab Pipeline)

FROM debian:buster-slim

ARG MAVEN_VERSION=3.6.2
ARG SHA=d941423d115cd021514bfd06c453658b1b3e39e6240969caf4315ab7119a77299713f14b620fb2571a264f8dff2473d8af3cb47b05acf0036fc2553199a5c1ee
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

# Install libraries used for builds
RUN apt-get update \
    && apt-get upgrade -y \
    && mkdir -p /usr/share/man/man1 \
    && apt-get install -y --no-install-recommends \
        software-properties-common \
        wget \
        gnupg \
        curl \
        ca-certificates \
        bzip2 \
        zip \
        unzip \
        git \
    && rm -rf /var/cache/apt/archives/* \
    && rm -rf /var/lib/apt/lists/*

# Install Zulu 11
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9 \
    && apt-add-repository 'deb http://repos.azulsystems.com/debian stable main' \
    && apt-get update \
    && apt-get install -y --no-install-recommends zulu-11

# Install Maven
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
  && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c - \
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
  && rm -f /tmp/apache-maven.tar.gz \
  && rm -f /usr/bin/mvn \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

# Add JavaFX
RUN curl -fsSL -o /tmp/javafx-11-0-2-sdk-linux.zip http://gluonhq.com/download/javafx-11-0-2-sdk-linux/ \
  && cd /tmp/ \
  && unzip /tmp/javafx-11-0-2-sdk-linux.zip \
  && cp -arf /tmp/javafx-sdk-11.0.2/lib/* /usr/lib/jvm/zulu-11-amd64/lib/

pom.xml

<project>
  <!--- ... --->
  <properties>
    <maven.compiler.release>11</maven.compiler.release>
    <javafx.version>11</javafx.version>
  </properties>
  <dependencies>
    <!-- ... -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>${javafx.version}</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-fxml</artifactId>
      <version>${javafx.version}</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <release>${maven.compiler.release}</release>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>0.0.3</version>
        <configuration>
          <mainClass>org.openjfx.App</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

These StackOverflow questions / CodeRepos have been helpful:

Upvotes: 3

Related Questions