Skip to content

Instantly share code, notes, and snippets.

@jcayzac
Created May 1, 2020 06:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jcayzac/0c1e2cb69cd6c89f4779557dbe18bab0 to your computer and use it in GitHub Desktop.
Save jcayzac/0c1e2cb69cd6c89f4779557dbe18bab0 to your computer and use it in GitHub Desktop.
Building PlantUML as a native executable
FROM oracle/graalvm-ce:20.0.0-java8
RUN gu install native-image
WORKDIR /opt/graalvm
ADD https://sourceforge.net/projects/plantuml/files/1.2020.8/plantuml.1.2020.8.jar/download /opt/graalvm/plantuml.jar
RUN native-image \
  --verbose \
  -J-Xmx16G -J-Xms16G -Djava.awt.headless=true \
  --no-server \
  --no-fallback \
  --enable-all-security-services \
  -H:+ReportExceptionStackTraces -H:NumberOfThreads=1 \
  --initialize-at-run-time='sun.awt.X11,sun.awt.dnd' \
  --initialize-at-build-time='sun.awt.X11.XToolkit' \
  -H:Name=plantuml -cp plantuml.jar net.sourceforge.plantuml.Run

Unfortunately, PlantUML relies on JNI, so I guess that's a dead end…

$ plantuml
Exception in thread "main" java.lang.UnsatisfiedLinkError: sun.awt.image.BufImgSurfaceData.initRaster(Ljava/lang/Object;IIIIIILjava/awt/image/IndexColorModel;)V [symbol: Java_sun_awt_image_BufImgSurfaceData_initRaster or Java_sun_awt_image_BufImgSurfaceData_initRaster__Ljava_lang_Object_2IIIIIILjava_awt_image_IndexColorModel_2]
	at com.oracle.svm.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:145)
	at com.oracle.svm.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:57)
	at sun.awt.image.BufImgSurfaceData.initRaster(BufImgSurfaceData.java)
	at sun.awt.image.BufImgSurfaceData.createDataIC(BufImgSurfaceData.java:254)
	at sun.awt.image.BufImgSurfaceData.createData(BufImgSurfaceData.java:84)
	at sun.awt.image.BufImgSurfaceManager.<init>(BufImgSurfaceManager.java:55)
	at sun.awt.image.SurfaceManager.getManager(SurfaceManager.java:79)
	at sun.java2d.SurfaceData.getPrimarySurfaceData(SurfaceData.java:273)
	at sun.java2d.SunGraphicsEnvironment.createGraphics(SunGraphicsEnvironment.java:185)
	at sun.java2d.HeadlessGraphicsEnvironment.createGraphics(HeadlessGraphicsEnvironment.java:89)
	at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1182)
	at net.sourceforge.plantuml.FileFormat.<clinit>(FileFormat.java:91)
	at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
	at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
	at java.lang.Class.ensureInitialized(DynamicHub.java:496)
	at net.sourceforge.plantuml.Option.<init>(Option.java:95)
	at net.sourceforge.plantuml.Run.main(Run.java:88)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment