Video: Nikita Lipsky Talks About Java AOT Compilation @JavaZone 2016

Our very own Nikita Lipsky, one of the “fathers” of the Excelsior JET project, was at the JavaZone conference in Oslo last week to give a talk about Java AOT compilation. Here are the video and slides of his talk:

Categories: Java, News

Tags: , , , , ,

Excelsior JET 11 Beta 2 Adds A Long-Awaited Feature

We have published Excelsior JET 11 beta 2 for all five platforms.

Version 11 Highlights

  • Java SE 8 and JavaFX 8 support
  • 99.9999% of JCK8 tests passed

New in this beta

  • Startup time improvement technologies are now available in the 64‑bit versions as well.
  • Command-line interface to JetPackII. After a long last, you can package your apps without invoking the JetPackII GUI:

    xpack -add-file c:\work\MyApp\native\MyApp.exe /bin ^
          -backend excelsior-installer ^
          -company MyCompany ^
          -product MyProduct ^ 
          -eula c:\work\MyApp\MyApp.license ^
          -target c:\work\MyApp\installer\MyApp-setup.exe

    Version 11 will not support some features of the JetPackII GUI, but we plan to add them all later.

Known Issues

  • Startup Accelerator is missing in the OS X version and will be added at some point after release.
  • JET-8055: On Linux, application may crash if run from a directory with spaces in the pathname and the Startup Accelerator is enabled.
  • JET-8040: Eclipse RCP applications may not work on 64-bit Ubuntu if created with Eclipse 4.3

Download Excelsior JET 11 beta 2 Now

Categories: Excelsior JET, News

Tags: , , , ,

Weekend Fun: Help Robotality Beta Test a Native Build of Their Desktop Java Game

Halfway is a futuristic turn-based strategy RPG from Robotality. It is written in Java using libGDX and is available for Windows, OS X, and Linux.

If you are into this kind of gaming, Robotality just published native builds of Halfway in the beta section, so you can give Halfway a shot for free before heading over to Steam to buy it. (Update: It turns out betas are only available to those who bought the game. Sorry.) We would greatly appreciate your feedback, because, as you may have guessed, those native builds were done with Excelsior JET:

Using JET to compile a native version has been enjoyably straightforward. Once set up, creating a build is a matter of pointing it to the game code & assets, and have it spit out an archive or installer with a native executable a few minutes later.

— Daniel Ludwig, Robotality

Happy gaming!

Categories: Customer Showcase

Tags: , , ,

Java App As A Single EXE

Despite Sun’s (now Oracle’s) best efforts to push Java to all PCs in the world, people keep coming to our Web site seeking a way to turn a Java app into a single EXE file that would just run on any Windows box without installation.

Problem is, even though Excelsior JET is capable of compiling your Java application classes together with Java SE standard library classes into a single executable, that executable still needs a number of separate files to run: native method libraries, fonts, time zone information, etc.

Those files are needed because Excelsior JET includes the licensed reference implementation of the Java SE standard library, and that’s the way it works. Changing all the places referencing those files and propagating the changes through Java version updates would be prohibitively expensive.

The solution we used to suggest is to export your application as a self-contained directory, which may then be reduced to a single executable using one of the generic application virtualization technologies such as VMware ThinApp.

If you think application virtualization is an overkill for your needs (especially considering the exorbitant costs of the commercial solutions), here is a quick workaround we recently discovered. Using the free 7-Zip archiver, you may turn the self-contained directory produced by JetPackII into an SFX archive that would unpack itself into a temporary directory, launch your application, wait for its termination and clean up after itself.

For those of you who want to try it immediately, here is a link to the Knowledge Base article with step-by-step instructions and tips to avoid the UAC prompts and PCA warnings on Windows 7 and Vista:

HOWTO: Create a single EXE from your Java application

Packaging a Private JRE

You may be wondering now why you would need Excelsior JET when you could place a private copy of the JRE alongside your application jars in the SFX archive. This is a very valid question, but I suggest you keep reading to learn about the benefits of using our product compared to a private JRE.

Disk Footprint

I will be using our pet example – RSSOwl RSS reader – again. RSSOwl is implemented as an Eclipse RCP application and itself takes 17 MB when unzipped. It also needs a Java runtime so as to run on any computer, whether Java-enabled or not. I have four options:

  1. Uncompressed application directory with a private JRE
  2. Same packaged into an SFX archive as described above
  3. Natively compiled application exported as a self-contained directory
  4. Same packaged into an SFX archive

And here is the disk footprint chart:

As you may see, even in the uncompressed natively compiled form the application’s disk footprint is not much worse than compressed jars with a private JRE.

Startup Time Impact (can be positive)

Now there is a concern that the intermediate decompression step may substantially increase the overall startup time of the application. At the same time, reading one compressed file sequentially, especially from a slow-seek device such as an optical disk drive, takes less time than reading multiple files in a scattered order. Also, the decompressed files will remain in the disk cache, so the application will then enjoy a very warm start. So if the processor is fast enough to decompress the archive at the pace matching the transfer rate of the device containing the SFX, the application may actually start faster.

