在 Linux 中的类路径上使用 javac 和多个特定的 jar(波浪号在冒号后不扩展)

发布于 2025-01-02 05:03:31 字数 724 浏览 0 评论 0原文

我正在尝试通过类似于以下的命令编译一个使用两个 jar 文件(trove 和 apache commons 集合)的 java 源文件

javac -cp ~/.m2/repository/gnu/trove/trove/3.0.0/trove-3.0.0.jar:~/git-workspace/grid/libs/commons-collections-3.2.1.jar $(find . -name TimeJavaCode.java)

在上面的情况下,commons 代码未成功包含,并且出现编译错误使用公共库。如果我颠倒导入的顺序,那么我在使用 trove 时会出现编译错误。我尝试导出到变量以及单引号和双引号 cp 字符串,但均无济于事(在这种情况下,所有导出都不会成功,并且 trove 和 commons 都会出现编译错误)。

我已经看过以下之前的问题:

Setting multiple jars in java classpath

将多个 .jar 与 javac 一起使用

包含两个的正确方法是什么罐子?

I'm trying to compile a java source file that uses two jar files (trove and apache commons collections) via commands similar to the following

javac -cp ~/.m2/repository/gnu/trove/trove/3.0.0/trove-3.0.0.jar:~/git-workspace/grid/libs/commons-collections-3.2.1.jar $(find . -name TimeJavaCode.java)

In the above case, the commons code is not successfully included and there is a compile error where I'm using the commons library. If I reverse the order of the imports, then there are compile errors where I'm using trove. I've tried exporting to a variable as well as single and double quoting the cp string to no avail (in such cases none of the exports succeed, and there are compile errors for both trove and commons).

I've already looked at the following previous questions:

Setting multiple jars in java classpath

Using multiple .jar with javac

What is the correct way to include two jars?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疯了 2025-01-09 05:03:31

不要使用 ~,而是更改为真实路径(即 /home//...),它应该按预期工作。

为了澄清这一点,这不是 Java 特有的问题,请在 shell 中尝试以下操作:

$ echo ~/.bashrc:~/.bashrc

您应该得到类似以下内容:(

/home/icyrock.com/.bashrc:~/.bashrc

其中 icyrock.com 当然会替换为您的登录名)。第二个 ~ 不是由 bash 扩展的,这就是为什么会遇到问题。你期望它扩展到:

/home/icyrock.com/.bashrc:/home/icyrock.com/.bashrc

这就是为什么你有“第一个有效,第二个无效”的经历。

查看 bash 手册:

你可以看到这个:

如果单词以不带引号的波形符 ('~') 开头,则直到第一个不带引号的斜杠之前的所有字符(或所有字符,如果没有不带引号的斜杠)都将被视为波形符前缀。

(强调我的),因此只有第一个波浪号被扩展,因为第二个波浪号不在单词的开头。

Instead of using ~, change to the real path (i.e. /home/<your username>/...), it should work as expected.

To clarify, this is not a Java-specific problem, try this in your shell:

$ echo ~/.bashrc:~/.bashrc

You should get something like:

/home/icyrock.com/.bashrc:~/.bashrc

(where icyrock.com is, of course, replaced by your login). The second ~ is not expanded by bash, which is why run into problems. You are expecting it to expand to:

/home/icyrock.com/.bashrc:/home/icyrock.com/.bashrc

This is why you have the "first works, second doesn't" experience.

Looking at the bash manual:

you can see this:

If a word begins with an unquoted tilde character (‘~’), all of the characters up to the first unquoted slash (or all characters, if there is no unquoted slash) are considered a tilde-prefix.

(emphasis mine), so only first tilde is expanded, as the second tilde is not at the beginning of the word.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文