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