Java

Windows版のjava.exe/jpackage.exeをDocker上のWineで動作させる

Wineとは?

WineはPOSIX OS向けのWindows APIレイヤーです。つまり、WindowsアプリケーションをWindows OSの仮想化無しにLinux/macOSで動作させることが出来ます。

なぜWindowsのJavaをLinux/macOSで動かす必要があるのか?

Javaは”Write once, run anywhere”を謳う言語で、基本的にjava.exeをLinux/macOSで動かす必要はありません。アプリケーションのWindowsとの互換性を確認したいのであればWineを使うより仮想化したWindowsで検証した方が良いです。しかし、パッケージングに関しては、Linux/macOSでjpackage.exeを使ってWindows向けのアプリケーションをパッケージしたいことがあるでしょう。

確認済みdockerfile

以下はDockerコンテナでjpackage.exeを走らせることが出来るdockerfileです。Windows/Wineにくわしいわけではないので、何か改善の余地があったら教えてください。

FROM debian:bullseye

RUN dpkg --add-architecture i386
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y fakeroot
RUN apt-get install -y unzip
RUN apt-get install -y gnupg

# install JDK
RUN curl --output /opt/java17.zip https://download.bell-sw.com/java/17+35/bellsoft-jdk17+35-windows-amd64.zip \
    && cd /opt/  \
    && unzip java17.zip \
    && rm java17.zip 
ENV JAVA_HOME /opt/jdk-17

# install Wine
RUN curl --output winehq.key https://dl.winehq.org/wine-builds/winehq.key
RUN apt-key add winehq.key
RUN rm winehq.key
RUN apt-get install software-properties-common -y
RUN add-apt-repository 'deb https://dl.winehq.org/wine-builds/debian/ bullseye main'
RUN apt-get update
RUN apt install --install-recommends  winehq-staging -y
RUN wine --version
RUN wine wineboot --init

# install WIX TOOLSET
RUN mkdir /opt/wix311 \
    && cd /opt/wix311  \
    && curl -L --output /opt/wix311/wix311.zip https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip  \
    && unzip wix311.zip \
    && rm wix311.zip
    
# WIX TOOLSET is requring .NET.
RUN curl --output winetricks https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks &&\
    chmod +x winetricks && \
    mv -v winetricks /usr/local/bin

# DONNO why dotnet48 installation fails with "warning: exit status 5 - user selected 'Cancel' "
# https://forum.winehq.org/viewtopic.php?f=8&t=35724
ENV WINEPREFIX=/dotnet-test
RUN winetricks --optout -q dotnet48

ENV WINEPATH /opt/jdk-17/bin\;/opt/wix311

WORKDIR /root