JAR文件与从Eclipse导出的Runnable JAR文件中的不同行为

时间:2018-04-19 10:25:11

标签: java eclipse jar

我从以下代码得到的结果不同,具体取决于我是从Eclipse的文件|导出对话框中选择 JAR文件还是 Runnable JAR文件

public static void main(String[] args) throws IOException {
    Enumeration<URL> dirs = Thread.currentThread().getContextClassLoader().getResources(
                "com/test/pojo");
    System.out.println(dirs.hasMoreElements());
}

如果我选择:

  • JAR文件 - 上面的代码打印 false
  • Runnable JAR文件 - 上面的代码打印 true

我比较了两种方式导出的JAR的内容,其中的文件完全相同!

有谁能解释这里发生了什么?

2 个答案:

答案 0 :(得分:0)

我不确定我的回答,但我会尝试:您的文件可能相同,但它并不意味着文件的元数据是相同的,即您可以拥有不同的文件(例如,以不同的格式),但包含相同的数据。因此,Runnable JAR和JAR的元数据可能不同(并且它不会令人惊讶)。

答案 1 :(得分:0)

问题解决了!ClassLoader.getResources()将在我的jar中加载类,但是none-runnable jar没有维护正确的目录enties。

可运行-JAR:

jar tf hall1.jar
META-INF/MANIFEST.MF
  com/
  com/test/
  com/test/Main.class
  com/test/pojo/
  com/test/pojo/Pojo.class

无 - 可运行的JAR:

jar tf hall1.jar
  META-INF/MANIFEST.MF
  com/test/Main.class
  com/test/pojo/Pojo.class

所以我要做的就是在JAR-Export面板中选择“选项 - 添加目录条目”