在Linux中的classpath上使用带有多个特定jar的javac(冒号后冒号不会扩展)

时间:2012-02-03 02:38:12

标签: java linux classpath javac

我正在尝试使用类似于以下命令编译一个使用两个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字符串无效(在这种情况下,没有导出成功,并且存在编译错误,无论是寄生还是公共)。

我已经看过以前的问题了:

Setting multiple jars in java classpath

Using multiple .jar with javac

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

1 个答案:

答案 0 :(得分:11)

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

为了澄清,这不是特定于Java的问题,请在shell中尝试:

$ echo ~/.bashrc:~/.bashrc

你应该得到类似的东西:

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

(当然,icyrock.com取代了您的登录信息)。第二个〜不会被bash扩展,这就是为什么遇到问题。您期望它扩展到:

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

这就是为什么你有“第一作品,第二作品”的经历。

查看bash手册:

你可以看到:

  

如果单词开头,带有不带引号的代字号('〜'),则所有字符直到第一个未加引号的斜杠(或所有字符,如果没有未加引号的斜杠)被认为是波浪线前缀。

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