gpt4 book ai didi

java - 如何在 JavaExec 任务类路径中包含插件依赖项?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:45:22 30 4
gpt4 key购买 nike

我正在使用 JavaExec 任务来运行不同的类,但每当我尝试使用 gradle <task> 运行其中一个任务时,我收到一条错误消息 Error: JavaFX runtime components are missing, and are required to run this application .

如果我只设置 mainClassName='exercise1.Cards'或任何其他类名,运行 gradle run工作完全正常。我猜测在使用 JavaExec 运行类时找不到 JavaFX 类,我想知道如何包含它们。

build.gradle:

plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.7'
}

version '1.0-SNAPSHOT'

sourceCompatibility = 11

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}

javafx {
modules = [ 'javafx.controls' ]
}

task runExercise1(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'exercise1.Cards'
}

task runExercise2(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'exercise2.InvestmentCalculator'
}

task runExercise3(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'exercise3.PointCircle'
}

task runExercise4(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'exercise4.OccurrenceHistogram'
}

最佳答案

org.openjfx.javafxplugin plugin为你管理一些事情。

添加到构建文件时:

javafx {
modules = [ 'javafx.controls' ]
}

插件translates变成这样的东西:

run {
doFirst {
jvmArgs = ['--module-path', classpath.asPath,
'--add-modules', 'javafx.controls']
}
}

但是,如果您创建一个新的 JavaExec 任务,插件似乎不会处理它。

鉴于您发布的错误:

Error: JavaFX runtime components are missing

很明显,一个可能的解决方法是完全按照插件的方式进行操作,并在使用模块化依赖项时添加预期的 jvm args。

所以这应该可行:

task runExercise1(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
jvmArgs = ['--module-path', classpath.asPath,
'--add-modules', 'javafx.controls' ]
main = 'exercise1.Cards'
}

或者,您可以创建一个不从 Application 扩展的启动器类,因为这将绕过模块化检查(如 here 所述)。

public class Launcher {

public static void main(String[] args) {
// optionally process args to select class to run
Cards.main(args);
}
}

然后您可以添加您的任务,甚至可以使用运行时参数来选择要从启动器运行的主类。

task runExercise1(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'exercise1.Launcher'
args 'exercise1' // <-- optionally select class to run
}

关于java - 如何在 JavaExec 任务类路径中包含插件依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54795891/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com