首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么ProGuard输出的JAR文件中没有类文件?

ProGuard是一种Java字节码优化工具,用于缩小、优化和混淆Java代码。当使用ProGuard对Java项目进行优化时,可能会出现输出的JAR文件中没有类文件的情况。这可能是由于以下几个原因导致的:

  1. 配置错误:ProGuard的配置文件(proguard.cfg或proguard-rules.pro)中可能存在错误配置,导致类文件被错误地排除在优化过程之外。检查配置文件中的排除规则,确保没有排除需要保留的类。
  2. 代码被完全优化:ProGuard的优化过程可能会将一些未被引用的类、方法和字段完全移除,以减小输出文件的大小。如果某个类没有被其他代码引用,且没有被配置文件中的保留规则所保留,那么该类可能会被完全移除。
  3. 混淆导致类名改变:ProGuard的混淆功能会对类名进行改变,以增加代码的安全性和难以理解性。如果类名被混淆,那么在输出的JAR文件中查找原始类名是不可能的。可以通过配置文件中的保留规则来确保某些类名不被混淆。
  4. 编译器优化:在某些情况下,编译器可能会对代码进行优化,将一些类的实现内联到其他类中,从而减少类文件的数量。这种情况下,输出的JAR文件中可能没有独立的类文件,而是将代码内联到其他类中。

综上所述,ProGuard输出的JAR文件中没有类文件可能是由于配置错误、代码被完全优化、混淆导致类名改变或编译器优化等原因导致的。在使用ProGuard时,需要仔细检查配置文件,确保需要保留的类没有被错误地排除或混淆,并了解代码优化和混淆的原理,以便正确处理输出文件中没有类文件的情况。

(腾讯云相关产品和产品介绍链接地址暂无)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

依赖 jar 没有传递,导致找不到文件而启动失败了

前言 最近频繁遇到找不到文件错误。 Caused by: java.lang.NoClassDefFoundError:xxx 就这个家伙。...这个是通过三方 jar 包依赖进来,我在 IDEA 里面 ⌘ + B 还能进入源码! 这我不禁怀疑是不是因为开发环境使用 Docker 容器原因。 发布其他分支,是可以。...竟然啥也没有!...既然是打包没有打进去,那就看一下 mvn 依赖树问题吧! 解决问题 ? 项目结构 web 启动失败,是因为 service 添加依赖,没有传递到 web,所以 web 打包没有打进去那个。...父 POM deploy 到私服就是一个空项目,里面就一个 POM 文件。 最后升级了一下父 POM 版本,重新 deploy 一下,再改改各个 module 依赖版本。 大功告成!

1.9K20

javajar包内访问jar包内部资源文件路径和获得读取资源文件内容问题

在大数据开发和java web开发,我们有时会在程序读取一些资源文件内容。...当我们在本地运行调试时候是没有任何问题,但是当我们将程序打成jar包上传到集群后运行时,发现报错:“找不到配置文件路径”。虽然jar确实存在配置文件,但是还是读取不到。...相关解决方法可以参考以下相关资料:  javajar包内访问jar包内部资源文件路径问题: http://blog.csdn.net/mm_bit/article/details/50372229...获取jar包内部资源文件: http://blog.csdn.net/luo_jia_wen/article/details/50057191 【解惑】深入jar包:从jar读取资源文件: http...://www.iteye.com/topic/483115  jar读取资源配置文件jar包内包外,以及包内读取目录方法: http://blog.csdn.net/T1DMzks/article/

9.1K20

解决SpringBoot jar文件读取问题

jar包发布到服务器后,再次执行程序时就会抛出找不到文件异常。.../templates/docxTemplate.docx 显而易见,这个异常告诉我们:没有找到文件,但是将jar包解压过后,发现这个文件是真真实实存在。那这到底是怎么回事呢?这压根难不倒我。...通过仔细观察堆栈信息,我发现此时文件路径并不是一个合法URL(文件资源定位符)。原来jar包中资源有其专门URL形式:jar:!/{entry} )。...所以,此时如果仍然按照标准文件资源定位形式 File f=new File("jar:file:……"); 定位文件,就会抛出java.io.FileNotFoundException。...解决 虽然我们不能用常规操作文件方法来读取jar资源文件docxTemplate.docx,但可以通过ClassgetResourceAsStream()方法,即通过流方式来获取 :

2.7K21

Android项目实战(二十四):项目包成jar文件,并且将工程引用jar一起打入新jar文件

.jar文件找不到。...这里可以猜测,使用上述方法将android项目打成.jar文件过程,并没有将android项目原来引用第三方.jar文件也一起打入到新.jar文件。...可以测试一下,将android项目打成.jar文件解压缩,会发现只有java代码相关文件,而没有原来android项目中引用第三方.jar文件 解决方案: 1、首先 问题产生原因就是 生成.jar...文件android项目原先引用第三方.jar文件没有被打入到 新.jar文件 那么我们想:怎么在android项目打成.jar文件时候 顺带把 android项目引用第三方.jar文化也一并打入到新...(6)、打开build.xml文件  basedir="H:\soft\jar" 该目录,即可看到合并后jar文件

1.3K100

Android项目实战(二十四):项目包成jar文件,并且将工程引用jar一起打入新jar文件

.jar文件找不到。...这里可以猜测,使用上述方法将android项目打成.jar文件过程,并没有将android项目原来引用第三方.jar文件也一起打入到新.jar文件。...可以测试一下,将android项目打成.jar文件解压缩,会发现只有java代码相关文件,而没有原来android项目中引用第三方.jar文件 解决方案: 1、首先 问题产生原因就是 生成.jar...文件android项目原先引用第三方.jar文件没有被打入到 新.jar文件 那么我们想:怎么在android项目打成.jar文件时候 顺带把 android项目引用第三方.jar文化也一并打入到新...(6)、打开build.xml文件  basedir="H:\soft\jar" 该目录,即可看到合并后jar文件

1.2K40

(My)Eclipse Java 项目使用 .jardesc 文件快速导出 jar文件

导出 JAR常规操作 在 Eclipse 或 MyEclipse ,未使用 Maven 或其他构建工具 Java 项目,导出 jar文件操作非常繁琐,基本要经历以下步骤: 右键项目...JAR file 选项用于 “将资源导出到本地文件系统上 JAR 文件”。...如上所示,此步用于 “定义哪些资源应该导出到 JAR ”,是所有操作中最复杂一步。...of this JAR in the workspace,即将该 JAR描述文件保存在工作区,然后点击 Description file: 项目后 Browser......包时设置依然存在,此时如果没有需要改动设置,还是按照之前设置导出 JAR 包,直接点击 Finish 按钮导出即可,无需进行其他任何操作,大大提高了导出效率,节省操作时间。

1.5K10

Android.mk文件添加第三方jar文件方法

下面给大家介绍Android.mk文件添加第三方jar文件方法,具体内容详情如下所示: 先添加: LOCAL_STATIC_JAVA_LIBRARIES += clib clib为jar文件名,没有后缀...:= clib:libs/clib.jar \ mygson:libs/mygson.jar ps:android.mk引用第3方 jar方法 在某一应用程序中有时候需要引用第三方jar包,...在该app下Android.mk文件添加如下语句: ------------------------------start--------------------------------------...jar包应该方在工程根目录下,也就是与你要编译appsrc,res,Android.mk文件同级目录。...总结 以上所述是小编给大家介绍Android.mk文件添加第三方jar文件方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

1.8K30

《你不知道JavaScript》:js为什么没有

--是一种代码组织结构形式,是一种在软件对真实世界问题领域建模方法。有三个核心概念:封装、继承和多态。...可以通过来对数据结构进行分类,比如汽车,它是交通工具一个特例,后者是更广泛。 可以在软件定义一个汽车Car和交通工具Vehicle来对这种关系建模。...在软件,对不同交通工具重复定义载人能力等方法是没有意义,只要在Vehicle定义一次,然后在Car时,只要声明它继承(或扩展)了Vehicle基础定义就行。...Car定义就是对通用Vehicle定义特殊化。 这里要注意,尽管Vehicle和Car都会定义相同方法,但实例数据可能是不同。比如每辆车识别码等。...在javascript也有类似的语法,但是和传统完全不同。 js只有对象,没有这个概念。 意味着复制,传统被实例化时,它行为会被复制到实例被继承时,行为也会被复制到子类

