2

我目前正在学习 OCP Java 11 认证,并且正在使用基本的 JDK 命令。

在学习指南中有一个评论问题提到该jar命令还支持该-cp选项(类路径)。这是真的?我不知道这样的事情,我也没有在官方文档中找到信息。

我知道该-C选项,提到要归档的文件所在的路径。另外,javajavac接受-cp

我开始相信这是学习指南中的错误,但我想先仔细检查一下。

这是有效的吗?

jar -cf newJar.jar -cp /sample/dir .

这肯定是:

jar -cf newJar.jar -C /sample/dir .

如果classpath参数确实有效,-cp和-C有什么区别?我有点困惑。

谢谢。

4

1 回答 1

1

正如你所指出的,文档没有提到类路径,所以没有理由假设它-cp指定了它(撇开我什至不知道什么jar可以使用类路径)。或者是吗?或者可以将其他选项结合起来-cp吗?我们如何确定?通过查看代码!

解析命令行选项涉及两个类:MainGNUStyleCommandLineOptions. 让我们从后者开始。

GNUStyleOptions方法中parseOptions解析参数:

static int parseOptions(Main jartool, String[] args) throws BadArgs {
    int count = 0;

    // [...]

    // [ iterate over each argument ]
    for (; count < args.length; count++) {
        // [...]
        // [ get the option's name ]
        String name = args[count];
        // [...]
        // [ look up the option ]
        Option option = getOption(name);
        // [...]
    }

    return count;
}

请注意,此代码不包含将组合选项分开的功能,getOption也不包含 - 它只是在预定义的已识别选项数组中查找字符串。由于-p/--module-path在这里定义,-c不能与它结合到-cp.

只是为了好玩,让我们检查一下Main。有parseArgs,它确实 理解组合标志并切换每个单独的字母。这是您可以找到的地方-c,也是一个-P, 所以-cP可能有用。我将把这个作为练习留给读者。

于 2020-05-12T19:53:56.437 回答