java编译时类路径的问题

painforever 2008-10-03 07:55:53
有两个类分别在不同的包中,完整类名是com.a.A和com.b.B,我想在com.b.B这个类中调用com.a.A的某个方法,已经import了这个类,但是不知道在dos环境下如何写javac和java命令,请高手指点谢谢!
...全文
360 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
painforever 2008-10-04
  • 打赏
  • 举报
回复
javac -cp bin -d bin src\com\b\B.java 这句执行成功了!但是,java -cp bin com.b.B这句又跑不了了,说java.lang.NoClassDefFoundError。。。
accp206 2008-10-04
  • 打赏
  • 举报
回复
java -cp bin com.b.B

这句命令的前提是:你的main函数是放在B类中。(我猜是如此)
accp206 2008-10-04
  • 打赏
  • 举报
回复
前提:
现在A.java已经编译成功,并且放到了对应的bin目录下

你这样做:

进入MyProject目录。然后:
javac -cp bin -d bin src\com\b\B.java
然后:
java -cp bin com.b.B
painforever 2008-10-04
  • 打赏
  • 举报
回复
我的包目录是这样的:
MyProject
|
|--src
| |
| --com
| |
| |--a
| | |
| | --A.java
| |--b
| | |
| | --B.java
|--bin
| --com
| |
| |--a
| | |
| | --A.class
| |--b
| | |
| | --B.class

我想弄成这样的结构,现在A.java已经编译成功,并且放到了对应的bin目录下,在B.java中import了com.a.A
但是编译B.java的时候不知道怎么写javac和java命令,照楼上的做法做了一下编译器报错说找不到com.a软件包

还请帮忙看一下!谢谢!!!
painforever 2008-10-04
  • 打赏
  • 举报
回复
哦,太谢谢啦!!
accp206 2008-10-04
  • 打赏
  • 举报
回复
这是单独编译时的示例(目录结构及代码跟以前一样,没变):
accp206 2008-10-04
  • 打赏
  • 举报
回复
如果是单独写,因为存在对其它类的依赖,就必须得指定cp(即classpath)
因为你之前编译的结果都放在bin下,所以你得加上 -cp bin
完整示例:
javac -cp bin -d bin src/com/b/B.java
painforever 2008-10-04
  • 打赏
  • 举报
回复
谢谢accp206!!!按照你的写法我试成功了~
不过我又试了一下,先写javac -d bin src/com/a/A.java运行后再写javac -d bin src/com/b/B.java这样的话第二条javac命令就又无法执行了,它说是找不到import的com.company1包,请问下知道怎么回事么?
accp206 2008-10-04
  • 打赏
  • 举报
回复
不可能吧?
你确定你是在MyProject目录下执行的这条命令吗?
楼主,我刚给你尝试了一次,是成功的。你参考一下吧。

前提:目录结构就是楼主在8楼的目录结构。

代码:

// MyProject\src\com\a\A.java
package com.a;

public class A
{
public void fun()
{
System.out.println("A");
}
}


// MyProject\src\com\b\B.java
package com.b;

import com.a.*;

public class B
{
public void fun()
{
new A().fun();
}

public static void main(String[]args)
{
new B().fun();
}
}

执行过程和结果:
無名VF 2008-10-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 accp206 的回复:]
引用 2 楼 accp206 的回复:
你有两个Java源文件:
A.java
B.java
且主函数在B.java中,是吧?

那么,你把这两个文件放到同一个目录底下,假设这个目录是C:\
然后,你进入DOS环境,来到C:\
然后编译:
javac -d . *.java
然后运行:
java com.b.B


编译的时候,-d指定的是把.class文件放到什么地方去。在本例中指定“.”,表示的是当前目录。这样,javac在编译java文件时,会自动在当前目录下创建包(…
[/Quote]

...
huoyin 2008-10-03
  • 打赏
  • 举报
回复
假设你把A.java, B.java 和一个空的bin目录 放在 c:\study,则命令如下:

cmd>cd c:\study
cmd>javac -d bin A.java
cmd>javac -cp bin -d bin B.java
cmd>cd bin
cmd>java -cp . com.b.B
  • 打赏
  • 举报
回复
指定例如该程序放在  D:目录下

javac a.java
然后运行:
java a
accp206 2008-10-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 accp206 的回复:]
你有两个Java源文件:
A.java
B.java
且主函数在B.java中,是吧?

那么,你把这两个文件放到同一个目录底下,假设这个目录是C:\
然后,你进入DOS环境,来到C:\
然后编译:
javac -d . *.java
然后运行:
java com.b.B
[/Quote]

编译的时候,-d指定的是把.class文件放到什么地方去。在本例中指定“.”,表示的是当前目录。这样,javac在编译java文件时,会自动在当前目录下创建包(其实也就是目录啦),并把编译所得到的.class文件放到相应的包中去。

再举个例子,如果你的源文件在E:\src下,而你想把编译之后的内容放入E:\bin目录下,则可如此:

E:\>javac -d e:\bin e:\src\*.java

E:\>java -cp e:\bin com.b.B
accp206 2008-10-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 painforever 的回复:]
补充一下:com.a.A编译在bin/com/a目录下,com.b.B编译后也放在相应的目录下
[/Quote]

这两个类的包名不同,编译之后不可能放在同一个目录中的啊?
accp206 2008-10-03
  • 打赏
  • 举报
回复
你有两个Java源文件:
A.java
B.java
且主函数在B.java中,是吧?

那么,你把这两个文件放到同一个目录底下,假设这个目录是C:\
然后,你进入DOS环境,来到C:\
然后编译:
javac -d . *.java
然后运行:
java com.b.B
painforever 2008-10-03
  • 打赏
  • 举报
回复
补充一下:com.a.A编译在bin/com/a目录下,com.b.B编译后也放在相应的目录下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