1.6K30

修复 VisualStudio 构建时没有将 NuGet PDB 符号文件拷贝到输出文件

本文告诉大家如何修复 VisualStudio 构建时没有将 NuGet PDB 符号文件拷贝到输出文件问题。...如果 VisualStudio 构建时没有将 NuGet PDB 符号文件拷贝到输出文件夹,那将会在调试时候,由于找不到 PDB 符号文件而加载符号失败 尽管这个坑从 2017 到现在,来来回回修了好多次...本文将告诉大家如何强行设置拷贝 PDB 符号文件 方法是在自己项目的 csproj 项目文件夹里面添加如下代码 <Target Name="IncludeSymbolFromReferences"...任务,这个任务里面,将会尝试去找所有的引用 pdb 文件,如果找到了,就放入到输出拷贝里面 如此即可在构建时,将引用 NuGet 包 DLL 对应 PDB 文件拷贝到输出文件夹,而不需要关注具体框架版本...当然,在每个项目都拷贝以上代码也不是好主意。

1K10

从SUMO输出文件获得队列转移矩阵

SUMO功能是很强大,不过可视化和后期期望结果多样性似乎就不太如人意了。 本次我们利用SUMOdump仿真输出文件来获取一个队列转移矩阵(lane change rate matrix)。...1.首先来看一下dump文件 在仿真配置文件output部分加入下面这样语句,就会生成dump文件 " /> </...在sumo,tools文件夹下面的xml子文件夹,里面有一个xml2csv.pypython程序,可以在命令行运行它。 就像这样就可以了。 如果dump文件比较大,需要等等待一些时间。...csv文件截取了需要字段,同时做了一些数据清理工作。...最后,生成lc.csv文件用于计算队列转移矩阵值,lane.csv文件用于形成矩阵行列坐标。。当然啦,这里我们只是生成了两个csv文件,而没有直接生成矩阵。

1.9K30

Android Proguard(混淆)

当然,我们也可以配置文件与命令行参数混用,例如: java -jar proguard.jar @proguard.cfg -verbose 配置文件 # 放在行首,用来做注释; 单词之间多余空格或分隔符会被忽略...-libraryjars classpaath 指定输入文件引用库。这些库不会被写入到输出文件。每个库至少要有一个被引用。 在查找时候,proguard运行时库是不算在内。...whyareyoukeeping class_specification 声明 打印为什么一个成员变量被保护。这对检查一个输出文件结果有帮助。...元素名已经存在在mapping文件元素,按照映射表重命名;没有存在到mapping文件元素,重新赋一个新名字。mapping文件可能引用到输入文件。...它在调试时候比较有用。 -dump [filename] 声明输出整个处理之后jar文件结构,可以输出到标准输出流或者一个文件

2.5K30

【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 删除 Xml 文件节点 | 增加 Xml 文件节点 | 将修改后 Xml 数据输出文件 )

文章目录 一、删除 Xml 文件节点 二、增加 Xml 文件节点 三、将修改后 Xml 数据输出文件 四、完整代码示例 一、删除 Xml 文件节点 ---- 在 【Groovy】Xml...反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件节点和属性 | 获取 Xml 文件节点属性 ) 博客基础上 , 删除 Xml 文件节点信息 ; 下面是要解析...") 三、将修改后 Xml 数据输出文件 ---- 创建 XmlNodePrinter 对象 , 并调用该对象 print 方法 , 传入 XmlParser 对象 , 可以将该 XmlParser...数据信息写出到文件 ; // 将修改后 Xml 节点输出到目录 new XmlNodePrinter(new PrintWriter(new File("b.xml"))).print(xmlParser...Xml 节点输出到目录 new XmlNodePrinter(new PrintWriter(new File("b.xml"))).print(xmlParser) 执行结果 : [name[attributes

6.1K40
领券