简体   繁体   中英

How do I create a runnable JAR in IntelliJ as I would in Eclipse

My process for creating a runnable JAR from a project with many libraries with Eclipse has been.

Export > Runnable JAR > Select launch configuration > Package required libraries into generated JAR > Finish

This creates a single JAR in my export destination which I FTP to my server and run fine.

I recently switched to IntelliJ for various reasons and it has been an improvement in all cases except for building my JARs which forces me to go back to eclipse temporarily.

With IntelliJ I:

Open Project Structure > Artifacts and create a new JAR from modules with dependencies. I then have my output layout with the name of the JAR, a META-INF inside it and all my libaries with the format Extracted <lib.jar/> (sorry I can't upload screenshots on this VPN.)

I build my artifact (which is about 15MB bigger) and FTP it to my server, try to run it and I get the error:

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

How do I mimic how I do it in Eclipse?

EDIT

The two JARs that are created differ considerably:

The valid jar that Eclipse creates looks like this: 好罐子

Whereas the invalid .JAR looks like this: 坏罐子

You're facing two issues one seems major and one is minor:

  • Major: signature exception
  • Minor: size of the jar is 15 MB greater than the jar produced by eclipse.

The solution of both of the issues lies in the way you are building the artifact. First of all, remove all extracted *.jar then add all the jar's from the available elements pan as shown in the figure.

依赖关系截图

It is obvious that adding packaged(compressed) jars only, will decrease the size. But it also solves the signing issue. For more explanation, please have a look at this article . I'll only quote one line.

It's probably best to keep the official jar as is and just add it as a dependency in the manifest file......

It seems that some of the dependencies are signed and repackaging messes up the META-INF of your project.

If you are using Maven you need to put META-INF directory under /main/resources folder instead of main/java .

Reference: Intellij - Nikolay Chashnikov

Then you can execute the runnable jar normally with java -jar filename.jar

You can these steps:

1) File -> Project Structure -> Project Settings -> Artifacts -> Jar -> From modules with dependencies

2) Check the Include in project build checkbox.

3) Right mouse click on module -> build module 'ModuleName'

you could try using a gradle script. eclipse will make you a gradle project. you can use that build file with any ide. it has a built in jar task.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM