对于一个复杂的java项目。如何利用命令行来生成class文件并运行

本文详细介绍了Java项目的包结构规范,强调了default包的使用限制及正确组织自定义包的方法。通过具体实例,讲解了如何使用javac命令进行跨包编译,包括设置classpath和指定输出目录,确保项目中的类能够相互引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件结构

包结构中default包下不能有包。因为自定义包中的的类无法调用default包下的类。所以结构需要是这样的
src

  • A
    - Test1.java
  • B
    - Test2.java
    这样才能相互调用。

命令

javac:编译命令。使用参数有 -cp(-classpath)指引用的包的路径,比如 Test1.java中有 import B.Test2,则
javac -cp . .\B*.java (注:也可以.\B\Test2.java,但使用*方便,一下子全包含)
-d 指定生成包的路径,我们可以生成在src下的class,这样比较好看,好整理。即 -d .\classes
综上,就是javac -cp .\B*.java -d . .\classes .\A\Test1.java

例子

home
│ AddressUtils.java
│ Log.java
│ Receiver.java
│ Sender.java
│ Seq.java
│ Listener.java
│ UdpSocket.java
│ WorkThread.java
│ UxServer.java
│ UxServerIn.java
│ UxSocket.java
│ UxSocketL.java
│ UxSocketS.java

├─frames
│ KFrame1.java
│ TFrame.java
│ KFrame.java
│ Frame1.java
│ Frame.java
│ VFrame.java
│ NFrame.java

└─tick
Tick.java
ThreadFactory.java
frames包下的Frame引用home下的Seq。UxSocket引用frames中的包。那么如何编译Receiver跟Sender,如下

javac -cp . .\home\*.java .\home\tick\*.java .\home\frames\*.java  -d .\classes .\home\Receiver.java
javac -cp . .\home\*.java .\home\tick\*.java .\home\frames\*.java  -d .\classes .\home\Sender.java

注意-cp, -d后跟.前是有空格的,一定要加。不然.\home*.java不会被引用

运行

需要进入class所在的文件夹,将包名也加上。比如上面要运行Receiver, 如果不加*home.*则会提示

错误: 找不到或无法加载主类 Receiver
原因: java.lang.ClassNotFoundException: Receiver

cd classes
java home.Receiver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值