java如何打包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何打包相关的知识,希望对你有一定的参考价值。
写了个程序如何把它打包啊
建议使用ANT打包工具,下载地址:http://apache.justdn.org/ant/binaries/apache-ant-1.6.5-bin.zip此工具用java编写,跨平台,能实现很多功能:编译、打包、运行、文件操作、数据库操作、自定义任务等。
主要使用方法:在工程目录下编写build.xml配置文件,然后运行ant即可:
#ant
或
#java -jar ant.jar
下面给你提供一个例子,是jakarta-oro-2.0.8的包的build.xml
<?xml version="1.0"?>
<project default="jar">
<!-- Allow properties following these statements to be overridden -->
<!-- Note that all of these don't have to exist. They've just been defined
incase they are used. -->
<property file="build.properties"/>
<!--
<property file=".ant.properties"/>
<property file="$user.home/.ant.properties"/>
<property file="default.properties"/>
-->
<!-- prepare target. Creates build directories. -->
<target name="splash">
<splash imageurl="./ant_logo_medium.gif"/>
</target>
<target name="prepare" depends="splash" description="Creates build directories.">
<tstamp>
<format property="DATE" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<mkdir dir="$build.dest"/>
<mkdir dir="$build.dest/META-INF"/>
<copy todir="$build.dest/META-INF">
<fileset dir="$top.dir">
<include name="LICENSE"/>
</fileset>
</copy>
<mkdir dir="$build.tests"/>
<available file="$jakarta-site2.dir/lib" type="dir"
property="AnakiaTask.present"/>
</target>
<target name="prepare-error" depends="prepare"
description="Prints error message for prepare target."
unless="AnakiaTask.present">
<echo>
AnakiaTask is not present! Please check to make sure that
velocity.jar is in your classpath.
</echo>
</target>
<!-- lib target. Compiles the library classes only -->
<target name="lib" depends="prepare"
description="Compiles the library classes only.">
<javac srcdir="$build.src"
destdir="$build.dest"
excludes="examples/**,tools/**"
debug="$debug"
deprecation="$deprecation"
optimize="$optimize"/>
</target>
<!-- examples target. Compiles the example classes. -->
<target name="examples" depends="prepare,lib"
description="Compiles the example classes.">
<javac srcdir="$build.src"
destdir="$build.dest"
includes="examples/**"
debug="$debug"
deprecation="$deprecation"
optimize="$optimize"/>
</target>
<!-- tools target. Compiles the tool classes. -->
<target name="tools" depends="prepare,lib"
description="Compiles the tool classes.">
<javac srcdir="$build.src"
destdir="$build.dest"
includes="tools/**"
debug="$debug"
deprecation="$deprecation"
optimize="$optimize"/>
</target>
<!-- tests target. Compiles and runs the unit tests. -->
<target name="tests" depends="prepare,lib"
description="Compiles and runs the unit tests.">
<javac srcdir="$build.src/tests"
destdir="$build.tests"
debug="$debug"
deprecation="$deprecation"
optimize="$optimize"/>
</target>
<!-- jar target. Compiles the source directory and creates a .jar file -->
<target name="jar" depends="lib" description="Compiles the source directory and creates a .jar file.">
<jar jarfile="$top.dir/$final.name.jar"
basedir="$build.dest"
includes="org/**,META-INF/**"
excludes="**/package.html,**/overview.html">
<manifest>
<section name="org/apache/oro">
<attribute name="Specification-Title"
value="Jakarta ORO" />
<attribute name="Specification-Version"
value="$version" />
<attribute name="Specification-Vendor"
value="Apache Software Foundation" />
<attribute name="Implementation-Title"
value="org.apache.oro" />
<attribute name="Implementation-Version"
value="$version $DATE" />
<attribute name="Implementation-Vendor"
value="Apache Software Foundation" />
</section>
</manifest>
</jar>
</target>
<!-- javadocs target. Creates the API documentation -->
<target name="javadocs" depends="prepare"
description="Creates the API documentation.">
<mkdir dir="$javadoc.destdir"/>
<javadoc packagenames="org.apache.oro.io,org.apache.oro.text,org.apache.oro.text.regex,org.apache.oro.text.awk,org.apache.oro.text.perl,org.apache.oro.util"
sourcepath="$build.src"
destdir="$javadoc.destdir"
overview="$build.src/org/apache/oro/overview.html"
author="true"
version="true"
windowtitle="$name $version API"
doctitle="$name $version API"
header="<a href='http://jakarta.apache.org/oro/' target=_top><img src='@docroot/../images/logoSmall.gif' alt='Jakarta ORO' width=48 height=47 align=center border=0 hspace=1 vspace=1></a>"
bottom="Copyright © $year Apache Software Foundation. All Rights Reserved.">
</javadoc>
<replace file="$javadoc.destdir/overview-frame.html"
token="@docroot" value="."/>
<replace dir="$javadoc.destdir" includes="**/*.html"
token="@version@" value="$version"/>
</target>
<!-- docs target. Creates project web pages and documentation. -->
<target name="docs" depends="prepare-error,lib,examples"
description="Creates the project web pages and documentation."
if="AnakiaTask.present">
<taskdef name="anakia" classname="org.apache.velocity.anakia.AnakiaTask">
<classpath>
<fileset dir="$jakarta-site2.dir/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
<anakia basedir="$docs.src" destdir="$docs.dest/"
extension=".html" style="./site.vsl"
projectFile="stylesheets/project.xml"
excludes="**/stylesheets/** manual/** empty.xml"
includes="**/*.xml"
lastModifiedCheck="true"
templatePath="$jakarta-site2.dir/xdocs/stylesheets">
</anakia>
<copy todir="$docs.dest/images" filtering="no">
<fileset dir="$docs.src/images">
<include name="**/*.gif"/>
<include name="**/*.jpeg"/>
<include name="**/*.jpg"/>
</fileset>
</copy>
<mkdir dir="$docs.dest/classes"/>
<mkdir dir="$docs.dest/classes/examples"/>
<copy todir="$docs.dest/classes/examples" filtering="no">
<fileset dir="$build.dest/examples">
<include name="MatcherDemoApplet.class"/>
</fileset>
</copy>
<mkdir dir="$docs.dest/classes/org"/>
<copy todir="$docs.dest/classes/org" filtering="no">
<fileset dir="$build.dest/org">
<include name="**/*.class"/>
</fileset>
</copy>
</target>
<!-- package target -->
<target name="package" depends="jar,javadocs,docs"
description="Creates a distribution directory tree.">
<mkdir dir="$final.dir"/>
<copy todir="$final.dir/src">
<fileset dir="$code.src"/>
</copy>
<!-- BEGIN_REMOVE_THIS -->
<!-- Remove this when there's a first draft of the manual. -->
<copy todir="$final.dir/docs">
<fileset dir="$docs.dest">
<exclude name="manual/**"/>
</fileset>
</copy>
<!-- END_REMOVE_THIS -->
<copy file="$top.dir/build.xml" tofile="$final.dir/build.xml"/>
<copy file="$top.dir/build.properties"
tofile="$final.dir/build.properties"/>
<copy file="$top.dir/LICENSE" tofile="$final.dir/LICENSE"/>
<copy file="$top.dir/ISSUES" tofile="$final.dir/ISSUES"/>
<copy file="$top.dir/CHANGES" tofile="$final.dir/CHANGES"/>
<copy file="$top.dir/COMPILE" tofile="$final.dir/COMPILE"/>
<copy file="$top.dir/CONTRIBUTORS"
tofile="$final.dir/CONTRIBUTORS"/>
<copy file="$top.dir/README" tofile="$final.dir/README"/>
<copy file="$top.dir/STYLE" tofile="$final.dir/STYLE"/>
<copy file="$top.dir/TODO" tofile="$final.dir/TODO"/>
<copy file="$top.dir/$final.name.jar" tofile="$final.dir/$final.name.jar"/>
</target>
<!-- package-zip target. Packages the distribution with ZIP -->
<target name="package-zip" depends="package"
description="Packages the distribution as a zip file.">
<zip zipfile="$top.dir/$final.name.zip" basedir="$top.dir/"
includes="**/$final.name/**" excludes="**/.cvsignore"/>
</target>
<!-- Packages the distribution with TAR-GZIP -->
<target name="package-tgz" depends="package"
description="Packages the distribution as a gzipped tar file.">
<tar tarfile="$top.dir/$final.name.tar"
basedir="$top.dir" excludes="**/**">
<tarfileset dir="$final.dir/..">
<include name="$final.name/**"/>
<exclude name="**/.cvsignore"/>
</tarfileset>
</tar>
<gzip zipfile="$top.dir/$project-$version.tar.gz" src="$top.dir/$project-$version.tar"/>
</target>
<!-- Packages the distribution with ZIP and TAG-GZIP -->
<target name="package-all" depends="package-zip, package-tgz">
</target>
<!-- Makes an attempt to clean up a little. -->
<target name="clean"
description="Removes generated artifacts from source tree.">
<delete dir="$build.dest"/>
<delete dir="$javadoc.destdir"/>
<delete dir="$final.dir"/>
<delete file="$top.dir/$final.name.jar"/>
<delete file="$top.dir/$final.name.tar"/>
<delete file="$top.dir/$final.name.tar.gz"/>
<delete file="$top.dir/$final.name.zip"/>
<delete>
<fileset dir="$top.dir" includes="velocity.log*"/>
</delete>
</target>
</project>
build.xml文件的编写可参见ant发行版中的使用文档
你也可以自己编写脚本打包,使用jdk发行版中的jar命令,例如:
#jar cmf myManifestFile myFile.jar *.class
注意还需要自己编写MANIFEST.MF文件配置包属性。具体可以参见javadoc
当然还可以使用集成开发环境提供的打包工具,如JBuilder提供打包工具,但这样程序的移植性不强,建议不要使用,就使用ant比较好。 参考技术A 直接用jar.exe不就行了吗,很省事的,都有说明
Java如何将dll文件打包到jar中?
我使用jni写了一个dll,将dll文件放在jar文件根目录,jar中的程序可以正常访问dll,而我把dll打包到jar中,jar却无法找到这个dll文件了。之前我看过有的程序是可以把dll打包到jar中,并能够正常调用的。请问如何才能让程序正常调用jar中的文件?
希望大家说得清楚一些,把相关的代码段发上来。谢谢
//getResourceAsStream以JAR中根路径为开始点
private synchronized static void loadLib(String libName) throws IOException
String systemType = System.getProperty("os.name");
String libExtension = (systemType.toLowerCase().indexOf("win")!=-1) ? ".dll" : ".so";
String libFullName = libName + libExtension;
String nativeTempDir = System.getProperty("java.io.tmpdir");
InputStream in = null;
BufferedInputStream reader = null;
FileOutputStream writer = null;
File extractedLibFile = new File(nativeTempDir+File.separator+libFullName);
if(!extractedLibFile.exists())
try
in = SMAgent.class.getResourceAsStream(BIN_LIB + libFullName);
if(in==null)
in = SMAgent.class.getResourceAsStream(libFullName);
SMAgent.class.getResource(libFullName);
reader = new BufferedInputStream(in);
writer = new FileOutputStream(extractedLibFile);
byte[] buffer = new byte[1024];
while (reader.read(buffer) > 0)
writer.write(buffer);
buffer = new byte[1024];
catch (IOException e)
e.printStackTrace();
finally
if(in!=null)
in.close();
if(writer!=null)
writer.close();
System.load(extractedLibFile.toString());
参考技术A 这个问题是由于 类加载器 造成的
ClassLoader
你对ClassLoader了解么?
你对 boot ClassLoader了解么?
如过不清楚的话,请查看一下 Java类加载机制.本回答被提问者采纳 参考技术B 建议看看CSDN上的这个帖子http://topic.csdn.net/t/20041015/09/3458094.html
以上是关于java如何打包的主要内容,如果未能解决你的问题,请参考以下文章