如何在 JavaExec 任务类路径中包含插件依赖项?
Posted
技术标签:
【中文标题】如何在 JavaExec 任务类路径中包含插件依赖项?【英文标题】:How to include plugin dependencies in JavaExec task classpath? 【发布时间】:2019-07-14 16:57:32 【问题描述】:我正在使用 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'
【问题讨论】:
【参考方案1】:org.openjfx.javafxplugin
plugin 为您管理一些事情。
当您添加到构建文件时:
javafx
modules = [ 'javafx.controls' ]
插件translates 类似于:
run
doFirst
jvmArgs = ['--module-path', classpath.asPath,
'--add-modules', 'javafx.controls']
但是,如果您创建一个新的JavaExec
任务,插件似乎不会处理它。
鉴于您发布的错误:
错误:缺少 JavaFX 运行时组件
很明显,一个可能的解决方法是完全按照插件的功能进行操作,并在使用模块化依赖项时添加预期的 jvm 参数。
所以这应该有效:
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
【讨论】:
以上是关于如何在 JavaExec 任务类路径中包含插件依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
在 wildfly jar 中包含第三方库(keycloak SPI)