2013-08-07 71 views
1

我运行Windows 7与Java版本的通配符示数我的电脑,我的computerlab网络的Linux(Fedora的,可能是版本13)1.6.0_31-B05运行Java版本1.6.0_35 -b10Linux的javac命令在类路径

我有一个C:\myproject(et al)目录,其中src,libbin子目录。

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

我在Linux下重新创建了这个树,在../myproject(et al)下。

  • 当我尝试在DOS下进行编译,从..\myproject\src目录,下面这条命令,它工作正常:

    javac -cp ".;../bin;../lib/*" -d ../bin org/unlv/schillerlab/motif_diversity/step02/*.java 
    
  • 当我试图在Linux下编译,从../myproject/src目录,我得到的消息不正确类路径../lib/*

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

computerlab网络位置可从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文件。我也尝试了Linux javac命令,其中有一个到lib目录的绝对路径;没有快乐。
同样,我试图从-cp子句中删除引号(");没有快乐。

难道问题是我运行的是旧版本的Fedora?如果没有,那么是否有人对这个问题有什么假设?

回答

1

通配符扩展行为可能不同在Linux比Windows:在类UNIX系统的系统,它是贝壳履行所通配符扩展以前的参数传递给可执行文件;在Windows上,它的每个程序都有责任进行通配符扩展(如果有的话)。有疑问用echo替换javac以查看通配符是如何实际扩展的!而你应该使用-sourcepath选项来javac来定义源位置(不知道这是否真的起作用,它自我上次使用以来已经有10多年了...)

+0

echo ../ lib/*确实列出了所有的jar文件。另外,考虑到我读过的所有内容,以及该命令在Dos中的工作原理,我认为在Linux javac命令中,指定jar文件目录(即../lib/*)作为classpath参数的一部分应该可行。 – user2661923

+0

在Linux上(至少在Bash中),通配符扩展不会发生在“”内部。回声“../lib/*”不会和echo ../lib/*一样。也就是说,根据文件,它看起来好像任何一种形式都应该起作用。你是否从你的src /目录运行javac? – Sbodd

+0

因此,在Linux中尝试使用引号,_should_(并且)会失败。只是要小心,我只是重试,没有引号: javac -cp。:../ bin:../ lib/* -d ../bin org/unlv/schillerlab/motif_diversity/step02/*。 java 错误的类路径:../lib/* repsonse依然存在。 是的,我从我的src目录运行javac。 – user2661923