标签:
这里主要介绍 用基础命令的形式执行的方法:
主要用到的只是,javac, jar, java(*.exe)命令,
一.javac[Java源文件编译成Class]
1.常用指令: javac -cp 指定多个classpath
javac -classpath 可以指定类路径 来编译java文件
如:
javac -classpath **\servlet-api.jar **.java 来编译某个java文件
需要指定多个路径? 是用分号 ; 隔开
如:
javac -cp classes; C:\Tomcat\lib\servlet-api.jar -encoding UTF-8 BeerSelect.java
(直接敲在CMD里面的)这就是用classes下的类文件和 servlet-api.jar一起来编译
BeerSelect.java
PS: 这里要记住重点,在运行这个主程序的时候有可能用到的.jar包都需要把classpath指定,
内部编译引用时才不会报错,如果工程小,包不是很多,不太看重编译时效的话,可以建议把工程
的包多放在一个类库文件下。而打包时也把这个文件夹下的jar包全编译到。
另,-encoding UTF-8是如果待编译文件不全是英文,即’有汉字之类的,可以设置编码,省的
编译报错。
2.其他指令或参数可以在CMD中输入"javac"(plus enter key)或者“javac -help”
(plus enter key)看到注释:
用法:javac <选项> <源文件>
二.jar[*.jar Java中引用到的包的操作]
1.常用指令: jar cf 更新指定包里的指定文件或重打包
e.g. : %JAVA_HOME%\bin\jar cf lib\A.jar sample\B.class (这种格式多是写在*.bat等
批处理文件来执行的,下同)
而利用jar命令直接修改包里面的文件(通常是Class文件)时,一定要很了解原包的结构再动手。
而且记住一个原则,包的引用和实际结构的关系是"." == "\"(解压后会发现是实际的文件夹)
2.其他指令或参数可以在CMD中输入"jar"(plus enter key)或者“jar -help”(plus enter key)
看到注释:
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
选项:
-c 创建新的存档
-t 列出存档内容的列表
-x 展开存档中的命名的(或所有的〕文件
-u 更新已存在的存档
-v 生成详细输出到标准输出上
-f 指定存档文件名
-m 包含来自标明文件的标明信息
-0 只存储方式;未用zip压缩格式
-M 不产生所有项的清单(manifest〕文件
-i 为指定的jar文件产生索引信息
-C 改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按‘m‘ 和 ‘f‘标志指定的相同顺序。
首先在资源文件当前目录写一个清单文件example.mf
简单例子可参看: http://blog.csdn.net/studyvcmfc/article/details/7745500
三.java[Class文件实际运行]
这个应该都比较熟,就是执行Java的Class文件(最后一步)’
如
java -cp .;c:\dir1\lib.jar Test
-cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要
全路径到jar包,window上分号“;”
又> e.g. : @"%JAVA_HOME%\bin\java" -cp lib\A.jar; ......sample.B "%~1"
同理可以用java或Java -help来查看:
总之步骤顺序(1,2,3步)不要搞错了就可以,有忘了的参数再去度娘查。
例‘(在Bat中代码)
bat1.bat source
----------------------------------------------------------
REM @echo off
REM 将B.java重新编译成B.class
%JAVA_HOME%\bin\javac -cp lib\A.jar;...... -encoding UTF-8 sample\B.java
REM 更新S.jar中B.class
%JAVA_HOME%\bin\jar cf lib\S.jar sample\B.class
REM 设置内部环境变量(这步看source情况,有的不需要)
set FUNC_LANG=zh
set INNER_HOME=...
PATH=%INNER_HOME%\bin;%PATH%
REM 实际调另外的.bat文件运行.java文件
bat2.bat sampleFile\test.tif>C:\test\result.txt
bat2.bat source
----------------------------------------------------------
@"%JAVA_HOME%\bin\java" -cp lib\A.jar;... -Dxx=%ss% sample.B "%~1"
这个例子目的主旨是修改lib文件夹下的S.jar(..lib\S.jar) 中的B.class文件,更新即可
S.jar Tree:
S.jar
|_____sample
| |______B.class
|_____META-INF
|______MANIFEST.MF
所以还是那句话,要改包,提前必须熟悉后这个包的结构,备份一个,然后再改。
※:最后提示一个很容易被忽略的关键点,在编译的第1步中,实体source存放,如果
不想改很多source,一次编译完,并且在第2步直接更新对应包对应关系目录下的
Class的话。自己重写后的.java文件保存位置,一定要营造一个和将要改的包的相对
位置关系一样的路径,否则出错。如这里:若自己重写了B.java文件,那么就要在
source目录下,建立一个sample文件夹,并把自己重写的B.java文件放进去。
这个一般也能从B.java里的首行 package sample; 这样的代码里看出来。
标签:
原文地址:http://www.cnblogs.com/cnblgKingZone/p/KingZone.html