I have conducted some measurements to prove or disprove the above speculations. Specifically, I could think of the following scenarios where packaging your app as a single, install-free EXE is desirable:

– You want to place it on the desktop of a digitally challenged friend or family member with the words “when you need X, fast-click this icon twice”;

– You want to place it in a well-known shared folder on your intranet for your non-IT colleagues to use.

– You want to carry it around on a USB stick so as to be able to run it on any PC.

– You want it to run automatically from a CD/DVD (you’ll see why single EXE is desirable in this case as well)

I have run the tests on my desktop (AMD Phenom 9750 Quad-Core, 4GB RAM, Optiarc DVD±RW AD-5260S, Windows 7 Professional 64-bit), measuring startup time as the time to fully display the main window.

You may notice that the decompression overhead is negligible these days even on a midrange desktop PC. Moreover, the use of compression totally eliminates the huge optical drive seek overhead, making Java a viable option for creating “autorun” apps.

I have put the SFX packages on our Web site so that you could test them on your systems.

Download RSSOwl 2.0.6 packaged as a single EXE:

Of course, the generic application virtualization solutions and Portable application creators are way more versatile than the above trick, but they are also way more complex and priced in accordance with that complexityversatility, as this case study nicely illustrates.

Read on for more test results »

Categories: Excelsior JET, Java

Tags: , , , ,

Export RCP Apps As Native Executables Right From Your Eclipse IDE

Excelsior JET Eclipse plug-in for RCP developers enables you to export your Eclipse RCP application in native code form and deploy it in the wild without the easy-to-hack jar files.

Just compare the structure of exported RCP applications to see the difference:

How Excelsior JET works

With the Eclipse plug-in for Excelsior JET , the exporting of RCP applications to native code can be done in three simple steps.

STEP 1: Invoke the Export wizard

Click the Excelsior JET button in the Eclipse toolbar.

Eclipse toolbar

The export wizard window will appear.

STEP 2: Select destination

You may export your RCP application into a directory as if you were using
the standard Eclipse Product export wizard, or wrap the application
into Excelsior Installer to enhance the end-user experience.

Specify the desired Product Configuration file and enter the path to the destination directory or to the installer executable you wish to create.

STEP 3: Export!

Click Finish. The exporting process will start.

Upon successful completion, a dialog will appear, displaying
the location of the exported application.

From this dialog, you may also get instructions for the headless build of your RCP application with Excelsior JET and test drive the application installer, if you opted for its creation on STEP 2.

Note: Eclipse RCP applications exported with Excelsior JET no longer need
the JRE to run.

Plug-in installation

You may find detailed instructions and Update Site URL to install this plug-in into your Eclipse IDE on this page.


Whitepaper: Two Ways of Securing Eclipse RCP Applications (obfuscation vs. native pre-compilation.)

Case studies: RCP developers share their experience with Excelsior JET.

Video tutorial: standalone tools providing the advanced features of Excelsior JET, such as startup time optimization, Java Runtime Slim-Down, installer branding, and others.

Excelsior JET for Eclipse RCP page: product information, sample applications, etc.

Categories: Eclipse RCP, Excelsior JET, Product Updates

Tags: , , , , ,

Deploying Standalone JavaFX Applications Without Runtime Dependencies

Update 20-Sep-2015: We are about to release Excelsior JET 11 that will fully support Java SE 8 and JavaFX 8. A public beta is already available. This post is only kept for historical reasons.

Notice: This post concerns JavaFX 1.3. For JavaFX 2, please refer to the newer post.

JavaFX has slashed multiple layers of complexity off the process of development of rich client applications for the JVM. However, at the same time it has added another layer of complexity to their deployment, especially deployment of standalone applications. Now, not only (the right version of) the JRE must be already present on enduser systems, downloaded at install time, or bundled with the application, but also the JavaFX Runtime, and it better be the right version too!

One of the key selling points of Excelsior JET is streamlining of the Java application deployment process through the elimination of JRE dependency. Starting from version 7.0, the removal of JavaFX dependency will be nearly as straightforward, and you will also have your code protected against reverse engineering.

A public beta of Excelsior JET 7.0 is already available, so I have put together a JavaFX Knowledge Base article and then followed it myself to create a zero-dependency Windows setup package for JavaFX 1.2 SDK samples. (The InterestingPhotos sample is missing as I have no Flickr API key and had no time to figure it out.)

Do you develop standalone JavaFX applications? What do you think of the above?

P.S. It is possible to compile JavaFX apps with the current Excelsior JET 6.5, but you have to pack the application jar into the executable with classes, otherwise the application won’t find its own resources. This workaround will not be required in 7.0, thanks to a new feature.

Categories: Excelsior JET, Java

Tags: ,