﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-生活，在继续……-文章分类-批处理</title><link>http://www.blogjava.net/cxc014/category/17356.html</link><description>而真正的生活，应该是不断的向前！</description><language>zh-cn</language><lastBuildDate>Tue, 08 Jan 2008 18:23:12 GMT</lastBuildDate><pubDate>Tue, 08 Jan 2008 18:23:12 GMT</pubDate><ttl>60</ttl><item><title>[扫盲系列]J2ME批处理教程</title><link>http://www.blogjava.net/cxc014/articles/81633.html</link><dc:creator>生活，在继续……勿要停！</dc:creator><author>生活，在继续……勿要停！</author><pubDate>Thu, 16 Nov 2006 14:12:00 GMT</pubDate><guid>http://www.blogjava.net/cxc014/articles/81633.html</guid><wfw:comment>http://www.blogjava.net/cxc014/comments/81633.html</wfw:comment><comments>http://www.blogjava.net/cxc014/articles/81633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxc014/comments/commentRss/81633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxc014/services/trackbacks/81633.html</trackback:ping><description><![CDATA[<p>首先我们需要建立一个工程目录，暂且建在D:\test下吧。然后在test下再建立源程序目录,资源目录，工具目录,这些都可以配置文件中指定。然后就是我们的三个批处理文件了。<br />
注1：批处理文件都以bat为后缀<br />
注2：很多批处理命令我都没多做解释，具体你可以在CMD窗口输入:命令 /?来查看帮助。如果你不喜欢E文的话，也可以上MS的官方网去看，这是中文的链接： <a href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/552ed70a-208d-48c4-8da8-2e27b530eac7.mspx?mfr=true">http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/552ed70a-208d-48c4-8da8-2e27b530eac7.mspx?mfr=true</a></p>
<p>注3：如果你想直接用这个批处理的话，需要progaurd.jar 及kzip,7zip</p>
<p><br />
==================env.bat===================================<br />
REM 此env.bat为环境配置文件，请根据自身环境情况修改</p>
<p>REM REM表示此行为注释,既不显示也不执行<br />
REM echo[打开或关闭命令回显功能，或显示消息。] @表示本行命令不被显示<br />
@echo off</p>
<p>rem **************** environment dir **********<br />
REM 设置JDK的目录[注：在等号左右不能有空格],引用变量值时为：%变量名%<br />
set JDK=D:\j2sdk1.4.2<br />
REM 设置WTK目录</p>
<p>set J2ME_WTK=D:\wtk22<br />
REM 设置编译和混淆时需要的LIB包，一般在WTK的lib目录下，也可用其它包，比如Nokia的,根据机型而定<br />
rem set J2ME_API=D:\Series_60_MIDP_SDK_2_1_Beta\lib\kmidp20.zip<br />
set J2ME_API=%J2ME_WTK%\lib\cldcapi10.jar;%TOOL_DIR%\lib\midpapi20.jar</p>
<p>
<br />
rem ******** work dir *********<br />
REM 设置工作目录,%CD%表示当前目录<br />
set PROJ_DIR=%cd%<br />
REM src为源程序目录<br />
set SCR_DIR=%PROJ_DIR%\src<br />
REM res为资源目录<br />
set RES_DIR=%PROJ_DIR%\res<br />
REM&nbsp; #release为打包结果目录<br />
set RELEASE_DIR=%PROJ_DIR%\#release</p>
<p>rem ****** tools dir *********<br />
REM 设置工具目录<br />
set TOOL_DIR=%PROJ_DIR%\tools</p>
<p>echo on<br />
========================================================<br />
====================config.bat ========================<br />
REM 配置文件，设置项目属性<br />
@echo off<br />
REM 项目名称，既你的jad/Jar包显示的名称<br />
set PROJ_NAME=TestGame<br />
REM 游戏名称，显示在jad的属性栏中，此两名称可以想同<br />
set GAME_NAME=Test Game</p>
<p>REM 设置机型<br />
set PHONE=Triplets<br />
REM 语言<br />
set LANG=%1<br />
REM 这儿用到%1,在批处理的调用中也可以使用参数0~9，0为批处理本身。1~9为参数，用空格隔开。<br />
REM 在批处理中通过%1 ~ %9来引用，如果没有参数则设置为EN<br />
if "%1" == "" set LANG=EN<br />
REM 设置版本号<br />
set VER1=0<br />
set VER2=0<br />
set VER3=1<br />
set VERSION=%VER1%.%VER2%.%VER3%<br />
set PROJ_FULL_NAME=%PROJ_NAME%_%PHONE%<br />
REM 设置Jad/Jar的包名<br />
set ARCHIVE_NAME=%PROJ_FULL_NAME%_%LANG%_%VERSION%<br />
REM 设置主类名称，在创建Jad和混淆时需要用到<br />
set MAIN_CLASS=cMIDlet<br />
set MANIFEST_NAME=Test Game<br />
REM Jad中其它选项<br />
set PROJ_DESCRIPTION=It's a test project!!!<br />
set VENDOR=Sun Co.<br />
set CLDC=CLDC-1.0<br />
set MIDP=MIDP-2.0</p>
<p>REM 设置是否使用混淆和是否使用压缩，这儿我用的kzip<br />
set OBFUSCATE=true<br />
set USE_KZIP=true<br />
echo on<br />
==================================================================<br />
======================build.bat==================<br />
@echo off</p>
<p>REM 调用配置文件<br />
call env.bat<br />
call config.bat %1</p>
<p>
<br />
REM 在我们每次build时，可以查看下是否正确<br />
Echo %PROJ_FULL_NAME%<br />
Echo lang-%LANG%<br />
Echo %VERSION%</p>
<p>rem ***************************<br />
REM 我们需要建立一个临时的目录来保存预处理后（可编译的）的代码，如果没有使用到预处理则可以省去此目录<br />
REM _make为我们Build过程中的临时目录，Build完成后删除，这样可保证每次都是build的最新文件<br />
REM 批处理中也可以使用条件判断和括弧，[注：括弧和if/else 一定要在一行上]<br />
REM 判断一个文件或是目录是否存在可以使用if exist或是if not exist<br />
rem ***************************<br />
if not exist tempsrc (<br />
&nbsp;mkdir tempsrc<br />
) else (<br />
&nbsp;del /S/Q tempsrc\*.*&nbsp;<br />
)<br />
if exist _make (<br />
&nbsp;rd _make /Q /S<br />
)<br />
if not exist %RELEASE_DIR% (<br />
&nbsp;md %RELEASE_DIR%<br />
)<br />
REM 进入到_make目录<br />
mkdir _make<br />
cd _make</p>
<p>rem ******************************<br />
REM 这儿我们使用Echo命令来创建Jad和Manifest文件。同样是为了每次的jad和MF都是最新版本的<br />
REM 用&gt;和&gt;&gt;流重定向符，使Echo输出到文件而非默认的显示器，&gt;为新建,&gt;&gt;为追加<br />
rem ******************************<br />
ECHO Manifest-Version: 1.0&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF<br />
ECHO Created-By: 1.4.1_02 (Sun Microsystems Inc.)&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF<br />
ECHO MicroEdition-Configuration: %CLDC%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF<br />
ECHO MIDlet-Name: %GAME_NAME%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF<br />
ECHO MIDlet-Icon: %ICON%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF<br />
ECHO MIDlet-Vendor: %VENDOR%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF<br />
ECHO MIDlet-1: %GAME_NAME%, %ICON%, %MAIN_CLASS%&gt;&gt;&nbsp; &nbsp;&nbsp;&nbsp;MANIFEST.MF<br />
ECHO MIDlet-Version: %VERSION%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF<br />
ECHO MicroEdition-Profile: %MIDP%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANIFEST.MF</p>
<p>rem ******* Jad&nbsp;&nbsp;**************<br />
ECHO MIDlet-Name: %GAME_NAME%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %ARCHIVE_NAME%.jad<br />
ECHO MIDlet-Icon: %ICON%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %ARCHIVE_NAME%.jad<br />
ECHO MIDlet-Vendor: %VENDOR%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %ARCHIVE_NAME%.jad<br />
ECHO MIDlet-1: %GAME_NAME%, %ICON%, %MAIN_CLASS%&gt;&gt;&nbsp; &nbsp;&nbsp;&nbsp;%ARCHIVE_NAME%.jad<br />
ECHO MIDlet-Version: %VERSION%&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %ARCHIVE_NAME%.jad<br />
ECHO MIDlet-Jar-URL: %ARCHIVE_NAME%.jar&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %ARCHIVE_NAME%.jad<br />
REM 对jar-size这项目，可以使用工具在jar生成后来修改，如果没工具的话，只能手动了^_^<br />
ECHO MIDlet-Jar-Size: &gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %ARCHIVE_NAME%.jad<br />
&nbsp;<br />
rem ******************************<br />
REM 混淆的选项配置,这儿我只列出了最基本的选项，如果还有其它需求，请查阅：<a href="http://proguard.sourceforge.net/">http://proguard.sourceforge.net/</a><br />
rem ******************************<br />
REM 混淆时所要需要的API包<br />
echo -libraryjars %J2ME_API%&nbsp;&nbsp;&nbsp;&nbsp; &gt; %PROJ_FULL_NAME%.pro<br />
REM 要被混淆的Jar包<br />
echo -injars _%PROJ_FULL_NAME%.jar&nbsp;&nbsp;&nbsp;&gt;&gt; %PROJ_FULL_NAME%.pro<br />
REM 混淆时输出文件<br />
echo -outjar&nbsp; %PROJ_FULL_NAME%.jar&nbsp;&nbsp;&nbsp;&gt;&gt; %PROJ_FULL_NAME%.pro<br />
REM 让我们的主类名字保留，不然程序找不到入口了<br />
echo -keep public class %MAIN_CLASS%&nbsp;&nbsp;&nbsp;&gt;&gt; %PROJ_FULL_NAME%.pro</p>
<p>rem ******************************<br />
ECHO Compiling...<br />
rem ******************************<br />
md classes<br />
REM 编译源程序到classes目录<br />
"%JDK%\bin\javac"&nbsp; -bootclasspath "%J2ME_API%" -classpath "%J2ME_API%" -g:none -d classes %SCR_DIR%\*.java</p>
<p>rem *****************************<br />
ECHO Preverify....<br />
rem *****************************<br />
REM 校验[可不需要此步，一般来说要需要对包校验一次既可，也可对编译文件再多校验一次:) ]<br />
"%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%"; -d output classes<br />
REM 如果校验成功或生成一个目录，由-d选项指定，如果没有-d选项，则默认为output<br />
if not exist output (<br />
REM 在批处理中可以使用GOTO语言，有时如果需要较复杂的循环的话，还是比较有用的<br />
&nbsp;echo *** Error: stop building process by preverify.<br />
&nbsp;pause<br />
&nbsp;goto :end<br />
)</p>
<p>rem ***&nbsp; copy resources *************<br />
REM 把我们资源目录下的所有东西COPY到output中，进行打包<br />
copy %RES_DIR%\*.* output</p>
<p>&nbsp;</p>
<p>rem ******************************<br />
ECHO JAR....<br />
rem ******************************<br />
REM 打包;把tempsrc目录下所有文件，MANIFEST.MF为manifest文件(由m选项指定)打成一个jar包。具体查阅jar.exe /?<br />
"%JDK%\bin\jar.exe" cvfm&nbsp; _%PROJ_FULL_NAME%.jar MANIFEST.MF -C output .<br />
if not exist _%PROJ_FULL_NAME%.jar (<br />
&nbsp;echo *** Error: stop building process by jar.<br />
&nbsp;pause<br />
&nbsp;goto :end<br />
)</p>
<p>rem ******************************<br />
ECHO Obfuscate.....<br />
rem ******************************<br />
REM 混淆;这儿我们也可把前面的混淆选项依次列在后面，如果怕太长，可以用文件，记得加@<br />
REM 如果不混淆则直接把jar包改名既可<br />
if "%OBFUSCATE%"=="false" (<br />
&nbsp;copy _%PROJ_FULL_NAME%.jar %PROJ_FULL_NAME%.jar &gt; nul<br />
) else (<br />
&nbsp;"%JDK%\bin\java" -jar %TOOL_DIR%\proguard.jar @%PROJ_FULL_NAME%.pro<br />
)</p>
<p>if not exist %PROJ_FULL_NAME%.jar (<br />
&nbsp;echo *** Error: stop building process by Obfuscate.<br />
&nbsp;pause<br />
&nbsp;goto :end<br />
)<br />
rem *****************************<br />
Echo Preverify...<br />
rem *****************************<br />
REM 再次较验，输出到tempJar中<br />
"%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%" -d tempJar %PROJ_FULL_NAME%.jar</p>
<p>if not exist tempJar\%PROJ_FULL_NAME%.jar (<br />
&nbsp;echo *** Error: stop building process.<br />
&nbsp;goto :end<br />
)</p>
<p>rem ******************************<br />
rem Compress...<br />
rem ******************************<br />
REM 进入tempJar目录，进行压缩<br />
REM 如果不压缩直接改名<br />
cd tempJar<br />
if "%USE_KZIP%"=="true" (<br />
&nbsp;echo **** compressing with Kzip ****<br />
REM 用7za.exe解压，也可以用jar解压&nbsp;<br />
&nbsp;"%TOOL_DIR%\7za.exe" x %PROJ_FULL_NAME%.jar -ozip &gt; NUL<br />
&nbsp;del %PROJ_FULL_NAME%.jar &gt;NUL<br />
&nbsp;cd zip<br />
REM 使用kzip压缩&amp;打包&nbsp;<br />
&nbsp;"%TOOL_DIR%\kzip.exe" /r ..\..\%ARCHIVE_NAME%.jar *.*&nbsp;&gt; NUL<br />
&nbsp;cd ..<br />
&nbsp;rd /s /q zip &gt; NUL<br />
) else (<br />
&nbsp;copy %PROJ_FULL_NAME%.jar ..\%ARCHIVE_NAME%.jar <br />
)<br />
REM 返回到_make目录<br />
cd ..<br />
REM 既得到我们所需要的Jad和Jar包了，COPY到release目录去<br />
copy %ARCHIVE_NAME%.ja* %RELEASE_DIR%\%ARCHIVE_NAME%.ja*<br />
cd ..<br />
REM 删除_make临时文件夹<br />
rd /q /s _make</p>
<p>:end<br />
cd %PROJ_DIR%<br />
REM 如果出错，还是需要删除_make文件夹<br />
if exist _make rd&nbsp; /Q /S _make</p>
<p>Echo on<br />
=============================================<br />
REM 包已经打成了，那再让我们建一个run来跑来看看效果吧<br />
================================run===================<br />
call env.bat<br />
call config.bat<br />
echo %RELEASE_DIR%\%ARCHIVE_NAME%.jad</p>
<p>%J2ME_WTK%\bin\emulator.exe -Xdevice:DefaultColorPhone -cp %J2ME_API% -Xdescriptor:%RELEASE_DIR%\%ARCHIVE_NAME%.jad</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/cxc014/aggbug/81633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxc014/" target="_blank">生活，在继续……勿要停！</a> 2006-11-16 22:12 <a href="http://www.blogjava.net/cxc014/articles/81633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>