If you use Maven to build your Java applications, read on to learn how to compile them down to optimized native executables by pasting eight lines into your Maven project.
Just in case you came to this post without knowing what Excelsior JET is, let me introduce it briefly. Put simply, Excelsior JET is a tool that can compile your Java application into an optimized native executable for any of the major desktop platforms. Yes, you can fully compile your Java programs down to native code as if they were C++ programs! You might say, why? For a complete answer, look here, I would just like to note that reflection, JNI, dynamic class loading, etc., still work after native compilation, so you do not need to change anything in your Java application prior to using Excelsior JET.
If you are already an Excelsior JET user and also happen to use Maven, then we have some good news for you: we have started developing a Maven plugin for our product, and the first public version (0.1.0) is already available from Maven Central. It supports the bare minimum required for the plugin to be useful in at least some real-world scenarios, but we believe that eventually it will cover all features exposed via the Excelsior JET GUI.
Update 15-Dec-2015: Version 0.2.0 is out with support for Excelsior Installer and Windows version-information resources.
Usage and How it works
By default, the plugin assumes that Excelsior JET is installed and can be found via the
PATH environment variable. If that is the case, you just need to copy and paste the following configuration into the
<plugins> section of your
and set the
<mainClass> parameter. Issuing the following command will then initiate a native build of your application:
How it works? First, the plugin takes the main artifact of your Maven project, with all dependencies, and compiles all those jars into a native executable. Upon success, it copies that executable and the required Excelsior JET Runtime files into a separate directory that you may just copy to another computer that has neither Excelsior JET nor the Oracle JRE installed. Finally, the plugin packs the contents of that directory into a zip archive. That’s all!
Configurations other than mainClass
First, you may need to tell the plugin where the copy of Excelsior JET that you want it to use is located, especially if you have several versions of Excelsior JET installed on your system (32- and 64-bit, for instance).
You have three ways to specify the Excelsior JET installation directory to the plugin explicitly: the
<jetHome> parameter of its
jet.home system property passed to Maven, or the
JET_HOME environment variable. If none of these is set, the plugin will search for an Excelsior JET installation along the
There are also two useful Windows-specific configuration parameters:
<hideConsole>true</hideConsole> – hide console
</icon> – set executable icon
Update 15-Dec-2015: Version 0.2.0 adds a bunch of configuration parameters pertaining to Excelsior Installer and Windows version-information resources. Refer to the README file for details.
To demonstrate the process and result of plugin usage, I have forked the JavaFX VNC Client project on GitHub, added the Excelsior JET plugin to its
pom.xml file, and run it through Maven to build native binaries for three platforms.
You can download the binaries from here:
or clone my project and build it yourself:
git clone https://github.com/pjBooms/jfxvnc
Funny note: to build the VNC client on Linux and OS X I have used the just compiled jfxvnc for Windows to connect to our Linux and OS X build servers.
Your Feedback Is Needed!
Excelsior JET has many features that this plugin does not support yet, such as our unique Java Runtime Slim-Down technology. It would take quite a lot of time to cover them all in the plugin.
Therefore, we’ve decided to treat the plugin as a micro-startup – release an MVP (minimal valuable prototype) first, and follow up with new versions as quickly as possible, adding more and more new features.
Moreover, we would like to develop the plugin based on your feedback. To facilitate this, we’ve published its source code on GitHub. What does that mean to you?
- First, that means that the plugin is a free open source project (GPLv3).
- Then that means that you are most welcome to create issues on GitHub to request features or report bugs.
- Moreover, you can develop the plugin with us! If you need some functionality that is not covered by the plugin yet, and we are busy with other important features, you can develop that functionality and send us a pull request.
- Finally, you may fork the plugin and customize it to your specific needs without sending pull requests to us.
Even though we are going to base the plugin development on your feedback in the future, we have our own short-term plan as well. So the next few releases will add the following features:
Packaging the natively compiled application with Excelsior Installer for Windows and Linux. Adding version information to Windows executables will also be supported. Update 15-Dec-2015: Available since version 0.2.0.
- Startup time optimizations. These optimizations are only possible in the presence of a startup execution profile, so the plugin will have the ability to gather that profile.
- Java Runtime Slim-Down.
- Mapping of compiler and packager options to plugin configuration parameters.
- Creation of Mac OS X application bundles.
- Code signing.
- Tomcat Web Applications support.
Note that the order of appearance of these features is not fixed and can be adjusted based on your feedback.
Indeed, we would like to enable easy usage of Excelsior JET with other build tools such as ANT, Gradle, or Ivy. Our choice of Maven is based on the ZeroTurnAround 2014 survey. According to the respondents, 64% of their Java projects used Maven as the main build tool. So we have decided to start with Maven and then see if there is a demand from users of other build tools.
Categories: Excelsior JET, Open Source
Last time Excelsior JET was on the current major version of Java SE, at version 7.2, it only supported 32‑bit Windows and Linux. It is the development of the 64‑bit versions for Windows, OS X, and Linux that caused such an enormous gap in Java version support timing. Now that the final piece has fallen into place, we would like to say: Thanks a lot for your patience!
In other news:
- JavaFX 8 included in the product
- Startup optimization technologies ported to the 64‑bit versions*
- Now you can package your applications using just the
xpack utility, i.e. without invoking the JetPackII GUI at all.
- Certain changes under the hood resulted in increased robustness of the compiled applications
* Startup Accelerator is not available for OS X yet.
or download your evaluation copy of Excelsior JET 11
P.S. if your Support Contract was active on Sep 29, 2015, or you have purchased Excelsior JET 10.5 from a third-party reseller after that date, you should have received the download instructions for version 11 by email.
If those instructions are neither in your inbox nor in your Junk Mail folder, email us at firstname.lastname@example.org.
Categories: Excelsior JET, News
Tags: javafx, release, startup
Please do not worry, we are not open sourcing Excelsior JET as the last act of goodwill before shutting down the company. Excelsior is alive and kicking and our main product remains fully supported closed source. But, as you may or may not know, we also provide consulting services, including custom application development in Java and C++. When working on one such project that involved Spring MVC, a colleague of mine came up with an idea for reducing the amount of boilerplate code in functional tests. His idea then transformed into what has become our first open source project: Restler.
Restler is a small library that uses annotations to help you automatically generate clients for web services, like this:
// create service
Service service =
// create remote REST controller proxy
UserController userControllerProxy =
// execute a REST request
UserController is a Spring REST Controller class, and
userControllerProxy is an instance of a proxy class automatically generated by Restler. Methods of that class make HTTP requests to the REST service located at the URL passed to the
If you are familiar with Square’s Retrofit, Restler works on pretty much the same principles, but with one substantial difference: it gathers information from existing Spring annotations, whereas Retrofit relies on the presence of its own annotations. The Restler approach is both an advantage — you do not need to modify the code of your server or mock its interfaces, and a limitation — it only works with Spring MVC at the moment. So right now we are making Restler extendable with plugins adding support for arbitrary annotations, and plan to create such plugins for Java EE and Spring Data REST annotations in the near future.
The source code is on GitHub, and the binaries are already published on Maven Central. See the wiki for details on how to get started.
Just one more thing: if you try Restler, please let us know what you think about it. You can reach the authors by emailing email@example.com or by tweeting @restlerorg.
Categories: News, Open Source
Tags: open source, REST, Restler, Spring
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 ^
Version 11 will not support some features of the JetPackII GUI, but we plan to add them all later.
- 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: beta, deployment, early access, javafx, startup time
This post contains important information for Excelsior JET customers that plan to keep using Java SE 7 for an extended period of time. You need not read it if you are going to move all your Java developments over to Java SE 8 and upgrade to Excelsior JET 11 soon.
- As you know, Java SE 7 reached its End of Public Updates earlier this year. Excelsior JET 10.5 MP2 supports Java SE 7 Update 80, which is the last public Java SE 7 update issued by Oracle. Future Maintenance Packs for version 10.5 will only contain bug fixes.
- Excelsior JET 11, due in September, will only support Java SE 8.
We will continue providing technical support for Excelsior JET versions 9, 10, and 10.5 to holders of active Support Contracts until the respective End of Life dates of those versions:
Excelsior JET 9 – Dec 26, 2015
Excelsior JET 10 – Jul 23, 2016
Excelsior JET 10.5 – Feb 03, 2017
Please factor these dates into your plans for maintaining Java SE 7 versions of your natively compiled applications.
Should you have any questions on the above subject matter, please email our Sales Dept. at firstname.lastname@example.org.
Categories: Excelsior JET
We have released the first public beta of Excelsior JET 11 for three platforms: Windows/x86, Linux/x64 and OS X. Future betas and the final release will support 64‑bit Windows and 32‑bit Linux as well.
- Java SE 8 and JavaFX 8 support
- 99.999% of JCK8 tests passed
Not in this beta
Features planned for version 11 that are not yet ready for beta testing:
- Startup time improvement technologies in the 64‑bit version
- JetPackII command-line interface
- In the Windows version, the JET Setup welcome screen displayed after the installation bears a wrong Java SE version, 7 Update 76, instead of Java SE 8 Update 40. It is safe to proceed.
- The methods
Thread.resume() are not implemented yet. (They have been deprecated since forever, so you should not be using them anyway.)
Download Excelsior JET 11 beta 1 Now
Categories: Excelsior JET, News
Tags: beta, early access, javafx
Excelsior JET 10.5 Maintenance Pack 2 (MP2) fixes exactly one customer issue, just as it was the case with MP1 back in March. And again, the real reason we’ve taken the time to put together, test, and publish a Maintenance Pack is to sync up with Oracle: included with MP2 is support for Java SE 7 Update 80.
If you are a paying customer of Excelsior JET 10.5, but the download instructions for MP2 are neither in your inbox nor in the junk mail box, request them from our Support Dept. at email@example.com.
Java SE 7, although still fully supported by Oracle on commercial terms, is now past its End of Public Updates date. In April 2015, Oracle released the last two such public updates — Java SE 7 Update 79/80.
Therefore, we shall continue issuing maintenance updates for version 10.5 as needed, until its End of Life (Feb 2017), but there will be no more Java SE 7 version updates.
We are on track to release Excelsior JET 11 with Java 8 support in September 2015. Thanks for your patience.
Categories: Excelsior JET, Product Updates
MSSQLTracker is a free (as in beer) solution that makes the life of Microsoft SQL Server administrators easier. Implemented as a Java Web application supposed to run on Apache Tomcat, it would have been an easy target for malicious users tampering with the code of server management tools. After a careful study, Ben Dawson, the author of MSSQLTracker, chose Excelsior JET to protect his intellectual property and his users’ data.
Read the full case study, then learn how Excelsior JET can help you protect your Java Web applications.
Categories: Customer Showcase, Excelsior JET
Tags: case study, protect, Tomcat, webapps
So implementing support for default methods, and some other features new to Java 8, across all platforms, without breaking things or causing substantial slowdowns, has turned out to be more challenging than we had anticipated.
In other words, the development of Excelsior JET 11 is running late and will miss the original 2Q’15 target release date.
Therefore, we have rescheduled the final release of Excelsior JET 11 to September 2015, but the early access program will start in June. Looking forward to your feedback and — thanks for your patience!
Categories: Excelsior JET
For the uninitiated, Excelsior JET Charity Bundles is essentially a “pay what you can” offer for Excelsior JET, Standard Edition licenses. The net proceeds will go to our local foundation, Save Life, which helps kids and young adults whose families cannot afford treatment for cancer.
You can buy a Charity Bundle now or learn more about the offer first. You can also help by sharing this with members of your professional and social networks. Thank you!
Categories: Charity Bundles, News