[英]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.