A. java里面的jar包是否就相当于c#编译生成的dll文件
dll文件,俗称动态链接库文件,是有执行程序可调用的二进制文件,也就是计算机能识别的二进制代码,任何语言都可以调用。只是方法不同而已。
jar文件,一般是由java虚拟机解析的,其实相当于将一系列的字节码文件(.java文件)或者包,java虚拟机这些文件通过一些算法序列化(压缩),就形成了jar文件。但程序需要执行时java虚拟机将字节码文件再次编译成二进制文件供计算机执行。
PS:这就是java是跨平台的原因。所有程序的字节码文件相同。不同操作系统上只需安装不同的java虚拟机就可以执行相同的程序。
B. 如何快速反编译JAVA的jar包或war包
有些时候我们面对一个class文件jar包或者war包,很想知道里面有什么参数,有什么方法,但是又没有文档,又没有源代码,那怎么办呢。
没关系,我们可以反编译这些class文件或jar包或war包。
java的class文件存储的是字节码,这些基本知识在此就不必啰嗦了。反正就是其存储的信息足够可以反编译出来。
我们下载TTools中dist文件夹下的TdeCompile.jar可执行jar包,然后就可以开始反编译工作了。使用方法很简单,在命令行输入命令即可,如下
[plain] view plain
java -jar TdeCompile.jar xxx.class
注意如果你不在TdeCompile的同目录下,需要写上TdeCompile.jar的路径,其次跟一个参数xxx.class,xxx代表你所要反编译的文件的文件名。输出即是xxx.class.txt,它是反编译过后的文件,txt文本格式,所在目录通xxx.class。请确保你在xxx.class目录下有写权限。
我们也可以直接操作一个jar包或war包。如:
[plain] view plain
java -jar TdeCompile.jar xxx.jar
程序可以自动识别是class文件还是jar或war包,如果是jar包或war包,则首先自动解压缩,解压缩的目录为xxx.jar的同一个目录,然后逐个反编译class文件,在每个class文件的旁边输出一个xxx.class.txt文件。请确保你在jar包所在目录有写权限。
TdeCompile的原理是利用了ASM去读取每一个class文件的信息。
C. 如何用JAVAC一次性编译多个包下的JAVA文件
1.利用-cp
cd xxx
dir *.java/s/b > srclist.txt
or dir x:/yyy/zzz/*.java/s/b > srclist.txt
javac -cp .;xxx/yyy/zzz.jar;x/y/z.jar -d classes @srclist.txt
2.直接使用
这个,主要是在做一个独立的Java项目,它不依赖IDE,同时要在别人电脑上编译运行
下面编译运行用到了jar包、properties文件。首先进入项目的根目录下,注意:每一行,表示:DOS系统将执行的指令。
G:
cd testJava
上面,两个命令为模拟,进入项目根目录(具体目录,根据自己程序所在目录)。
javac -classpath .;../previousRecord.properties;../lib/jtds-1.2.5.jar;com/cjb/properities/jdbc.properties com/cjb/jdbc/*.java com/cjb/client/*.java -encoding UTF-8
上面命令,表示:编译com/cjb/jdbc下所有java类和com/cjb/client下所有java类,这些类用到了previousRecord.properties文件(它的路径是相对的)和jtds-1.2.5.jar的文件jar包(它的路径也是相对的),同时用的编码是UTF-8。
java -Xms64m -Xmx512m -cp .;../previousRecord.properties;../lib/jtds-1.2.5.jar;com/cjb/properities/jdbc.properties com/cjb/client/MailDispatcherOperation
上面命令,表示:执行com/cjb/client下的MailDispatcherOperation.class(它里面有Main函数)。
D. 修改jar包中的配置文件
原文地址: 修改jar包中的配置文件
现有jar包 base-web.jar
查找jar包里面的文件:
jar ftv ks-web-1.0.3.jar | grep pom.xml
要修改jar包中配置文件可以用下面三种方式:
方式一 通过vim命令直接修改保存jar。超方便。
通过vim命令直接编辑jar
vim xxx.jar 该命令首先会列出全部文件,可以通过输入/abc来搜索,定位到对应的abc文件后回车进入配置文件内进行编辑,:wq保存。
方式二 通过jar命令替换jar包中的文件(也可新增)
1.列出jar包中的文件清单
jar tf base-web.jar
2.提取出内部jar包的指定文件
jar xf base-web.jar `jar ft base-web.jar | grep t_ivr_data_bj.json`
3.然后可以修改文件
vim BOOT-INF/classes/realtime/t_ivr_data_bj.json
4.更新配置文件到内部jar包.(存在覆盖,不存在就新增)
jar uf base-web.jar BOOT-INF/classes/realtime/t_ivr_data_bj.json
4.1更新内部jar包到jar文件
jar uf base-web.jar 内部jar包.jar
5.可以查看验证是否已经更改
vim base-web.jar
方式三 解压jar包,修改后重新打包jar
1.解压
unzip base-web.jar
2.移除jar包,最好备份
rm base-web.jar
3.重新打包
jar -cfM0 base-web.jar *
或者
jar -cvfm0 base-web.jar ./META-INF/MANIFEST.MF ./
4.运行
java -jar base-web.jar
jar命令参数:
-c 创建新的存档
-f 指定存档文件名
-M 不配置配置清单,这样还可以使用maven生成的配置清单也就是MANIFEST.MF
-0 不进行压缩,如果压缩会有问题
-m 指定清单文件
-t 列出归档目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
E. 在java代码中实现动态编译java文件
importjavax.tools.*;
importjava.io.*;
/**
*@authorhardneedl
*/
finalpublicclassMyCompile{
/**
*@paramargs命令行参数只有1个,即待编译的源代码文件的绝对路径
*@throwsFileNotFoundException
*/
publicstaticvoidmain(String...args)throwsFileNotFoundException{
JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();
intr=compiler.run(null,null,null,args[0]);
System.out.println(r==0?"成功":"失败");
}
}
F. jar是什么意思,jar文件怎么打开
JAR文件是一种归档文件,以ZIP格式构建,以.jar为文件扩展名。打开方式如下:
1、桌面有一个jar的文件。
JAR 文件格式以 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。
(6)java动态编译jar包内的文件扩展阅读
JAR文件的特点
1、安全性
可以对 JAR 文件内容加上数字化签名。这样,能够识别签名的工具就可以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是否被篡改过。
2、减少下载时间
如果一个 applet 捆绑到一个 JAR 文件中,那么浏览器就可以在一个 HTTP事务中下载这个 applet 的类文件和相关的资源,而不是对每一个文件打开一个新连接。
3、压缩
JAR 格式允许您压缩文件以提高存储效率。
4、传输平台扩展
Java 扩展框架(Java Extensions Framework)提供了向 Java 核心平台添加功能的方法,这些扩展是用 JAR文件打包的(Java 3D 和 JavaMail 就是由 Sun 开发的扩展例子)。
G. java中,jar包里面的类是源代码吗还是编译后的文件字节码文件
起作用的是
字节码
文件,当然源代码也可以打包进去,但不起作用。
H. java动态编译jar找不到
~/usr/share/java/mysql-connector-java.jar
找不到MYSQL的戏,就是说明上面的路径不对。。。。。。。。。
I. 如何修改jar包内的源文件
1、将class文件改成java文件(如果你的jar包中是包含源代码的,即包含java文件,请跳过此步)
先将jar包通过winrar或者快压等解压缩软件将jar包解压缩,再通过一些专门的Java反编译工具将class文件转换为java文件(本博主是使用的是JD-GUI这个软件)。
2、更改java源文件
将java文件放入自己专门的开发工具中(eclipse、myeclipse等),需要注意的是,应该是将需要改动的java文件放入java project中,并且要创建对应的package,再将原本的jar导入,此时可能还报错,需要导入一些相应的jar包。当项目不报错之后,就可以做你所需要的修改了。
3、导出jar包
将现在的java project导出为jar包,然后将原本jar包中相应的class文件替换掉(如果是jar包中含有java源文件,也需要将java文件也需要替换)。
至此,jar包修改成功。大家如果有什么问题,可以直接问我或者在下方留言,本人qq:924325679。
J. 各位java高手,关于.jar包中的.class文件修改的问题
不要修改了,给它派生出一个子类或编辑同一个类后把源类替换掉得了。
上述方法是通过调用这个类包派生出一系列类重新生成一个JAR文件与其共用,使它达到你想要的效果,不过现在想想这个办法工作量也不小,考虑下一个试试。
你可以把他们解压出来,然后反编译你需要改动的那个类,改动期间再进行反编译需要牵涉到的类,这样就不需要全部反编辑了。
现在我还没有别的捷径,也很想知道。
六月十五日
想把它压缩成jar文件,暂且把java独立应用程序分成两种:
1)没有用到Package的普通程序;
2)有Package的,一般有多个.class文件才用的。
1)比如你写的java文件的目录是:D:\JAVA\test.java;那么你运行完会在同一目录下生成一个test.class文件,这时新建一个MANIFEST.txt文档(名字看清楚了)。
打开写入以下内容:
Manifest-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
Main-Class: test
保存为MANIFEST.MF。从命令行进入到JAVA目录下,
敲入: jar cvfm test.jar manifest.mf test
这样就生成了test.jar文件,直接点击就可以运行。
2)还是这个目录:D:\JAVA\test1.java和test2.java;且两个程序都中有package com.chat,就是把生成的.class放在里面,这时的MANIFEST.MF(可以用写字板打开)
内容是:
Manifest-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
Main-Class: com.chat.test1
注:test1里必须有main函数。
从命令行进入到JAVA目录下,
敲入:jar cvfm t1.jar manifest.mf com/*;test2
同理。在DOS 下
jar fc a.jar a
a 是你要打包文件夹
a.jar 是打包后的文件名 随便命名。