【问题标题】:Linux javac command erroring on wildcard in classpathLinux javac命令在类路径中的通配符上出错
【发布时间】:2013-08-07 18:58:02
【问题描述】:

我在我的 PC 上运行带有 Java 版本 1.6.0_31-b05 的 Windows 7,而我的计算机实验室的网络 Linux(Fedora,可能是版本 13)正在运行 Java 版本 1.6.0_35- b10.

我有一个C:\myproject(等)目录,其中包含srclibbin 子目录。

  • src 文件夹包含树结构中的所有源代码,对应于 java 包。
  • lib 目录包含 JAR 文件。

我在 Linux 中重新创建了树,位于 ../myproject(等)下。

  • 当我尝试在 DOS 中从 ..\myproject\src 目录编译时,使用下面的这个命令,它工作正常:

    javac -cp ".;../bin;../lib/*" -d ../bin org/unlv/schillerlab/motif_diversity/step02/*.java
    
  • 当我尝试在 Linux 中从 ../myproject/src 目录编译时,我收到消息 incorrect classpath: ../lib/*:

    javac -cp ".:../bin:../lib/*" -d ../bin org/unlv/schillerlab/motif_diversity/step02/*.java
    

计算机实验室网络位置可从 DOS 和 Linux 访问。在 Linux 中,我首先创建了 ../myproject/src../myproject/lib../myproject/bin 目录。然后,在 DOS 中,我将必要的文件从我的C 驱动器复制到../myproject/src01../myproject/lib01。然后,在 Linux 中,我使用cp -av 命令分别从src01lib01 填充srclib。因此,我认为不存在 Linux 权限问题。

在 Linux 中,从 ../myproject/src 位置发出 ls ../lib 表明(兄弟)lib 目录确实包含 JAR 文件。我还尝试了带有lib 目录绝对路径的Linux javac 命令;不开心。
同样,我尝试从 -cp 子句中删除引号 (") 标记;没有喜悦。

问题可能是我运行的是旧版本的 Fedora 吗?如果没有,有没有人假设问题是什么?

【问题讨论】:

    标签: java linux classpath wildcard


    【解决方案1】:

    通配符扩展在 Linux 上的行为可能与在 Windows 上不同:在类 Unix 系统中,执行通配符扩展参数传递给可执行文件之前是 shell 的职责;在 Windows 上,每个程序都有责任进行通配符扩展(如果有的话)。有疑问将 javac 替换为 echo 以查看通配符实际上是如何扩展的!而且您应该使用-sourcepath 选项到javac 来定义源位置(无法判断这是否真的有效,距离我上次使用它已经有10多年了......)

    【讨论】:

    • echo ../lib/* 确实列出了所有的 jar 文件。此外,鉴于我读过的所有内容,+ 该命令在 Dos 中有效,我认为在 Linux javac 命令中,将 jar 文件目录(即 ../lib/*)指定为类路径参数的一部分应该有效。
    • 在 Linux 上(至少在 Bash 中),通配符扩展不会发生在 "" 内。 Echo "../lib/*" 不会做与 echo ../lib/* 相同的事情。也就是说,根据文档,看起来任何一种形式都应该有效。你是从你的 src/ 目录运行 javac 吗?
    • 因此,在 Linux 中的尝试,带有引号,应该(并且确实)失败。只是要小心,我只是重试,没有引号: javac -cp .:../bin:../lib/* -d ../bin org/unlv/schillerlab/motif_diversity/step02/*.java不正确的类路径:../lib/* repsonse 仍然存在。是的,我正在从我的 src 目录运行 javac。
    • 我的错...我误读了 Sbodd 的回复:根据这个回复,带引号的尝试也应该成功。无论如何,两次尝试都失败了。
    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2012-08-25
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    相关资源
    最近更新 更多