Alexander Kleinhans
Alexander Kleinhans

Reputation: 6258

Build java project using jars into one jar (command line)

In Intellij, I'm able to "build an artifact" which allows me to create a jar file, even though my project uses other jar files (like drivers). Traditionally, I would compile a project with jar dependencies by putting them in my classpath like so:

javac -cp .:dependency.jar Main.java

and then be able to run Main by doing:

java -cp .:dependency.jar Main

My question is, how do I create a jar file file with this new Main? I can do:

jar cvf Main.jar Main.java

which will create a jar file, but it doesn't run and says:

no main manifest attribute, in Main.jar

I'd like to know how to package my other jar dependencies into on executable jar.

Upvotes: 1

Views: 1139

Answers (1)

Helios
Helios

Reputation: 851

Option 1: Using Maven plug-in if you are using maven:

       <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>Path.to.your.main.class</mainClass>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

Option 2: Using spring boot to create fat jar. Which includes all your dependent jar files. Make sure you include spring boot dependency.

       <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.3.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Option 3: Without any help of maven and Spring:

Create a manifest.txt file with the following content:

Main-Class: path.to.your.main.class

To create jar use command : jar -cvfm Application.jar manifest.txt /path/to/*.class

Upvotes: 1

Related Questions