-1

I have downloaded a portable version of the Java 8 Runtime Environment, and I intend to ship it with my Java app.

However, the full JRE is 179 MB, and I want to shrink it down a bit.

Can I exclude some files from my distribution of the JRE, and still have it remain functional?

Note: I am asking for a technical answer, not legal advice. Also, this is a self-answer.

MultiplyByZer0
  • 6,302
  • 3
  • 32
  • 48
  • No, it's definitely on-topic. The answer does seem to be largely a copy-paste of material that's copyright Oracle though. I'm unsure of the legality of this post. – Dawood ibn Kareem Jun 24 '17 at 10:39
  • I interpreted "can I ship" as "am I allowed to ship". If this is not the correct interpretation, maybe you could rephrase the question. – Henry Jun 24 '17 at 10:51
  • And it's NOT a duplicate of asela38's question. This question is whether it's possible to reduce the size of JRE8. The earlier question was whether it's possible to reduce the size of JRE6. Not the same thing at all. – Dawood ibn Kareem Jun 24 '17 at 11:19

1 Answers1

0

Yes. According to the Java 8 README, certain folders and files can be removed.

For a desktop Java application

For starters, everything outside of bin/ and lib/ can be removed.

After that, the following folders can removed wholesale:

bin/dtplugin/
bin/plugin2/
lib/deploy/
lib/desktop/
lib/ext/
lib/jfr/
lib/oblique-fonts/

On Windows, the following files can be cut:

bin/deploy.dll
bin/jabswitch.exe
bin/java_crw_demo.dll
bin/JavaAccessBridge-32.dll
bin/JavaAccessBridge-64.dll
bin/javacpl.cpl
bin/javacpl.exe
bin/javaws.exe
bin/JAWTAccessBridge-32.dll
bin/JAWTAccessBridge-64.dll
bin/jfr.dll
bin/jucheck.exe
bin/keytool.exe
bin/kinit.exe
bin/klist.exe
bin/ktab.exe
bin/orbd.exe
bin/policytool.exe
bin/rmid.dll
bin/rmid.exe
bin/rmiregistry.exe
bin/servertool.exe
bin/tnameserv.exe
bin/WindowsAccessBridge-32.dll
bin/WindowsAccessBridge.dll
bin/wsdetect.dll

and if you are directly linking against the JVM or using a custom launcher, you can cut these files:

bin/java.exe
bin/javaw.exe

On Linux:

bin/javaws
bin/keytool
bin/orbd
bin/policytool
bin/rmid
bin/rmiregistry
bin/servertool
bin/tnameserv

On all platforms:

lib/deploy.jar
lib/jfr.jar
lib/plugin.jar
lib/security/cacerts

For a non-JavaFX application

On Windows:

bin/decora-sse.dll
bin/fxplugins.dll
bin/glass.dll
bin/glib-lite.dll
bin/gstreamer-lite.dll
bin/javafx_font_t2k.dll
bin/javafx-font.dll
bin/javafx-iio.dll
bin/jfxmedia.dll
bin/jfxwebkit.dll
bin/prism_common.dll
bin/prism_es2.dll
bin/prism_sw.dll
bin/prism-d3d.dll

On macOS:

lib/fxplugins.dylib
lib/libdecora_sse.so   
lib/libdecora-sse.dylib
lib/libfxplugins.so 
lib/libglass.dylib
lib/libglib-lite.dylib
lib/libgstreamer-lite.dylib
lib/libjavafx_font_t2k.dylib   
lib/libjavafx-font.dylib
lib/libjavafx-iio.dylib
lib/libjfxmedia.dylib
lib/libjfxwebkit.dylib
lib/libprism_common.dylib   
lib/libprism_sw.dylib  
lib/libprism-es2.dylib

On Linux:

lib/amd64/libdecora_sse.so   
lib/amd64/libfxplugins.so  
lib/amd64/libglass.so  
lib/amd64/libgstreamer-lite.so  
lib/amd64/libjavafx_font_freetype.so
lib/amd64/libjavafx_font_pango.so
lib/amd64/libjavafx_font_t2k.so
lib/amd64/libjavafx-font.so  
lib/amd64/libjavafx-iio.so  
lib/amd64/libjfxmedia.so  
lib/amd64/libjfxwebkit.so 
lib/amd64/libprism_common.so
lib/amd64/libprism_es2.so
lib/amd64/libprism_sw.so
lib/amd64/libprism-es2.so
lib/i386/libdecora_sse.so   
lib/i386/libfxplugins.so  
lib/i386/libglass.so
lib/i386/libgstreamer-lite.so
lib/i386/libjavafx_font_freetype.so
lib/i386/libjavafx_font_pango.so
lib/i386/libjavafx_font_t2k.so
lib/i386/libjavafx-font.so
lib/i386/libjavafx-iio.so
lib/i386/libjfxmedia.so
lib/i386/libjfxwebkit.so
lib/i386/libprism_common.so
lib/i386/libprism_es2.so
lib/i386/libprism_sw.so

On all platforms:

lib/ant-javafx.jar
lib/javafx.properties
lib/jfxswt.jar
THIRDPARTYLICENSEREADME-JAVAFX.txt

Summary

On a copy of the 64-bit JRE 8u131 for Windows, removing these files reduces the JRE directory from 179 MB to 98 MB, a reduction of 45%. The result is still capable of loading Java applications, including all of the Swing Component demos.

MultiplyByZer0
  • 6,302
  • 3
  • 32
  • 48