java classpath意外地找到了一个库

时间:2017-12-01 04:32:45

标签: java classpath glob

假设使用joda,例如

package com.domain.testPackage;
public class MyObject
{
    public static void main(String[] args)
    {
        System.out.println((new org.joda.time.DateTime()).toString());
    }
}

可以通过

从Eclipse(Neon)导出jar

File>Export>Java/Runnable Jar>Next>"Copy required libraries into a sub-folder"

java的以下两次调用都将运行。

java -cp testProject.jar:testProject_lib/'*' com.domain.testPackage.MyObject

java -cp testProject.jar com.domain.testPackage.MyObject

似乎只有第一次运行是正确的。为什么第二次调用会运行?

BTW:注意应引用java通配符*,以便Linux不扩展通配符。而是将通配符逐字传递给java,并采用特定于Java的含义“所有JAR文件”。请注意,它也可以在没有引号的情况下工作。我说你应该引用它,而不是你需要的。它的工作原理是因为Linux glob不太可能找到一个文件名,除了其他细节之外,中间有一个冒号,如testProject.jar:testProject_lib/*和零匹配的副作用是glob会方便(或奇怪吗?)回显整个令牌,java将看到回显的令牌并以Java方式解释它。

1 个答案:

答案 0 :(得分:1)

Class-Path: . testProject_lib/joda-time-2.9.2.jar

在清单中找到了。这解释了它。