ProGuard 版本 5.3.2 是否支持 JavaFx?

Does ProGuard version 5.3.2 support JavaFx?

我认为它应该支持 Java 8 的 JavaFx,但是当我 运行 它时,我得到以下信息:

ProGuard, version 5.3.2
Reading input...
Reading program jar [C:\Dir_myApp\dist\App.jar]
Reading library jar [C:\Program Files\Java\jre1.8.0_111\lib\rt.jar]
Reading library jar [C:\Program Files\Java\jre1.8.0_111\lib\jce.jar]
Reading library jar [C:\Program Files\Java\jre1.8.0_111\lib\jfxswt.jar]
Reading library jar [C:\Program Files\Java\jre1.8.0_111\lib\jfr.jar]
Initializing...
Warning: App: can't find referenced class javafx.embed.swing.JFXPanel
Warning: App: can't find referenced class javafx.scene.media.Media

我包含了 jfxswt.jar 和 jfr.jar 因为它们看起来像 JavaFx jar 文件,我需要做什么才能让它与 [javafx.embed.swing.JFXPanel] 一起工作并且[javafx.embed.swing.Media] ?

可以使用 ProGuard 和 JavaFX,您可能想查看 javaf-maven-plugin 中的 example-project:

https://github.com/javafx-maven-plugin/javafx-maven-plugin/tree/master/src/it/08-build-with-proguard

使用以下配置:

-dontoptimize

# Save meta-data for stack traces
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

# Rename FXML files together with related views
-adaptresourcefilenames **.fxml,**.png,**.css
-adaptresourcefilecontents **.fxml
-adaptclassstrings

# Keep all annotations and meta-data
-keepattributes *Annotation*,Signature,EnclosingMethod

# Keep entry-point class
-keep class com.zenjava.test.javafx_and_proguard.MainApp {
    public static void main(java.lang.String[]);
}

# Keep all classes inside application
-keep,allowobfuscation class com.zenjava.test.javafx_and_proguard.** {
}

# Keep names of fields marked with @FXML attribute
-keepclassmembers class * {
    @javafx.fxml.FXML *;
}

编辑:对于 documentation-completeness,缺少 pom-configuration-part

<plugin>
    <groupId>com.github.wvengen</groupId>
    <artifactId>proguard-maven-plugin</artifactId>
    <version>2.0.10</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>proguard</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <proguardVersion>5.2</proguardVersion>
        <libs>
            <lib>${java.home}/lib/rt.jar</lib>
            <lib>${java.home}/lib/ext/jfxrt.jar</lib>
            <lib>${java.home}/lib/jce.jar</lib>
        </libs>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>net.sf.proguard</groupId>
            <artifactId>proguard-base</artifactId>
            <version>5.2.1</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</plugin>

免责声明: 我是 javafx-maven-plugin 的维护者 ;)

我找到了答案,我不需要 2 个 jar 文件:jfxswt.jar & jfr.jar。

但我确实需要包含:/lib/ext/jfxrt.jar 才能使其正常工作。