精华内容
下载资源
问答
  • 最简单替换jar包class文件

    千次阅读 2019-06-19 19:35:58
    jar包右击,打开方式 360压缩 找到需要替换的地址,直接拖进去替换即可,方便快捷

    jar包右击,打开方式 360压缩
    找到需要替换的地址,直接拖进去替换即可,方便快捷

    在这里插入图片描述

    展开全文
  • jar命令(一)-jar打包class文件

    万次阅读 2017-03-16 17:44:22
    本文通过一个例子:将几个简单的类打包,并标志主类 来介绍jar的常用命令

    jar包本质上是将所有class文件、资源文件压缩打成一个包(也可以选择不压缩),可选择在jar包中生成META-INF/MANIFEST.MF文件,MANIFEST.MF是清单文件,里面可以记录主类、classpath等信息,供虚拟机使用。
    接下来的一段时间里,我们将以以下路径学习jar命令和清单文件的相关知识

    1. jar打包class文件
    2. 带包class文件jar打包
    3. 清单文件的使用

    在这篇文章里我们将使用简单的java程序来熟悉jar命令的使用,因为是出于熟练使用jar的目的,下面的操作中可能会啰里啰嗦、重复使用jar命令,以下是本片文章的目录,精简版直接看 jar命令的选项

    一. jar命令的选项

    用法:

    大括号中的选项是必选的,中括号里选项是可选的,jar-file是jar文件;manifest-file是清单文件,即jar包中的META-INF/MANIFEST.MF文件

    jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
    

    选项:

    -c  (create)创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  (update)更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
    

    本节中使用到的命令

    jar uf xx.jar [file … | path]是需要注意的,它在更新完jar文件后会生成新的清单文件,这一点在本篇文章的 “方法4:为jar更新文件,文件是清单文件” 中有实例说明

    jar cf xx.jar [file ... | path]  将file等文件或path目录打包成xx.jar
    jar cvf xx.jar [file ... | path]  同上,显示详细信息
    jar cmf manifest-file xx.jar [file ... | path]  将file等文件或path目录打包到xx.jar,并制定它的清单文件
    jar cMf xx.jar [file ... | path]  将file等文件或path目录打包到xx.jar,包中不生成清单文件
    jar uf xx.jar [file ... | path]  将file等文件或目录更新到xx.jar,务必注意!!!这个更新会重新生成清单文件
    jar uMf xx.jar [file ... | path]  同上,但不会生成清单文件
    jar umf manifest-file xx.jar {file ... | path}  将file等文件或path目录更新到xx.jar
    jar tf xx.jar  列出xx.jar中所有文件
    jar xf xx.jar  把xx.jar中所有文件提取到当前目录
    jar xf xx.jar {file ...}  把xx.jar中file等文件提取到当前目录
    

    二. 只有一个class文件的可执行jar的实现

    首先创建一个jarDemo文件夹,里面放置我们的测试类

    mkdir jarDemo
    cd jarDemo
    touch Main.java

    在Main.java里面添加我们的hello world代码,并javac编译

    public class Main{
        public static void main(String ... args){
            System.out.println("hello world");
        }
    }
    javac Main.java

    然后将生成的Main.class打包,c选项是创建一个新的jar包,f是指定jar包的名字

    jar cf Main.jar Main.class

    如果附加使用v选项,则会列出详细的打包信息

    jar cvf Main.jar Main.class

    我们可以通过t选项来查看生成的jar中的文件,输出的内容也就是包目录和包文件,可以看到是默认生成MANIFEST.MF文件的

    jar tf Main.jar
    
    输出:
    META-INF/
    META-INF/MANIFEST.MF
    Main.class

    当然我们也可以通过M选项不生成MANIFEST.MF文件,可以看到包中只有Main.class一个文件

    rm Main.jar
    jar cMf Main.jar Main.class
    jar tf Main.jar
    
    输出:
    Main.class

    虽然我们已经将Main.class打包了,并且Main.class有main(String … args)入口方法,可是这个jar还是不能执行,因为虚拟机并不知道这个包中的哪个class中是有main方法的

    java -jar Main.jar
    
    输出:
    Main.jar中没有主清单属性

    下面还是恢复到有MANIFEST.MF文件的Main.jar包,我们要将他解压,在MANIFEST.MF中添加主类属性
    解压jar包的方法有很多种,我们解压的目的是为了查看默认生成的MANIFEST.MF文件,并做修改,最后生成一个可执行的jar包,因为我们的目的是出于熟练使用jar命名,下面我们将使用多个方法实现这个目标

    方法一:将Main.jar全部解压,修改MANIFEST.MF文件后再重新打包

    因为jar解压命令只能解压到当前目录,这样会造成文件混乱,我们新建一个uncompress文件夹,将Main.jar拷贝到这个文件夹后再解压,可以看到,jar包中所有文件,x选项是提出全部或指定文件,这个例子里是提出全部文件,实际中可以用f选项提出指定文件,比如 >> jar xf Main.jar META-INF/MANIFEST.MF

    mkdir uncompress
    cp Main.jar uncompress
    cd uncompress
    jar xf Main.jar
    ls -RF
    
    输出:
    META-INF/   Main.class  Main.jar
    
    ./META-INF:
    MANIFEST.MF

    打开META-INF/MANIFEST.MF文件,看到默认生成的清单文件很简单,只有两行

    Manifest-Version: 1.0
    Created-By: 1.8.0_101 (Oracle Corporation)
    

    添加上添加上主类属性,注意冒号后面一定要留一个空格,最后一定要多留一个换行符

    Manifest-Version: 1.0
    Created-By: 1.8.0_101 (Oracle Corporation)
    Main-Class: Main
    

    然后使用再将uncompress中所有目录、文件全部打包,注意先将原来的Main.jar删除,最后就可以运行这个新的有主类属性的Main.jar啦

    rm Main.jar
    jar cMf Main.jar .
    java -jar Main.jar
    
    输出:
    hello world

    注意上面这个jar命令使用的M选项是不生成清单,因为原本uncompress目录里就有,如果还是使用jar cf命令,生成的清单和上面第一次打包生成清单的是一样的,没有Main-Class: Main主类

    rm Main.jar
    jar cf Main.jar .
    java -jar Main.jar
    
    输出:
    Main.jar中没有主清单属性

    方法二:生成jar包的时候为其指定清单文件

    还是那个方法一的uncompress目录,我们把META-INF下的MANIFEST.MF移到uncompress目录下,删除Main.jar,和META-INF目录,让uncompress中只有Main.class和MANIFEST.MF两个文件,MANIFEST.MF是有主类属性的清单文件

    mv META-INF/MANIFEST .
    rm Main.jar
    rm -r META-INF
    ls -RF
    
    输出:
    MANIFEST.MF Main.class

    接下了指定清单文件,生成Main.jar,m选项可以指定一个清单文件

    jar cmf MANIFEST.MF Main.jar Main.class
    java -jar Main.jar
    
    输出:
    hello world

    方法三:为jar包指定清单文件

    还记得最早那个jardemo目录里的那个清单里没有主类的Main.jar吗,我们为它更新有主类的清单文件
    jardemo/uncompress目录下的的MANIFEST.MF是有主类的,我们把它移到jardemo目录下

    cd desktop/jardemo
    mv uncompress/MANIFEST.MF .
    rm -r uncompress
    ls -RF
    
    输出:
    MANIFEST.MF Main.class  Main.jar    Main.java

    使用u选项更新jar包,使用m选项指定清单文件,输出了一些警告信息,因为新的清单文件和Main.jar包中原来的清单信息有两个字段是重名的

    jar -umf MANIFEST.MF Main.jar
    
    输出:
    三月 13, 2017 10:50:50 下午 java.util.jar.Attributes read
    WARNING: Duplicate name in Manifest: Manifest-Version.
    Ensure that the manifest does not have duplicate entries, and
    that blank lines separate individual sections in both your
    manifest and in the META-INF/MANIFEST.MF entry in the jar file.
    三月 13, 2017 10:50:50 下午 java.util.jar.Attributes read
    WARNING: Duplicate name in Manifest: Created-By.
    Ensure that the manifest does not have duplicate entries, and
    that blank lines separate individual sections in both your
    manifest and in the META-INF/MANIFEST.MF entry in the jar file.

    再运行这个jar

    java -jar Main.jar
    
    输出:
    hello world

    方法四:为jar更新文件,文件是清单文件

    使用这个方法主要是为了再次熟悉一下u选项和理解包的概念
    我们在jardemo目录里删除有主类清单的Main.jar,再次生成最早的MANIFEST.MF中没有主类的Main.jar

    jar cf Main.jar Main.class

    jar包中的MANIFEST.MF里记录了主类,而MANIFEST.MF只是jar包中的一个文件,我们将Main.jar中没有主类的MANIFEST.MF替换为有主类的MANIFEST.MF和方法三是同样的效果,首先要讲有主类的MANIFEST.MF放在合适的路径里面,我们之前看到jar包中的文件是放在META-INF目录里的,使用u来更新jar,注意需要使用M来忽视清单文件

    mkdir META-INF
    mv MANIFEST.MF META-INF
    jar uMf Main.jar META-INF/MANIFEST.MF
    java -jar Main.jar
    
    输出:
    hello world

    三. 多个class的打包

    上一节中,jarDemo目录中有Main.java和有主类信息的清单文件MANIFEST.MF,我们只保留这两个个文件,其他全部删掉,然后新建一个Say.java文件

    ls -RF
    
    输出:
    META-INF/   Main.java   Say.java
    
    ./META-INF:
    MANIFEST.MF

    在新建的Say.java:

    public class Say{
        public static void say(String str){
            System.out.println("This is " + str);
        }
    }

    修改Main.java文件,让它调用Say类中的Say.say(…)方法

    public class Main{
        public static void main(String ... args){
            System.out.println("hello world");
            Say.say("Charles");
        }
    }

    我们编译文件并打包,注意指定一个那个有主类属性的MANIFEST.MF

    javac *.java
    jar cmf Main.jar META-INF/MANIFEST.MF Main.class Say.class
    java -jar Main.jar
    
    输出:
    hello world
    This is Charles
    展开全文
  • class文件打包成jar包

    千次阅读 2016-07-28 12:06:10
    2、输入:jar cvf (新jar的名字) (.class文件,多个则中间用空格隔开) 如: jar cvf  test.jar t est.class  test2.class 二、多个class文件,以及文件夹 (1)新建一个manifest.txt文件,添加内容:Ma

    一、少量class打包成jar

    1、进入cmd,切换到java  bin目录

    2、输入:jar  cvf  (新jar的名字)  (.class文件,多个则中间用空格隔开)

    如: jar  cvf  test.jar test.class  test2.class




    二、多个class文件,以及文件夹

    (1)新建一个manifest.txt文件,添加内容:Manifest-Version: 1.0
     

    (2)把manifest.txt的后缀改成.mf,即manifest.mf


    (3)进入cmd,进入准备打包的根目录,这里把要打包的文件夹与manifest.mf放在同一目录下


    (4)输入:jar cvfm  (新jar包的名字)  manifest.mf  (目录名称)

    如:jar cvfm utils.jar manifest.mf com

    注:jar 是打包命令;cvfm 是参数;utils.jar 是打完包后的文件名;
    参数c表示要生成一个新的JAR文件;v表示在标准输出中生成详细输出,  f表示要生成的JAR文件的名字;m表示文件清单文件的名字。



    常见报错:提示拒绝访问XXXX
    方案:JDK若安装在系统盘,把JDK拷贝到非系统盘,再操作即可



    展开全文
  • 如何更新jar包或者jar包中的文件

    千次阅读 2018-05-20 10:18:06
    如何更新jar包或者jar包中的文件jar文件:/home/resin.jar需更新包中com/caucho/server/port/Port.class文件方法1:jar uf resin.jar com/caucho/server/port/Port.class要求是必须知道jar包的结构要非常熟悉,可以...

    如何更新jar包或者jar包中的文件

    jar文件:/home/resin.jar
    需更新包中com/caucho/server/port/Port.class类文件

    方法1:
    jar uf resin.jar com/caucho/server/port/Port.class
    要求是必须知道jar包的结构要非常熟悉,可以使用:jar tf resin.jar来查看。

    方法2:
    解压jar xvf resin.jar->覆盖相应类文件->再打包(jar cvf resin.jar com)


    需求:需求更换jar中的class文件,输出日志

    操作:1、解压jar包

               2、替换class文件

               3、后台进入文件路径com(需要对哪个文件进行打bao即进入哪个目录的父母录)

               5、执行(jar cvf resin.jar com即可(说明对com及com在内的文件进行打包)

              

    展开全文
  • java class文件生成jar包

    千次阅读 2014-06-20 14:35:44
    java class文件生成jar包  2008-08-12 10:28:01| 分类: java技术文档|举报|字号 订阅 进入dos操作符窗口 cd进入要打成jar包class文件所有文件夹目录 jar cvf [生成jar的名称.jar]...
  • 修改jar包中class文件

    千次阅读 2020-04-02 00:29:22
    需求:银行跑批任务执行时要调用行方自己的短信平台给科技部人员发送短信,行方提供一个jar文件,通过shell脚本传参调用即可。 问题点:shell脚本调用jar包没太大问题,关键在于,需要在jar...替换class文件—&g...
  • 执行 java class 文件引入jar包

    千次阅读 2016-05-19 13:49:12
    执行 java class 文件引入jar包 执行某个java编译后的class文件,一般是一个入口文件的时候,经常需要引入某lib包下的jar文件,方法如下: java -classpath jar目录 class文件目录,eg:java -classpath .:lib/* Run ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 527,783
精华内容 211,113
关键字:

如何更新jar包的class文件