[英]Call a Jar Library from Own Jar Project?
我用 java 編寫了一個應用程序並將其轉換為執行 jar 文件,我的項目依賴於“jxl.jar”。 有沒有辦法將“jxl.jar”復制到我的 jar 文件中,然后調用它。
我認為這叫做“嵌套罐子”???
非常感謝
此致,
麥克風
最簡單的方法是解壓縮jxl.jar
並將其與 class 文件一起打包到單個 jar 中。
您也可以將jxl.jar
放入 jar 中,使用JarClassLoader
加載它並使用反射調用,但這可能不值得付出努力並增加了復雜性。
這應該看起來像這樣:
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class Preloader
{
public static void main(String[] args) throws Exception
{
Class<Preloader> c= Preloader.class;
URLClassLoader loader = new URLClassLoader(new URL[]{
c.getResource("program.jar"),
c.getResource("library.jar")});
Class<?> main_class=loader.loadClass("Main");
Method main_method = main_class.getMethod("main", args.getClass());
main_method.invoke(null, new Object[]{args});
}
}
不幸的是,它不適用於嵌套的 jars。 URLClassLoader
有問題。 您可以將嵌套的 jars 提取到臨時文件並將它們傳遞給 URLClassLoader。 您還可以使用此處描述的自定義URLStreamHandler
,它甚至可能是一個有效的解決方案。
不能嵌套 jars。 But you may put the jxl.jar next to your jar, and add this jar as a classpath entry in the manifest of your jar:
Class-Path: jxl.jar
閱讀http://download.oracle.com/javase/tutorial/deployment/jar/downman.html了解詳情。
如果您的項目不使用同一庫的多個版本,您可以按照 Banthar 的說明進行操作,在 jar 文件中提取 lib jar,然后重新打包所有內容。
由於 jar 文件是 zip 文件,您可以使用您喜歡的文件壓縮軟件,並將 jxl.jar 中的類復制到您的文件中。 您也可以使用 jar 命令:
提取 jxl.jar 的內容
jar xf jxl.jar
將內容復制到 output 目錄(與項目的編譯類一起)。 重新包裝一切:
jar cf my.jar my-build-directory
另一種選擇是使用jarjar 。 除了將一個 jar 嵌入另一個之外,jarjar 還可以讓您擁有同一個庫的多個版本(在不同的名稱空間中)。 您可以將它與Ant或從 CLI一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.