1) Install Java SE Development Kit
Download and run the latest JDK installer for macOS:www.oracle.com/technetwork/java/javase/downloads
2) Launch Unix terminal
Using Finder go into "Applications" and then open the "Utilities" folder. Open Terminal and you're now at the Unix prompt.
Enter the following command to verify Java is installed:
3) Make project folder
Enter these two commands:
mkdir showtime cd showtime
The first command creates a folder called "showtime", and the second command moves you into the new folder.
4) Write some Java code
Get the sample Java code and take a look at the Swing commands that create a simple window for displaying the current time:
curl --remote-name https://centerkey.com/mac/java/ShowTime.java cat ShowTime.java
You'll see the code:
5) Compile Java program
Back at the Unix prompt, compile the Java program into a class file:
javac ShowTime.java ls -l
It is possible to run the class file directly, but that results in a poor user experience. Instead we will create a more convenient executable JAR file.
6) Make executable JAR
Before we make an executable JAR file, we need a manifest file to indicate which class contains the "main" function. Create the file:
echo "Main-Class: ShowTime" > MainClass.txt cat MainClass.txt
The resulting manifest file contains a single line:
Now use the following
jar command to create the "ShowTime.jar" file:
jar cmf MainClass.txt ShowTime.jar *.class ls -l
Test your executable JAR with the following command:
java -jar ShowTime.jar
The "It's Showtime!" window with the current time should display in the upper left corner of your screen. Click the red button (marble) to exit the program.
Note: While the manual commands above for steps #5 and #6 work fine, you could automate them using Ant with a build.xml file.
7) Create application icon
The default icon for an executable JAR is a coffee cup. To add a custom
icon, we need to create an
Use the following commands to download a sample PNG image, resize the
image to appropriate dimensions for an icon, and convert it into the
curl --remote-name https://centerkey.com/mac/java/ShowTime.png mkdir ShowTime.iconset sips -z 128 128 ShowTime.png --out ShowTime.iconset/icon_128x128.png iconutil --convert icns ShowTime.iconset ls -lNote:
For this tutorial, just ignore the
Missing image for variant warnings (or
create all the different sizes).
8) Build macOS application and installer
Use the following commands to move the icon file into the
package folder and
tool to build the
ShowTime.app appplication and wrap it in into an installer:
mkdir -p package/macosx cp ShowTime.icns package/macosx jdk=$(/usr/libexec/java_home) $jdk/bin/javapackager -version $jdk/bin/javapackager -deploy -native pkg -name ShowTime \ -BappVersion=1.0.0 -Bicon=package/macosx/ShowTime.icns \ -srcdir . -srcfiles ShowTime.jar -appclass ShowTime \ -outdir out -v cp out/ShowTime-*.pkg show-time-installer.pkg ls -lNote 1:
javapackager tool is the way forward while the legacy JarBundler and
AppBundler approaches are now obsolete.
The executable JAR file
ShowTime.jar checks in at a mere 0.001 MB,
but the installer file
show-time-installer.pkg almost hits a whopping
The reason is that the installer bundles the JRE (an Apple requirement for publishing Java
programs to the Mac App Store).
When you are ready to distribute to the public, you'll want to sign your application with a
Developer ID certificate. Use the
productsign tool to apply a certificate.
9) Try it out
Run the installer:
After completing the installation, go into the "Applications" folder and open the "ShowTime" application. Be sure to check out the "About ShowTime" option on the "ShowTime" menu.
If you run into any problems, compare your terminal commands and output to:Output log
For an example of how you might distribute your installer, take a look at:Snap Backup
Comments or Questions
All the fields are optional. However, if you want a response, make sure to provide your email address.
"Great tutorial." — W.C., October 8, 2009
"Great tutorial! Many thanks, this is really helpful for a programming assignment in a computer network class I'm taking." — Z.L., October 6, 2009
"Great tut omg thanks so much!" — S., October 4, 2009
"I love this tutorial! Thank you!" — S.R., March 4, 2009
"Fantastic!!!!! Thank you very muchhhhh!! I can start mac programing now. The tutorial is great!!!" — F., November 8, 2008
"Incredibly clear to follow, Thanks very much" — J.G., October 1, 2008
"Très bon tutorial, merci beaucoup" — K., November 7, 2007
"This is exactly the information I was looking for!! Great job explaining how to use the Jar Bundler. I always wondered how to group my files into a single 'app' file." — J.L.M., July 6, 2007
"Thanks for the tutorial." — D.W., June 6, 2007
"Great tutorial! Thank You very much!" — T., May 19, 2007
"This is a very good developement friendly site" — A.K., March 18, 2007
"Thankyou, I am very happy to read your content for MacJava. Thankyou very much" — A., January 12, 2007
"Very Good!!!!" — D.A., August 10, 2006
"Great article - I found it very helpful! Thanks!" — J.T., August 1, 2006
"Hello, Great information, thank you very much! Can I translate your article in french?" — P.T., January 21, 2006
"Great article!" — D., December 9, 2005
"Thank you so much. Your instructions are perfectly concise. There is plenty of information about programming, but not nearly enough about installing and packaging. This page is a blessing." — S.B., October 21, 2005
"This is a great info on mac application builder" — S.S., October 11, 2005
"sweet article! one of the clearest and simplest ive seen and everything just works!!" — J.B., September 9, 2005
"Amazing, I would never have thought it was that easy... You are truely the best!" — M.F., September 7, 2005
"Couldn't be more clearer!" — M.H., August 13, 2005
"THX a lot - very helpful and direct to the point" — T.W., August 9, 2005
"Cool -- you solved the mystery!" — C.M., June 27, 2005