首页 > 解决方案 > java - 为什么java命令在使用java -cp命令时将类路径识别为命令?

问题描述

我正在根据文档研究带有包名的 Java 类的编译:http: //www.ntu.edu.sg/home/ehchua/programming/java/j9c_packageclasspath.html。根据本文的内容,我创建了如下目录结构:

+MyTest  
    -TestCircle.clsss  
    -TestCircle.java  
+PackageTest  
   +classes  
     +com  
       +yyy  
         -Circle.class  
   +src  
     +com  
       +yyy  
         -Circle.java  

在上面的目录结构中,“+”代表文件夹,“-”代表java文件。路径“\PackageTest\classes”目录下的内容是使用javac命令编译Circle.java文件时自动生成的。Circle.java 使用包名“com.yyy”,这里是 Circle 代码:

package com.yyy;
public class Circle{
    private double radius;
    public Circle(double radius){this.radius = radius;}
    public double getRadius(){return radius;}
    public void setRadius(double radius){this.radius = radius;}
    public String toString(){return "Circle[radius=" + radius + "]";}
}

和TestCircle代码:

import com.yyy.Circle;
public class TestCircle{
    public static void main(String[] args){
        Circle c1 = new Circle(1.23);
        System.out.println(c1);
    }
}

我已经使用以下步骤成功编译了 Circle.java:

>cd PackageTest\src\com\yyy
>javac -d classes src\com\yyy\Circle.java

编译完成后会自动生成包名对应的目录结构,位于“PackageTest\classes”文件夹下。然后我使用以下步骤成功编译了 TestCircle.java:

>cd MyTest
>javac -cp D:\PackageTest\classes TestCircle.java

但是当我使用以下命令执行时,出现了错误:

>java -cp .;D:\PackageTest\classes TestCircle

“项目 'D:\PackageTest\classes' 无法识别为 cmdlet、函数、脚本文件或可运行程序的名称”。似乎 java 将类路径识别为某些命令。

任何建议将不胜感激!

PS:以上所有步骤都是在我的 Windows 10 笔记本电脑上进行的。而且我没有设置 CLASSPATH 环境变量。

标签: java

解决方案


在我看来,这不是来自 java 而是来自你的命令 shell 的错误。尝试在参数的值周围加上引号-cp。像这样:

>java -cp ".;D:\PackageTest\classes" TestCircle

它将指示 shell 不要尝试将其解释为命令,而只是将其按原样传递给 java 程序。


推荐阅读