Reputation: 6258
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
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