手动编译java文件_Java 手动编译打包实践

假设有如下的目录结构:

D:\TMPMULU

└─mytest

├─AnotherPackage

│      ClassPrintA.java

│      ClassPrintB.java

└─mytestpkg

Tj.java

Tj.java类有个main方法,并且运行的时候要调用ClassPrintA和ClassPrintB类。

源代码分别如下:

packagemytest.AnotherPackage;

publicclassClassPrintA {

publicvoidPrintA()

{

System.out.print("AAAA");

}

}

packagemytest.AnotherPackage;

publicclassClassPrintB {

publicvoidPrintB()

{

System.out.print("BBBB");

}

}

packagemytest.mytestpkg;

importmytest.AnotherPackage.*;

publicclassTj {

publicstaticvoidmain(String[] args) {

// TODO Auto-generated method stub

System.out.print("helllllllll");

ClassPrintA ca=newClassPrintA();

ca.PrintA();

ClassPrintB cb=newClassPrintB();

cb.PrintB();

}

}

现在的任务是把ClassPrintA和ClassPrintB编译打包成jar文件。

Tj类通过这个jar,一起编译。最后运行。

第一步,编译各个java类。

编译的话,不需要指定classpath。

通过命令javac编译。javac的具体参数可以下面地址查到:

在Cmd命令后,先对文件ClassPrintA和ClassPrintB编译。依次输入命令如下:

C:\Users\Administrator>"C:\Program Files\Java\jdk1.7.0_10\bin\javac.exe" D:\tmpm

ulu\mytest\AnotherPackage\ClassPrintA.java

C:\Users\Administrator>"C:\Program Files\Java\jdk1.7.0_10\bin\javac.exe" D:\tmpm

ulu\mytest\AnotherPackage\ClassPrintB.javae53ff770bfc01c5cdbb39e895495f82a.png

运行成功后,在D:\tmpmulu\mytest\AnotherPackage\目录下会有2个class文件。

第二步打包。

对这2个class文件打包,通过jar命令。Jar的使用细节,可以通过以下网址获得:

注意,jdk的版本一定要正确。32位的装32位机器,64位的装64为机器。

运行命令:

要打包成jar文件,运行命令:

C:\Users\Administrator>"C:\Program Files\Java\jdk1.7.0_10\bin\jar.exe" cvf myjar.jar

D:\tmpmulu\mytest\AnotherPackage\ClassPrintA.class D:\tmpmulu\mytest\AnotherPac

kage\ClassPrintB.class

已添加清单

正在添加: D:/tmpmulu/mytest/AnotherPackage/ClassPrintA.class(输入 = 417) (输出 =

289)(压缩了 30%)

正在添加: D:/tmpmulu/mytest/AnotherPackage/ClassPrintB.class(输入 = 417) (输出 =

289)(压缩了 30%)

0598a6fc9cd4c8db682fe2738f03f379.png

最后在C:\Users\Administrator\目录下得到myjar.jar。用解压软件打开看到:

6e52374ca70f20781053c2b2932dd8a3.png

显然,jar程序会根据你输入的路径结构来打包,因此把D盘都打了进去,这一点如果使用相对路径就不是很方便,因此,重新将当前目录切换到D:\TMPMULU\,再次打包。

4f6f84c25f2503b977d0226e2f7bb9f2.png

这次得到的jar包的目录就是相对目录了。

ebde51be17c352bb4dc9bfa0f7423d49.png

第三步,编译Tj文件。

由于Tj代码中引用到了ClassPrintA和ClassPrintB,因此编译的时候,要么引入jar包,要么引入文件位置,两种方式都可以。

先看第一种,引入jar包。

引入jar包,就必须指定jar包文件的位置,为了避免类文件的干扰,先把类文件删除。

下面2个命令都可以

D:\tmpmulu>"C:\Program Files\Java\jdk1.7.0_10\bin\javac.exe" -cp .\myjar.jar D:\

tmpmulu\mytest\mytestpkg\Tj.java

D:\tmpmulu>"C:\Program Files\Java\jdk1.7.0_10\bin\javac.exe" -cp d:\tmpmulu\myja

r.jar D:\tmpmulu\mytest\mytestpkg\Tj.java

9b77a1ad0b976f391f642608206d080a.png

在这种编译下,需要找到之前的jar包,因此通过设定环境变量。-cp .就是把环境变量设为当前路径。也可以写成绝对路径。

在没有jar包的境况下,可以通过设定环境变量,找类文件。这次,为了避免jar文件的干扰,先把jar文件删除。

D:\tmpmulu>"C:\Program Files\Java\jdk1.7.0_10\bin\javac.exe" -cp . D:\tmpmulu\my

test\mytestpkg\Tj.java

D:\tmpmulu>"C:\Program Files\Java\jdk1.7.0_10\bin\javac.exe" -cp d:\tmpmulu D:\t

mpmulu\mytest\mytestpkg\Tj.java

只要设定了环境变量,javac会从该路径找需要的类。

注意,Java中,Java类中包名必须要有对应的路径。就是说,要在某个文件夹中找到mytest.AnotherPackage.ClassPrintA这个类,必须在这个文件夹中找到mytest\AnotherPackage\ClassPrintA.class类,如果没有这样的目录结构,java认为没有找到该包,因此也没找到这样的类。因此,环境变量设为d:\tmpmulu后,在d:\tmpmulu路径下,有mytest\AnotherPackage这个的层次,因此也就能找到里面的类。

无论是引用的jar还是源文件,编译后都会在D:\tmpmulu\mytest\mytestpkg得到Tj.class。

可以尝试运行这个文件。

第四步 运行Tj类文件

运行类文件,也需要指定classpath,并且也是按照包的层次在目录结构中找类。

如果classpath指定为jar包,则不需要之前的类文件了,直接可以运行。但是要注意,类一定要按照包的层次结构放置。指定类名的时候,必须写全包名,设置环境变量的时候,注音不要漏了';'。

如下的命令:

D:\tmpmulu>java -cp d:\tmpmulu\myjar.jar; mytest.mytestpkg.Tj

helllllllllAAAABBBB

D:\tmpmulu>java -cp myjar.jar; mytest.mytestpkg.Tj

helllllllllAAAABBBB

D:\tmpmulu>java -cp .\myjar.jar; mytest.mytestpkg.Tj

helllllllllAAAABBBB

e7787b8d20ef41b33cb5c6e0b433f92e.png

当然,如果没有jar包,那也是可以的。

直接将环境变量社会class文件所在的位置,总之一定要让java找到那些类文件。

D:\tmpmulu>java -cp . mytest.mytestpkg.Tj

helllllllllAAAABBBB

D:\tmpmulu>java -cp .\ mytest.mytestpkg.Tj

helllllllllAAAABBBB

D:\tmpmulu>java -cp D:\tmpmulu mytest.mytestpkg.Tj

helllllllllAAAABBBB

8356b6e016ec8e5174f01ca74c1479a9.png

如果把运行的class移到别目录也可以,运行时只要保证java能找到那些class就行,比如,移到E:\testrun

那么首先保证类所在的位置和它的包名一致。

E:\TESTRUN

└─mytest

└─mytestpkg

Tj.class

C:\Users\Administrator>java -cp d:\tmpmulu\myjar.jar;e:\testrun\;  mytest.mytest

pkg.Tj

4407de828ccb3b85f5a9d7409df9d873.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值