我以前在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并完美运行。如何解决此错误?
答案 0 :(得分:2)
您的应用程序取决于您需要告知ProGuard的各种运行时库。
在Java 8之前,AWT
,Swing
等所有内置的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>
可以帮助您识别可能需要的其他任何内容。
注意:如果没有