繁体   English   中英

使用cp开关编译Java程序-意外行为

[英]Compiling java program with cp switch - unexpected behavior

使用javac的-cp开关时,我无法理解某些行为。 我在Windows 7计算机的目录C:\\ A \\ B \\ C>中有两个Java文件。 文件是Extend.java和TestExtend.java; 两者都属于软件包“ package com.gonni.profile”。 我收到以下错误:

C:\A\B>javac -d . -cp C\Extend.java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options

C:\A\B>javac -d . -cp 39#$%$fe#%#$%FF#$%GWE C\Extend.java

C:\A\B>javac -d . -cp  C\TestExtend.java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options

C:\A\B>javac -d . -cp 3458$^$%$%BF#W%V#$ C\TestExtend.java
C\TestExtend.java:6: cannot find symbol
symbol  : class Extend
location: class com.gonni.profile.TestExtend
    Extend exObj = new Extend();
    ^
C\TestExtend.java:6: cannot find symbol
symbol  : class Extend
location: class com.gonni.profile.TestExtend
    Extend exObj = new Extend();
                       ^
2 errors

C:\A\B>javac -d . -cp . C\TestExtend.java

C:\A\B>

Extend.java是:

package com.gonni.profile;

class Extend {
    class Inner {

    }
}

TestExtend.java是:

package com.gonni.profile;

class TestExtend {
    public static void main(String[] args) {
        Extend exObj = new Extend();
    }
}

不好意思地说,但是我不明白您想做什么:编译程序或使javac失败?

  1. 路径C\\TestExtend.java似乎错误。 您可能是指C:\\TestExtend.java吗?
  2. 什么是39#$%$fe#%#$%FF#$%GWE 您了解-cp是什么意思吗?
  3. 您的课程属于com.gonni.profile包。 这意味着它们必须从源根开始位于目录com/gonni/profile
  4. 您不必提供选项-d . 这是默认值。
  5. 据我了解,您有几个(2?)类,没有任何外部依赖项。 这意味着您根本不必使用-cp (即CLASSPATH)。

该怎么办?

  1. 创建项目所在的目录。 假设C:\\myproj
  2. 为了简化起见,请根据您的软件包创建目录结构。 例如,如果您的软件包是com.gonni.profile ,则应创建目录C:\\myproj\\com\\gonni\\profile
  3. 将您的课程放在那里。
  4. 打开命令提示符,然后转到C:\\proj
  5. 现在运行命令javac com/gonni/profile/*.java

祝好运。

在这种情况下,您的源文件应位于目录C:\\ A \\ B \\ C \\ com \\ gonni \\ profile下-不直接位于C:\\ A \\ B \\ C中。 选项-cp指定查找其他编译类的路径-而不是源文件。

如果要指定源树的位置,请使用-sourcepath

    javac -sourcepath C C/com/gonni/profile/TestExtend.java

Javac要求列出必须在命令行中编译的所有文件。 您不能只列出一个,而是自动列出其他人。 结果,大型,现实世界的项目很难以这种方式构建。 另外,修复其他人已经指出的一些小错误。

因此,如果您想成为命令行大师,请学习Eclipse,NetBeans等用于基于IDE的开发,或者学习Maven,Ant,Make等。 仅在这些时间直接调用javac并不常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM