簡體   English   中英

OpenJFX 11 - javafxpackager 二進制 CSS

[英]OpenJFX 11 - javafxpackager Binary CSS

JavaFXpackager 似乎在 openjdk/openjfx 11 中不可用。

我想使用它創建二進制 CSS (BSS)。
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javafxpackager.html
使用-createbss在過去是可能的。

在 OpenJFX 郵件列表中,他們發布了一些關於Filling the Packager gap內容。
https://mail.openjdk.java.net/pipermail/openjfx-dev/2018-September/022500.html

但是這個新工具不能創建二進制 CSS。

我的問題是:是否還有一種方法可以使用 OpenJFX 11 生成二進制文件 css,或者是否不再支持整個過程?

雖然可能會在 Java 14 中添加一個jpackage工具,但我不知道它會使用Css2Bin

在 OpenJFX (11+) 中, Css2Bin仍然是內部用於將 Modena CSS 文件轉換為 BSS 的工具。 你可以在這里找到它。

如果您在 OpenJFX 中搜索此工具的用途,您會在build.gradle文件中找到它,該文件用於構建 JavaFX 本身。

我將粘貼該任務,因為它與查看它的作用相關:

def modulePath = "${project.sourceSets.main.java.outputDir}"
    modulePath += File.pathSeparator + "${rootProject.projectDir}/modules/javafx.graphics/build/classes/java/main"
    modulePath += File.pathSeparator + "${rootProject.projectDir}/modules/javafx.base/build/classes/java/main"
    processResources {
      doLast {
        def cssFiles = fileTree(dir: "$moduleDir/com/sun/javafx/scene/control/skin")
        cssFiles.include "**/*.css"
        cssFiles.each { css ->
            logger.info("converting CSS to BSS ${css}");

            javaexec {
                executable = JAVA
                workingDir = project.projectDir
                jvmArgs += patchModuleArgs
                jvmArgs += "--module-path=$modulePath"
                jvmArgs += "--add-modules=javafx.graphics"
                main = "com.sun.javafx.css.parser.Css2Bin"
                args css
            }
        }
      }
    }

As you can notice, basically a java command is called, with the JavaFX jars in the module path, to run the Css2Bin::main public method, which is just part of the javafx.graphics included module.

所以沒有什么能阻止你在構建過程中做同樣的事情。

假設您使用的是 Gradle,您可以添加一個在jar任務之前執行的任務,如下所示:

def java_home = hasProperty('org.gradle.java.home') ? 
      getProperty('org.gradle.java.home') : System.getenv('JAVA_HOME')

task css {
    if (java_home == null) {
        throw new RuntimeException("java_home is not defined.")
    }
    def cssFiles = fileTree(dir: "$project.rootDir/src/main/resources/")
    cssFiles.include "**/*.css"
    cssFiles.each { css ->
        logger.info("converting CSS to BSS ${css}")
        doLast {
            exec {
                commandLine "${java_home}/bin/java",
                        "--module-path", sourceSets.main.runtimeClasspath.asPath,
                        "--add-modules", "javafx.graphics",
                        "com.sun.javafx.css.parser.Css2Bin", css
            }
        }
    }
}

只需運行:

./gradlew css

它會將您資源中的所有 css 文件轉換為 bss。 那么在執行 jar 時,您可能需要過濾掉 css 。

當然,同樣的任務可以從 Maven 或命令行以類似的方式運行。

為了完整起見,這就是何塞的意思

可以從 Maven 以類似的方式運行相同的任務 [...]

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>css2bss</id>
            <phase>generate-resources</phase>
            <goals>
                <goal>java</goal>
            </goals>
            <configuration>
                <mainClass>com.sun.javafx.css.parser.Css2Bin</mainClass>
                <arguments>
                    <arg>${project.basedir}/src/main/resources/my-theme.css</arg>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

假設javafx.graphics已經在你的反應器的依賴項中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM