再议JAR文件

Java应用及类压缩为JAR文件方法
博客介绍了将Java应用程序和类压缩为JAR文件的方法。对于应用程序,需编写清单文件,用jar.exe生成JAR文件,还提到避免与WinRAR关联影响运行的解决办法;对于类,将其字节码文件压缩成JAR文件后存于JDK扩展框架,供其他程序使用。
前些天,看了一本清华大学《JAVA使用教程(第二版)》,里面有一些关于介绍JAR文件方面的内容,现摘抄如下,以供大家参考:

1.将应用程序压缩为jar文件

可以使用jar.exe把一些文件压缩成一个JAR文件,来发布我们的应用程序。我们可以把java应用程序中涉及到的类压缩成一个JAR文件,比如Tom.jar,然后使用java解释器(使用参数-jar)执行这个压缩文件,或用鼠标双击该文件,执行这个压缩文件。
java -jar Tom.jar
假设应用程序中有两个类A、B,其中A是主类,生成一个JAR文件的步骤如下:
(1)首先,用文本编辑器(比如Windows下的记事本)编写一个清单文件Mymoon.mf:
Manifest-version: 10
Main-Class: A
Created-By: 1.2.2(sun Microsystems Inc.):
比如,保存Mymoon.mf到D:/test。需要注意的是在编写清单文件时,在“Manifest-version:”和“1.0”之间、“Main-Class:”和主类“A”之间,以及“Created-By:”和“1.2.2”之间必须有且只有一个空格。
(2)生成JAR文件
D:/test/jar cfm Tom.jar Mymoon.mf A.class B.class
其中参数c边式要生成一个新的JAR文件;f表示要生成的JAR文件的名字;m表示文件清单文件的名字
注:如果机器安装过WinRAR解压软件,并将.jar文件与该解压缩软件做了关联,那么Tom.jar文件的类型是WinRAR,使得Java程序无法运行。因此,我们在发布软件时,还应该再写一个有如下内容的bat文件Tom.bat:
javaw -jar Tom.jar

2.将类压缩成jar文件

我们可以使用jar.exe把一些类的字节码文件压缩成一个JAR文件,然后将这个JAR文件存放到JAVA运行环境的扩展框架中,即将 该JAR文件存放在JDK安装目录的jre/lib/ext文件夹中。这样,其他的程序就可以使用这个JAR文件中的类来创建对象了。
现在,我们就将D:/test中的Test1.class和Test2.class压缩成一个JAR文件Jerry.jar:
Test1.java

public class Test1
{ public void fTest1()
{ System.out.println("I am a method In Test1 class");
}
}


Test2.java

public class Test2
{ public void fTest2()
{ System.out.println("I am a method In Test2 class");
}
}

(1)首先编写一个清单文件(Manifestfiles)
moon.mf
Manifest-version: 1.0
Class: Test1 Test2
Created-By: 1.2.2(Sun Microsystems Inc.)
保存moon.mf到D:/test
(2)生成JAR文件
D:/test/jar cfm Jerry.jar moon.mf Test1.class Test2.class
议:No operator matches the given name and argument types. You might need to add explicit type casts. 位置:89 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2725) ~[postgresql-42.7.2.jar:42.7.2] at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2412) ~[postgresql-42.7.2.jar:42.7.2] at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:371) ~[postgresql-42.7.2.jar:42.7.2] at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:502) ~[postgresql-42.7.2.jar:42.7.2] at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:419) ~[postgresql-42.7.2.jar:42.7.2] at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194) ~[postgresql-42.7.2.jar:42.7.2] at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:180) ~[postgresql-42.7.2.jar:42.7.2] at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:95) ~[commons-dbcp2-2.12.0.jar:2.12.0] at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:95) ~[commons-dbcp2-2.12.0.jar:2.12.0] at sun.reflect.GeneratedMethodAccessor94.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_332] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_332] at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) ~[mybatis-3.5.13.jar:3.5.13] at com.sun.proxy.$Proxy737.execute(Unknown Source) ~[?:?] at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:80) ~[mybatis-3.5.13.jar:3.5.13] at sun.reflect.GeneratedMethodAccessor93.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_332] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_332] at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.13.jar:3.5.13] at com.huawei.it.mes.utils.mybatis.plugins.result.MesResultSetHandler.intercept(MesResultSetHandler.java:100) ~[messervice-bigsql-monitor-8.3.3.jar:?] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.13.jar:3.5.13] at com.sun.proxy.$Proxy735.query(Unknown Source) ~[?:?] at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:65) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) ~[mybatis-3.5.13.jar:3.5.13]
最新发布
10-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值