onl*_*teo 5 java jar classpath executable-jar
我正在尝试从命令行创建一个可执行jar.JAR中的主类具有我已打包到另一个普通JAR文件中的依赖项.
我想将依赖项JAR与可执行JAR打包在一起,以便发送一个JAR文件.
我到目前为止尝试的是以下内容:
依赖项Hello.class文件具有模拟代码:
public class Hello {
    public String getHello() {
        return "Well hello there!!";
    }
}
我使用以下方法将类文件打包到hello.jar中:
jar cvfM hello.jar Hello.class
该hello.jar内容现在是:
hello.jar -+- Hello.class
现在我有主要类与模拟代码:
public class Main {
    public static void main(String[] args) {
        System.out.println(new Hello().getHello());
    }
}
然后,我创建一个清单文件manifest.txt,其中包含以下内容:
Main-Class: Main
Class-Path: hello.jar
我现在使用以下方法创建可执行JAR:
jar cvfm main.jar manifest.txt Main.class hello.jar
该main.jar文件内容是现在:
main.jar -+- Main.class
          |
          +- hello.jar
          |
          +- META-INF -+- MANIFEST.MF
使用以下命令运行可执行JAR:
java -jar main.jar
我得到Hello类依赖项的类加载器错误.我知道这是因为类加载器在与main.jar相同的路径中查找hello.jar.因此,当我将hello.jar的副本放在main.jar旁边时,我能够运行它.
为了能够在hello.jar中运行main.jar,我需要做什么?
我知道你会问:"他为什么要这样做呢?" 我知道ppl主要使用Eclipse,Ant,Maven或其他工具来做到这一点.但请只是幽默我:)
不幸的是,你的方法是完全错误的.没有"正常"的方法将罐子放在另一个罐子里面.所以你的hello.jar在main.jar中无关!关键是"普通"类加载器不会在jar中查找jar文件,因此你会得到类找不到错误.但是:如果你想要desparetly这样做,那么google为"OneJar"并转到http://one-jar.sourceforge.net/
没有简单的方法可以做到这一点。也就是说,如果您想将 jar 嵌套在 jar 中,则必须编写自己的类加载器。
有几种产品已经为您提供了支持。One-Jar 是我使用得非常成功的其中之一——可以轻松地编写它的脚本。
这是关于整个主题的有趣的讨论——
| 归档时间: | 
 | 
| 查看次数: | 4566 次 | 
| 最近记录: |