﻿<?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-走好脚下的路,让别人去说吧!-随笔分类-Java专题-部署打包</title><link>http://www.blogjava.net/human2008/category/28800.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 08 Jan 2008 11:42:32 GMT</lastBuildDate><pubDate>Tue, 08 Jan 2008 11:42:32 GMT</pubDate><ttl>60</ttl><item><title>Eclicpse3.1.1下配置SWT，打包发布SWT程序，转EXE一条龙过程记录 </title><link>http://www.blogjava.net/human2008/archive/2008/01/08/173746.html</link><dc:creator>灵!</dc:creator><author>灵!</author><pubDate>Tue, 08 Jan 2008 11:12:00 GMT</pubDate><guid>http://www.blogjava.net/human2008/archive/2008/01/08/173746.html</guid><wfw:comment>http://www.blogjava.net/human2008/comments/173746.html</wfw:comment><comments>http://www.blogjava.net/human2008/archive/2008/01/08/173746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/human2008/comments/commentRss/173746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/human2008/services/trackbacks/173746.html</trackback:ping><description><![CDATA[<p>1.<span style="font-family: 宋体">到</span>www.eclipse.org<span style="font-family: 宋体">上下载</span>SWT.</p>
<p><span style="font-family: 宋体">我这里用的是</span>1.1.0.1<span style="font-family: 宋体">，并且页面上就有推荐的</span>Eclipse3.1.1<span style="font-family: 宋体">，</span>EMF,GEF<span style="font-family: 宋体">。都下载了！</span></p>
<p>2.<span style="font-family: 宋体">按照</span>Eclipse<span style="font-family: 宋体">安装插件的方法，安装</span>SWT,EMF,GEF<span style="font-family: 宋体">。</span></p>
<p>3.<span style="font-family: 宋体">如果不出意外，就可以正常使用了！</span></p>
<p><span style="font-family: 宋体">这里有一个建议：最好使用纯的</span>Eclipse<span style="font-family: 宋体">，我开始用</span>WTP<span style="font-family: 宋体">版的，怎么配置也不行。</span></p>
<p><span style="font-family: 宋体">可以建立</span>Visual Class<span style="font-family: 宋体">，但是不能可视化添加控件，或者看不到控件的属性，或者</span>Text,TextArea<span style="font-family: 宋体">控件无法添加。后来按照以上方法，重新来了一次，</span>OK<span style="font-family: 宋体">了</span>!</p>
<p><span style="font-family: 宋体">二打包发布</span>SWT<span style="font-family: 宋体">程序</span></p>
<p>1.<span style="font-family: 宋体">因为需要</span>SWT<span style="font-family: 宋体">的</span>jar.<span style="font-family: 宋体">但是</span>Eclipse3.1.1<span style="font-family: 宋体">配合的的</span>SWT<span style="font-family: 宋体">不是通过</span>SWT.jar<span style="font-family: 宋体">发布的！是</span>org.eclipse.swt.win32.win32.x86_3.1.0.jar<span style="font-family: 宋体">。里面包括了</span>JINI<span style="font-family: 宋体">的</span>DLL<span style="font-family: 宋体">和</span>SWT<span style="font-family: 宋体">类文件。</span></p>
<p><span style="font-family: 宋体">需要下载</span></p>
<p>http://www.eclipse.org/downloads/download.php?file=/eclipse/dow ... 09290840/swt-3.1.1-win32-win32-x86.zip</p>
<p><span style="font-family: 宋体">这里有</span>SWT.jar<span style="font-family: 宋体">，和</span>3<span style="font-family: 宋体">个</span>DLL,<span style="font-family: 宋体">把他们解压缩出来，备用！</span></p>
<p>2.<span style="font-family: 宋体">通过</span>Eclipse<span style="font-family: 宋体">的导出功能，生成一个可执行的</span>jar<span style="font-family: 宋体">，</span>MANIFEST.MF<span style="font-family: 宋体">文件选择由</span>Eclipse<span style="font-family: 宋体">生成，并且保存到项目中。</span></p>
<p>3.<span style="font-family: 宋体">上面</span>2<span style="font-family: 宋体">的步骤，只是为了得到</span>MANIFEST.MF<span style="font-family: 宋体">文件。下面修改一下这个文件。</span></p>
<p><span style="font-family: 宋体">加上</span> Class-Path: SWT.jar</p>
<p><span style="font-family: 宋体">如果还有其他的</span>jar,<span style="font-family: 宋体">用空格分开，加到后面</span></p>
<p>4.<span style="font-family: 宋体">再生成一次</span>jar,MANIFEST.MF<span style="font-family: 宋体">选择修改后的。</span></p>
<p>5.<span style="font-family: 宋体">将打包的</span>jar,SWT.jar,3<span style="font-family: 宋体">个</span>DLL<span style="font-family: 宋体">放到一个文件夹下，双击可执行的</span>jar<span style="font-family: 宋体">，程序运行！</span></p>
<p><span style="font-family: 宋体">三</span>jar<span style="font-family: 宋体">转</span>EXE</p>
<p>1.<span style="font-family: 宋体">打开</span>JSmooth0.9.9-7<span style="font-family: 宋体">。</span><a href="http://www610.fixdown.com/jsmooth-0.9.9-7-setup.exe">http://www610.fixdown.com/jsmooth-0.9.9-7-setup.exe</a></p>
<p>2.<span style="font-family: 宋体">选择</span>skeleton,<span style="font-family: 宋体">在</span>skeleton properties<span style="font-family: 宋体">中先把</span>Launch java app in the exe process,Debug console<span style="font-family: 宋体">选中。可以查看生成</span>EXE<span style="font-family: 宋体">文件执行过程信息。</span></p>
<p>3.<span style="font-family: 宋体">选择</span>Executable.</p>
<p><span style="font-family: 宋体">选择生成的</span>EXE<span style="font-family: 宋体">文件存放位置。</span></p>
<p><span style="font-family: 宋体">选择</span>EXE<span style="font-family: 宋体">文件图标</span></p>
<p><span style="font-family: 宋体">设置当前路径，选择要转换的</span>jar<span style="font-family: 宋体">文件所在文件夹</span></p>
<p>4.<span style="font-family: 宋体">选择</span>Application</p>
<p><span style="font-family: 宋体">设置</span>Main Class,<span style="font-family: 宋体">可执行</span>jar<span style="font-family: 宋体">中的</span>Main Class<span style="font-family: 宋体">注意写类全名</span></p>
<p><span style="font-family: 宋体">设置</span>Application Argument,<span style="font-family: 宋体">如果需要传入参数，写到这里</span></p>
<p><span style="font-family: 宋体">设置</span>Embedded jar: <span style="font-family: 宋体">可执行的</span>jar</p>
<p><span style="font-family: 宋体">设置</span>Classpath<span style="font-family: 宋体">：</span>SWT.jar <span style="font-family: 宋体">如果有其他的继续添加</span></p>
<p>5.<span style="font-family: 宋体">选择</span>JVM Selection<span style="font-family: 宋体">。默认吧。</span></p>
<p>6.JVM Configuration:</p>
<p><span style="font-family: 宋体">可以设置</span>java properties,<span style="font-family: 宋体">内存使用</span></p>
<p>7.<span style="font-family: 宋体">点齿轮。生成！看是否有错误。</span></p>
<p>8.EXE<span style="font-family: 宋体">执行需要的文件：</span>EXE,3<span style="font-family: 宋体">个</span>DLL<span style="font-family: 宋体">，</span>SWT.jar</p>
<p><span style="font-family: 宋体">把他们考到其他目录，一样可以执行！</span></p>
<p>9.<span style="font-family: 宋体">去掉</span>skeleton properties<span style="font-family: 宋体">中的</span>Launch java app in the exe process,Debug console<span style="font-family: 宋体">选项。</span></p>
<p><span style="font-family: 宋体">重新生成。应该</span>OK<span style="font-family: 宋体">了！</span></p>
<p>-----</p>
<p><span style="font-family: 宋体">看了这个，终于完成了</span>SWT<span style="font-family: 宋体">程序打包，太爽了</span></p>
<img src ="http://www.blogjava.net/human2008/aggbug/173746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/human2008/" target="_blank">灵!</a> 2008-01-08 19:12 <a href="http://www.blogjava.net/human2008/archive/2008/01/08/173746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant在eclipse中的build.xml的配置</title><link>http://www.blogjava.net/human2008/archive/2008/01/08/173733.html</link><dc:creator>灵!</dc:creator><author>灵!</author><pubDate>Tue, 08 Jan 2008 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/human2008/archive/2008/01/08/173733.html</guid><wfw:comment>http://www.blogjava.net/human2008/comments/173733.html</wfw:comment><comments>http://www.blogjava.net/human2008/archive/2008/01/08/173733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/human2008/comments/commentRss/173733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/human2008/services/trackbacks/173733.html</trackback:ping><description><![CDATA[<div class="cnt">Ant在eclipse中的build.xml的配置<br />
&lt;?xml version="1.0" ?&gt; <br />
- &lt;project name="webmodulebuilder" default="deploy" basedir="."&gt;<br />
- &lt;!-- <br />
set global properties for this build <br />
--&gt; <br />
- &lt;!-- <br />
发布WEB路径 <br />
--&gt; <br />
&lt;property name="DEPLOY_PATH" value="C:\Tomcat 5.5\webapps\jieshengda" /&gt; <br />
- &lt;!-- <br />
源WEB路径 <br />
--&gt; <br />
&lt;property name="WEB_PATH" value="D:\EclipseWork\jiedasheng\WebRoot" /&gt; <br />
- &lt;!-- <br />
源编译的jar包路径 <br />
--&gt; <br />
&lt;property name="JAR_PATH" value="D:\EclipseWork\jiedasheng\WebRoot\WEB-INF\lib" /&gt; <br />
- &lt;!-- <br />
源java文件路径 <br />
--&gt; <br />
&lt;property name="SCR_PATH" value="D:\EclipseWork\jiedasheng\src" /&gt; <br />
- &lt;!-- <br />
源class文件路径 <br />
--&gt; <br />
&lt;property name="CLASS_PATH" value="D:\EclipseWork\jiedasheng\WebRoot\WEB-INF\classes" /&gt; <br />
- &lt;!-- <br />
定义classpath <br />
--&gt; <br />
- &lt;path id="LIB_CLASS_PATH"&gt;<br />
&lt;fileset file="${JAR_PATH}/*.jar" /&gt; <br />
&lt;pathelement path="${CLASS_PATH}" /&gt; <br />
&lt;/path&gt;<br />
- &lt;!-- <br />
初试化 <br />
--&gt; <br />
- &lt;target name="init"&gt;<br />
&lt;mkdir dir="${DEPLOY_PATH}" /&gt; <br />
&lt;mkdir dir="${DEPLOY_PATH}/WEB-INF" /&gt; <br />
&lt;mkdir dir="${DEPLOY_PATH}/WEB-INF/classes" /&gt; <br />
&lt;mkdir dir="${DEPLOY_PATH}/WEB-INF/lib" /&gt; <br />
&lt;/target&gt;<br />
- &lt;!-- <br />
编译类 <br />
--&gt; <br />
- &lt;target name="compile" depends="init" description="compile the source files"&gt;<br />
&lt;mkdir dir="${CLASS_PATH}" /&gt; <br />
- &lt;javac srcdir="${SCR_PATH}" destdir="${CLASS_PATH}"&gt;<br />
&lt;classpath refid="LIB_CLASS_PATH" /&gt; <br />
&lt;/javac&gt;<br />
&lt;/target&gt;<br />
- &lt;!-- <br />
Copy发布<br />
--&gt; <br />
- &lt;target name="deploy" depends="init,compile"&gt;<br />
- &lt;copy todir="${DEPLOY_PATH}"&gt;<br />
- &lt;fileset dir="${WEB_PATH}"&gt;<br />
&lt;include name="**/*.*" /&gt; <br />
&lt;exclude name="**/jsp_servlet/*.class" /&gt; <br />
&lt;exclude name="**/build.xml" /&gt; <br />
&lt;exclude name="**/deploy.xml" /&gt; <br />
&lt;exclude name="**/build.properties" /&gt; <br />
&lt;exclude name="**/servers.xml" /&gt; <br />
&lt;exclude name="**/targets.xml" /&gt; <br />
&lt;exclude name="**/*.war" /&gt; <br />
&lt;/fileset&gt;<br />
&lt;/copy&gt;<br />
&lt;/target&gt;<br />
&lt;/project&gt; <br />
</div>
<br />
<img src ="http://www.blogjava.net/human2008/aggbug/173733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/human2008/" target="_blank">灵!</a> 2008-01-08 18:46 <a href="http://www.blogjava.net/human2008/archive/2008/01/08/173733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA ant build.xml</title><link>http://www.blogjava.net/human2008/archive/2008/01/08/173731.html</link><dc:creator>灵!</dc:creator><author>灵!</author><pubDate>Tue, 08 Jan 2008 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/human2008/archive/2008/01/08/173731.html</guid><wfw:comment>http://www.blogjava.net/human2008/comments/173731.html</wfw:comment><comments>http://www.blogjava.net/human2008/archive/2008/01/08/173731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/human2008/comments/commentRss/173731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/human2008/services/trackbacks/173731.html</trackback:ping><description><![CDATA[<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">内容摘要： <br />
            ANT是一个基于Java的自动化脚本引擎，脚本格式为XML。除了做Java编译相关任务外，ANT还可以通过插件实现很多应用的调用。 <br />
            1)ANT的基本概念： <br />
            2)ANT的安装：解包，设置路径 <br />
            3)ANT的使用：最好的学习只不过是一个简单实用的例子起步&#8230;&#8230; <br />
            <br />
            ANT的基本概念：Java的Makefile <br />
            <br />
            当一个代码项目大了以后，每次重新编译，打包，测试等都会变得非常复杂而且重复，因此c语言中有make脚本来帮助这些工作的批量完成。在Java中应用是平台无关性的，当然不会用平台相关的make脚本来完成这些批处理任务了，ANT本身就是这样一个流程脚本引擎，用于自动化调用程序完成项目的编译，打包，测试等。除了基于JAVA是平台无关的外，脚本的格式是基于XML的，比make脚本来说还要好维护一些。 <br />
            <br />
            每个ant脚本（缺省叫build.xml）中设置了一系列任务(target)：比如对于一个一般的项目可能需要有以下任务。 <br />
            <br />
            任务1：usage 打印本脚本的帮助信息（缺省） <br />
            任务2：clean &lt;-- init 清空初始化环境 <br />
            任务3：javadoc &lt;-- build &lt;-- init 生成JAVADOC <br />
            任务4：jar &lt;-- build &lt;-- init 生成JAR <br />
            任务5：all &lt;-- jar + javadoc &lt;-- build &lt;-- init 完成以上所有任务：jar javadoc <br />
            <br />
            而多个任务之间往往又包含了一定了依赖关系：比如把整个应用打包任务(jar)的这个依赖于编译任务(build)，而编译任务又依赖于整个环境初始化任务(init)等。 <br />
            <br />
            注：我看到很多项目的ant脚本中的命名基本上都是一致的，比如：编译一般叫build或者compile；打包一般叫jar或war；生成文档一般命名为javadoc或javadocs；执行全部任务all。在每个任务的中，ANT会根据配置调用一些外部应用并配以相应参数执行。虽然ANT可调用的外部应用种类非常丰富，但其实最常用的就2，3个：比如javac javadoc jar等。 <br />
            <br />
            ANT的安装 <br />
            <br />
            解包后在系统可执行路径中加入指向ant的bin的路径就可以了，比如可以在GNU/Linux上把以下配置加入/etc/profile中： <br />
            export ANT_HOME=/home/ant <br />
            export JAVA_HOME=/usr/java/j2sdk1.4.1 <br />
            export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin <br />
            <br />
            这样执行ant 后，如果不指定配置文件ant会缺省找build.xml这个配置文件，并根据配置文件执行任务，缺省的任务设置可以指向最常用的任务，比如：build，或指向打印帮助信息：usage，告诉用户有那些脚本选项可以使用。 <br />
            <br />
            ANT的使用 <br />
            <br />
            最好的学习过程就是看懂那些open source项目中的build.xml脚本，然后根据自己的需要简化成一个更简单的，ANT和APACHE上很多非常工程派的项目：简单易用，而且适应性非常强，因为这些项目的建立往往来源于开发人员日常最直接的需求。<br />
            参考资料：<a href="http://www.javafan.net/article/20041207142012728.html" target="_blank">http://www.javafan.net/article/20041207142012728.html</a></div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/human2008/aggbug/173731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/human2008/" target="_blank">灵!</a> 2008-01-08 18:44 <a href="http://www.blogjava.net/human2008/archive/2008/01/08/173731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单的Ant的build.xml示例（附：jar包的正确运行方法）</title><link>http://www.blogjava.net/human2008/archive/2008/01/08/173729.html</link><dc:creator>灵!</dc:creator><author>灵!</author><pubDate>Tue, 08 Jan 2008 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/human2008/archive/2008/01/08/173729.html</guid><wfw:comment>http://www.blogjava.net/human2008/comments/173729.html</wfw:comment><comments>http://www.blogjava.net/human2008/archive/2008/01/08/173729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/human2008/comments/commentRss/173729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/human2008/services/trackbacks/173729.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 以前在写作业时曾经尝试用过Ant去编译和运行Java程序，不过后来好久没用，都不怎么会用了。下边是前几天写的一个build.xml文件的例子，以后可以拿来当参照了，不过有点小问题还不知道怎么改！以前忘了Jar包的正确运行方式，导致不能正确运行打包以后的jar包，现已更正！
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">说明：lib目录存放第三方类库，src目录存放待编译的Java源文件！</font></p>
<p>&lt;?xml version="1.0" encoding="GB2312" ?&gt;</p>
<p>&lt;!DOCTYPE project&gt;</p>
<p>&lt;project name="JavaMailClient" default="usage" basedir="."&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="project-name" value="JavaMailClient"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="build" value="build"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="lib" value="lib"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="src" value="src"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="build.classes"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="${build}/classes" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property file="build.properties"/&gt;<br />
&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jar.dir"&nbsp;&nbsp;&nbsp;&nbsp; value="jar"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jar-file-name"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="${project-name}" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path id="Third-Part&nbsp;Lib"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${lib}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/*.jar" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/path&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="usage" description="Build file usage info (default task)"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" " /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="${project-name} " /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="-------------------------------------------------------" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="Available Targets:" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" ***" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" Compiling:" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="&nbsp; compile&nbsp; - Compiles the source code" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" ***" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" Cleaning up:" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="&nbsp; clean - Delete class files" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" ***" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" JAR:" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;echo message="&nbsp; jar&nbsp; - Generate an .jar for source code" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" ***" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" Executing:" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="&nbsp; run&nbsp; - Execute the&nbsp; JavaMail client ! Get email of the latest two days&nbsp; from server" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message=" ***" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="-------------------------------------------------------" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="prepare" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${build.classes}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${jar.dir}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="clean" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;delete dir="${build}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;delete dir="${jar.dir}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="compile" depends="clean,prepare"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="Compiling the source code!"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;javac<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srcdir="${src}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destdir="${build.classes}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deprecation="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; failonerror="true" debug="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="Third-Part Lib"/&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/javac&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- &lt;target name="run" description="Receive email! "&nbsp; depends="compile"&gt; --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 已经可以正确运行！注意：classpath="${build.classes}" 一定要加上，否则会报"java.lang.NoClassDefFoundError"的错误！--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="run" description="Receive email! "&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;java classname="POP3MailReceiver" classpath="${build.classes}" fork="true" maxmemory="256m"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="Third-Part&nbsp;Lib"/&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/java&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="run"&nbsp; description="Receive email! "&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;java jar="${jar.dir}/${jar-file-name}.jar" fork="true" maxmemory="256m"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="jar" depends="compile"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jar destfile="${jar.dir}/${jar-file-name}.jar" basedir="${build.classes}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;manifest&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 此处需要根据需要进行修改 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute name="Main-Class" value="POP3MailReceiver"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute name="Class-Path" value="../${lib}/commons-email-1.0.jar ../${lib}/mail.jar ../${lib}/activation.jar"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/manifest&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/jar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br />
&lt;/project&gt;<br />
<br />
<font color="#ff0000"><br />
附：Jar包的正确运行方法（转）</font></p>
<p align="center"><font color="#ff0000"></font><font color="#0000ff">-jar参数运行应用时classpath的设置方法&nbsp;</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你是否在使用java -jar参数运行打包好的jar应用程序的时候发现应用程序无法找到classpath下设置好的第三方类库的内容？无论怎么设置classpath参数都无济于事，总是会报ClassNotFound的错误？那么本篇帖子可以帮助你摆脱烦恼 :)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候，你会发现如何设置-classpath参数应用程序都找不到相应的第三方类，报ClassNotFound错误。实际上这是由于<font color="#ff0000">当使用-jar参数运行的时候，java VM会屏蔽所有的外部classpath,而只以本身yourJarExe.jar的内部class作为类的寻找范围。</font></p>
<p><font face="黑体" color="#800000" size="3">解决方案</font></p>
<p><font color="#ff0000">一 BootStrap class扩展方案</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java 命令行提供了如何扩展bootStrap 级别class的简单方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xbootclasspath:&nbsp;&nbsp;&nbsp;&nbsp; 完全取代基本核心的Java class 搜索路径.<br />
&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;&nbsp; 不常用,否则要重新写所有Java 核心class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xbootclasspath/a: 后缀在核心class搜索路径后面.常用!!<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xbootclasspath/p: 前缀在核心class搜索路径前面.不常用,避免<br />
&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;&nbsp; 引起不必要的冲突.<br />
语法如下:<br />
&nbsp;(分隔符与classpath参数类似，unix使用:号,windows使用;号，这里以unix为例)<br />
&nbsp;java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar</p>
<p><font color="#ff0000">二 extend class 扩展方案</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java exten class 存放在{Java_home}\jre\lib\ext目录下.当调用Java时,对扩展class路径的搜索是自动的.总会搜索的.这样,解决的方案就很简单了,将所有要使用的第三方的jar包都复制到ext 目录下.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff">（自评：不推荐使用，自适应性很差！）</font></p>
<p><font color="#ff0000">三 User class扩展方案<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>当使用-jar执行可执行Jar包时,JVM将Jar包所在目录设置为codebase目录,所有的class搜索都在这个目录下开始.所以如果使用了其他第三方的jar包,一个比较可以接受的可配置方案,就是利用jar包的Manifest扩展机制.<br />
步骤如下:<br />
1.将需要的第三方的jar包,复制在同可执行jar所在的目录或某个子目录下. 比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包复制到/usrhome目录下或/usrhome/lib 等类似的子目录下.<br />
2.修改Manifest 文件<br />
&nbsp;在Manifest.mf文件里加入如下行<br />
&nbsp;Class-Path:classes12.jar lib/thirdlib.jar<br />
&nbsp;Class-Path 是可执行jar包运行依赖的关键词.详细内容可以参考：<a href="http://java.sun.com/docs/books/tutorial/ext/index.html">http://java.sun.com/docs/books/tutorial/ext/index.html</a></p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上三种方法推荐第一种，扩展性好，操作起来也最方便.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外编写自己的ClassLoader,来动态载入class,是更加复杂和高级技术.限于篇幅,不赘述.有兴趣了解可以去google一下custom classloader</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java的安全机制随不同的JDK版本有不同的变化,会影响很多核心CLASS,比如Thread,所以很多大型商业软件,要求JDK的版本很严格.部分原因也在此.<font color="#ff0000">这也要求在发布自己编写的应用时候,不管大小,都要说明开发和测试的JDK版本.</font></p>
<p><br />
本文所述方法测试基于j2sdk 1.4.2_04-b05 </p>
<p>----------------------------------------------------------------------------------------------</p>
<p>附:背景知识</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自JDK 1.2以后,JVM采用了委托(delegate)模式来载入class．采用这种设计的原因可以参考<a href="http://java.sun.com/docs/books/tutorial/ext/basics/load.html">http://java.sun.com/docs/books/tutorial/ext/basics/load.html</a> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 归纳来讲:是基于JVM sandbox(沙盒)安装模型上提供应用层的可定制的安全机制.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java虚拟机(JVM)寻找Class的顺序</p>
<p>1. Bootstrap classes</p>
<p>属于Java 平台核心的class,比如java.lang.String等.及rt.jar等重要的核心级别的class.这是由JVM Bootstrap class loader来载入的.一般是放置在{java_home}\jre\lib目录下</p>
<p>2. Extension classes</p>
<p>基于Java扩展机制,用来扩展Java核心功能模块.比如Java串口通讯模块comm.jar.一般放置在{Java_home}\jre\lib\ext目录下</p>
<p>3. User classes</p>
<p>开发人员或其他第三方开发的Java程序包.通过命令行的-classpath或-cp,或者通过设置CLASSPATH环境变量来引用.JVM通过放置在{java_home}\lib\tools.jar来寻找和调用用户级的class.常用的javac也是通过调用tools.jar来寻找用户指定的路径来编译Java源程序.这样就引出了User class路径搜索的顺序或优先级别的问题.</p>
<p>&nbsp;3.1 缺省值:调用Java或javawa的当前路径(.),是开发的class所存在的当前目录<br />
&nbsp;3.2 CLASSPATH环境变量设置的路径.如果设置了CLASSPATH,则CLASSPATH的值会覆盖缺省值<br />
&nbsp;3.3 执行Java的命令行-classpath或-cp的值,如果制定了这两个命令行参数之一,它的值会覆盖环境变量CLASSPATH的值<br />
&nbsp;3.4 -jar 选项:如果通过java -jar 来运行一个可执行的jar包,这当前jar包会覆盖上面所有的值.换句话说,-jar 后面所跟的jar包的优先级别最高,如果指定了-jar选项,所有环境变量和命令行制定的搜索路径都将被忽略.JVM APPClassloader将只会以jar包为搜索范围.<br />
有关可执行jar有许多相关的安全方面的描述,可以参考<a href="http://java.sun.com/docs/books/tutorial/jar/">http://java.sun.com/docs/books/tutorial/jar/</a> 来全面了解.</p>
<p>这也是为什么应用程序打包成可执行的jar包后,不管你怎么设置classpath都不能引用到第三方jar包的东西了.<br />
&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/human2008/aggbug/173729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/human2008/" target="_blank">灵!</a> 2008-01-08 18:43 <a href="http://www.blogjava.net/human2008/archive/2008/01/08/173729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>