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

时间:2013-01-15 07:48:54

标签: java

将-cp开关与javac一起使用时,我无法理解某些行为。我在目录C:\ A \ B \ C>中有两个java文件。一台Windows 7机器。这些文件是Extend.java和TestExtend.java;两者都属于包'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();
    }
}

3 个答案:

答案 0 :(得分:1)

我很遗憾地说出来,但我不明白你想做什么:编译你的程序或让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)。
  6. 怎么办?

    1. 创建项目所在的目录。我们说C:\myproj
    2. 根据您的包简化开始创建目录结构的内容。例如,如果您的包是com.gonni.profile,则应创建目录C:\myproj\com\gonni\profile
    3. 把你的班级放在那里。
    4. 打开推荐提示并转到C:\proj
    5. 现在运行命令javac com/gonni/profile/*.java
    6. 祝你好运。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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