I am using IntelliJ IDEA 12.1.3. I have one module and I am trying to convert it into a jar as per the steps given here. I built the jar file and I moved the jar file to D:/. If I try to run this jar I get the following message:
Failed to load Main-Class manifest attribute from jar
If I run it using java -classpath jar com.code.TestCase
it works perfectly.
Why does this happen? I created the jar using IntelliJ IDEA. In that jar it has all the code for all external libraries which I added.
In the src manifest file:
Manifest-Version: 1.0
Main-Class: com.code.TestCase
but the jar's manifest file content is:
Manifest-Version: 1.0
Build-Jdk: 1.6.0
Built-By: ubuntu
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
Name: org.apache.log4j
Implementation-Vendor: "Apache Software Foundation"
Implementation-Title: log4j
Implementation-Version: 1.2.15
Why is Main-Class
not added in the jar file MANIFEST.MF, but it has Main-Class
in src?
In Eclipse you can do it simply as follows : Right click on your Java Project and select Export. Select Java -> Runnable JAR file -> Next. Select the Destination folder where you would like to save it and click Finish.
I have experienced the same issue and found a fix and/or bug in how Intellij auto populates the path for the manifest.
INTELLIJ UI
When creating an artifact to create jar files, IntelliJ auto populates the the path where the current manifest is located.
i.e. After choosing Main-Class in the artifact creation page, Intellij will add automatically the following path \src\java\META-INF\MANIFEST.MF. For some reason, the build command never takes the mentioned MANIFEST.MF File. It creates one from scratch without the Main-Class definition which results on the "Failed to load Main-Class"
If using the IntelliJ UI to create jar artifacts; removed the auto populate path by changing it to /$PROJECT_DIR/src/
and click OK.
Example of what it looks like by default:
Now this is what it should look like after the change:
MANUAL FIX TO ENTER CORRECT MANIFEST.MF FILE
On the IntelliJ project , open .idea\artifacts\_jar.xml
Make sure it contains
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" />
</element>
You might need to reload intelliJ once you do this so it picks up on the changes to the .xml file
For me it happened on maven projects where a different structure exists (i.e. src/main/java/..).
I am using OSX 10.9.2 with IntelliJ version 12.1.6
Hope that helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With