读书人

ant 封装 jar 可执行

发布时间: 2013-02-18 10:50:49 作者: rapoo

ant 打包 jar 可执行

?

打包成的jar可以执行需要注意的是?

?

1、依赖外部jar包的情况下,怎么可以让我们自己写的程序找到依赖的外部jar包

?

2、src目录下面的一些配置文件或者资源文件我们也需要拷贝到我们的jar包中

?

3、MANIFEST.MF文件中Class-Path 选项可以根据我们添加jar后自动修改,而不用我们手动在后面写一大段的

繁琐代码

?

<!-- convert build.classpath to mf.classpath (the string needed for the manifest task) -->  <pathconvert property="mf.classpath" pathsep=" ">      <path refid="build.classpath" />      <flattenmapper />  </pathconvert>  <!-- now build the manifest file, using mf.classpath -->  <tstamp/><!-- needed for TODAY -->  <manifest file="MANIFEST.MF">    <attribute name="Built-By" value="${manifest.built.by}"/>    <attribute name="Created-By" value="${manifest.created.by}"/>    <attribute name="Main-Class" value="${manifest.main.class}"/>    <attribute name="Implementation-Version" value="${version.number}-b${build.number}"/>       <attribute name="Built-Date" value="${TODAY}"/>    <attribute name="Class-Path" value="${mf.classpath}" />  </manifest>

?

?

写好?MANIFEST.MF后就需要在打包的时候包含在我们的jar文件中,同时要注意依赖jar包的位置,一般我们都是放在lib目录下面。

 <!-- create the jar file, including the manifest file we just created -->  <jar basedir="${dest.dir.classes}"        destfile="${package.file}"       includes="**/*.*"       excludes="**/*Test*"       manifest="MANIFEST.MF" />  <!-- copy all the jar files out to the destination directory (dest.dir) -->  <copy todir="${dest.dir}">    <fileset dir="${lib.dir}">      <exclude name="junit*" />      <include name="*.jar"/>      <include name="*.zip"/>    </fileset>  </copy>

?

当打包完成后,我们就可以到deploy目录下面双击我们的jar包来运行了。可以看到界面(前提是你有提供界面)

打包后的目录结构:

?


ant  封装 jar 可执行
?

我的界面如下


ant  封装 jar 可执行
?

?

bulid.xml文件的内容

<?xml version="1.0" encoding="UTF-8"?><project name="test" default="jar">  <!-- Name of the output .jar file -->  <property name="jar.name" value="jar_name.jar" />  <!-- Base directory for distribution target -->  <property name="deploy.home" value="deploy" />  <!-- Base directory for compilation targets -->  <property name="build.home" value="." />  <!-- Main class -->  <property name="main.class" value="com.chen.test.JTabbedPane2" />   <!-- The base directory for all libraries (jar) files -->  <property name="lib.home" value="lib" /><pathconvert property="mf.classpath" pathsep=" ">          <mapper>            <chainedmapper>              <!-- remove absolute path -->              <flattenmapper />                  <!-- add lib/ prefix -->              <globmapper from="*" to="lib/*" />            </chainedmapper>          </mapper>          <path>            <!-- lib.home contains all jar files,                                             in several subdirectories -->            <fileset dir="${lib.home}">              <include name="**/*.jar" />            </fileset>          </path>      </pathconvert> <path id="classpath"> <fileset file="${lib.dir}" includes="**/*.jar" /></path>    <target name="compile">    <mkdir dir="${deploy.home}/classes"/>        <copydir dest="${deploy.home}/classes" src="resources"></copydir>      <copy todir="${deploy.home}/classes">      <fileset dir="src">      <exclude name="**/*.java"/>      <include name="**/*.*"/>      </fileset>      </copy>    <javac destdir="${deploy.home}/classes" classpathref="classpath" encoding="UTF-8">    <src path="src"/>    <src path="resources"/>    </javac>    </target><!-- Next, my package task uses that classpath --><target name="jar" depends="compile">    <!-- now build the manifest file, using mf.classpath -->  <tstamp/><!-- needed for TODAY -->  <manifest file="MANIFEST.MF">    <attribute name="Main-Class" value="${main.class}"/>    <attribute name="Built-Date" value="${TODAY}"/>    <attribute name="Class-Path" value="${mf.classpath}" />  </manifest>    <!-- create the jar file, including the manifest file we just created --><mkdir dir="${deploy.home}/lib"/>  <jar basedir="${deploy.home}/classes"        destfile="${deploy.home}/${jar.name}"       includes="**/*.*"       manifest="MANIFEST.MF" />  <!-- copy all the jar files out to the destination directory (dest.dir) -->  <copy todir="${deploy.home}/lib">    <fileset dir="${lib.home}">      <exclude name="junit*" />      <include name="*.jar"/>      <include name="*.zip"/>    </fileset>    </copy>  <delete dir="${deploy.home}/classes" /></target></project>

?

?

?

?

读书人网 >开源软件

热点推荐