How do I include external JARs in my own Project JAR

心已入冬 提交于 2019-12-09 15:27:20

问题


I have a Java application and created a JAR file and deployed it.

The App uses external JARs such as the Log4J JAR. When creating my JAR file, how do I include all external dependent JARs into my archive?

In order to get my App working, I'm having to copy the Log4J JAR into the same directory as my own JAR which kinda defeats the purpose of the jar. Wouldn't it be more elegant to have 1 single JAR file to deploy?


回答1:


If you use Eclipse, You can extract all included files into one runnable jar like this:

  1. Right click on your project name from Package Explorer and select Export.
  2. In Export screen, select Java -> Runnable JAR file and Next.
  3. Fill in the Runnable JAR File Spec screen and Finish.

You can choose whether to package dependency jars as individual jar files or extract them into the generated JAR.




回答2:


You could use something like One-JAR to package your Java application together with its dependency into a single executable Jar file (One-JAR uses a custom classloader to make JARs nesting possible).




回答3:


You have to expand the library jars into the same place where your compiled classes go, then make a jar from that. Depending on how your build process is set up, there may be multiple ways to achieve this. It's not rocket science - a jar is just a zip archive with a META-INF directory at the root level.




回答4:


Keeping JAR separate is better as it is easy to upgrade only the specific JARs to its new versions without touching any other configuration. As of your issue of having to copy each file to same location as of your JAR, you can always use Java CLASSPATH and include any JAR to your application's class path.




回答5:


A JAR is not itself capable of nesting other JARs, as you discovered.

Traditionally, one would distribute a ZIP archive or other installer that would unwind the application JAR (yours) as well as any support JARs in the appropriate location for classpath access. Frequently, then, the application was invoked through a script that invoked the primary JAR and created a classpath that listed the support JARs.

As other posters have noted, you have some options to create a super-JAR if that's what you want.




回答6:


You can use Maven + assembly plugin (http://maven.apache.org/plugins/maven-assembly-plugin/)

BTW, probably that's not the easiest way, if you did not work with maven.



来源:https://stackoverflow.com/questions/3728705/how-do-i-include-external-jars-in-my-own-project-jar

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!