首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenJFX 11 - javafxpackager二进制CSS

OpenJFX 11 - javafxpackager二进制CSS
EN

Stack Overflow用户
提问于 2019-10-14 13:52:37
回答 2查看 466关注 0票数 1

看起来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的方法,还是不再支持整个系统?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-14 16:15:39

虽然有一个jpackage 工具可能正在添加到Java 14中,但我不知道它将使用Css2Bin

在OpenJFX (11+)中,Css2Bin仍然是内部用于将Modena文件转换为BSS的工具。你可以找到它,这里

如果您在OpenJFX中搜索此工具的使用,您将在用于构建JavaFX本身的build.gradle文件中使用JavaFX。

我将粘贴该任务,因为它与查看它所做的相关:

代码语言:javascript
复制
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
            }
        }
      }
    }

您可以注意到,基本上调用一个java命令,在模块路径中使用JavaFX jars来运行Css2Bin::main公共方法,这只是javafx.graphics包含模块的一部分。

因此,没有什么可以阻止您在构建过程中执行完全相同的操作。

假设您正在使用Gradle,您可以添加在jar任务之前执行的任务,如下所示:

代码语言:javascript
复制
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
            }
        }
    }
}

只需运行:

代码语言:javascript
复制
./gradlew css

它将将资源中的所有css文件转换为bss。然后,在执行jar时,您可能需要过滤掉css。

当然,也可以从Maven或命令行以类似的方式运行相同的任务。

票数 2
EN

Stack Overflow用户

发布于 2022-04-11 08:56:49

为了完整起见,以下是José的意思

同样的任务可以从Maven以类似的方式运行..。

代码语言:javascript
复制
<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已经在反应堆的依赖项中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58378287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档