Image of How to run a jar file from command line

ADVERTISEMENT

Introduction

So you got an executable jar and you are wondering how to run it! . In this tutorial we define the different ways to run an executable jar through the windows command line. In case you don’t know what’s an executable jar, refer to our previous tutorial about creating executable jars in java.

Throughout this tutorial, we consider that you’ve already installed java on your machine, and you set up properly the java environment variables.

1. Jars with predefined main class

Every executable jar should hold a MANIFEST.MF file which holds important information about the jar itself, if you’re lucky enough you get a jar with a predefined main class in MANIFEST.MF

In order to check if the main class is already defined:

extract your jar using any archive tool e.g. winrar, 7-zip => open MANIFEST.MF file under META-INF => then check whether there exists an attribute called Main-Class and is set properly.

In order to run the jar, just type the following command in the windows console:

java -jar <name-of-jar-with-extension>

eg

java -jar executable.jar

2. Jars without predefined main class

Some developers forget to define the main class inside the manifest file while creating the executable jar, when you get this kind of jar and try to run the above command, you get an error message like : ‘no main manifest attrbute’.

In order to run this kind of jar, you must know the full path of the main class and use the following command:

java -cp <jar-file-name-with-extension> <full-path-of-main-class>

e.g.

java -cp executable.jar com.programmer.gate.HelloWorld

If you don’t want to write the path of the main class each time you run the jar, you can update the manifest file of the jar and add your main class there. Refer to this article on how to make an existing jar file executable.

3. Dependable jars

A jar is dependable if it can’t run independently without the existence of other jars, in order to run this kind of jar you must explicitly specify its classpath either through command line or via manifest file.

Suppose that you have a folder named lib which exists inside the project beside META-INF and holds third-party libraries used by your application, your jar wouldn’t work without including these dependencies.

Option 1: Specify the dependencies while running the jar in the command line:

java -cp <name-of-jar-with-extension>;<path-of-dependency-folder>/*;. <path-of-main-class>

e.g.

java -cp executable.jar;lib/*;. com.programmer.gate.HelloWorld

Option 2: Specify the classpath of the jar in the manifest file:

Normally the developers who create the jar should specify its dependencies inside the manifest, but in case they forgot and you don’t have other way to run the jar, just add the following attribute just before the main class attribute in MANIFEST.MF:

Class-Path: . lib/*

then use the typical command:

java -jar executable.jar

4. Unsupported major.minor error

In some cases, you got ‘Unsupported major.minor version’ error when running an executable jar. This error means that the version of the JDK used for developing the jar is greater than the JRE version currently used to run it. Beware that java is backward compatible, so always make sure that the JRE version of running environment is greater than or equal to the JDK version used for development.

Summary

In this article we introduce the most common way for structuring a maintainable web service, our example can be used as a template for creating any web service using object oriented language. The important factor when structuring an application is to divide it into several modules/components and to define how these components interact between each other.

Next Steps

If you're interested in learning more about the basics of Java, coding, and software development, check out our Coding Essentials Guidebook for Developers, where we cover the essential languages, concepts, and tools that you'll need to become a professional developer.

Thanks and happy coding! We hope you enjoyed this article. If you have any questions or comments, feel free to reach out to jacob@initialcommit.io.