Proguard找不到基本软件包和超类

时间:2019-07-07 07:13:15

标签: proguard

我以前在Java 8上使用proguard 5,但是现在使用Java 11,所以我下载了proguard 6.1.1,但是遇到了问题。

1-产生大量警告,因为proguard找不到const AddPatient = ({ addNewPatient}) => ( <FormGroup> <Label for="className">Age</Label> <Input type="number" name="sub_total" id="sub_total" placeholder="" value = {addNewPatient.age} /> </FormGroup> ); java.awt中存在的基本类:

java.lang

我可以通过添加全局或详细信息Warning: ...: can't find referenced class java.awt.image.BufferedImage Warning: ...: can't find referenced class javax.swing.JPanel Warning: ...: can't find referenced class java.lang.management.ManagementFactory 来删除所有警告,但是我认为这并不理想。有更好的解决方案吗?

2-如果我删除警告,并带有选项-dontwarn,则会生成错误:

-dontwarn

生成此错误的类扩展了JFrame并完美运行。如何解决此错误?

1 个答案:

答案 0 :(得分:2)

您的应用程序取决于您需要告知ProGuard的各种运行时库。

在Java 8之前,AWTSwing等所有内置的Java库都捆绑在一起。您将向ProGuard提供类似以下参数的内容:

rt.jar

或者如果使用Ant:

-libraryjars <java.home>/lib/rt.jar

从Java 9开始,这些运行时库被打包为<libraryjar file="${java.home}/jre/lib/rt.jar" /> 下的许多jmod文件。至少您可能需要:

<java.home>/jmods

或者如果使用Ant:

-libraryjars  <java.home>/jmods/java.base.jmod(!**.jar;!module-info.class)

但是,其中不包括<libraryjar file="${java.home}/jmods/java.base.jmod(!**.jar;!module-info.class)" /> 中的AWT或Swing。确切地,您需要链接哪个jmod取决于您的应用程序使用了哪个Java运行时库。

根据您的情况,看来您需要

java.desktop.jmod

-libraryjars  <java.home>/jmods/java.base.jmod(!**.jar;!module-info.class)
-libraryjars  <java.home>/jmods/java.destop.jmod(!**.jar;!module-info.class)
-libraryjars  <java.home>/jmods/java.management.jmod(!**.jar;!module-info.class)

通过网络搜索<libraryjar file="${java.home}/jmods/java.base.jmod" jarfilter="!**.jar" filter="!module-info.class" /> <libraryjar file="${java.home}/jmods/java.desktop.jmod" jarfilter="!**.jar" filter="!module-info.class" /> <libraryjar file="${java.home}/jmods/java.management.jmod" jarfilter="!**.jar" filter="!module-info.class" /> 或仅搜索jmod <some class or package>可以帮助您识别可能需要的其他任何内容。

注意:如果没有 / jmods文件夹,而您使用的是openjdk,请注意,有一个单独的软件包供其搜索java-11-openjdk-jmods来安装正确的软件包