Gradle IntellijIDEA+;格拉德尔+;JavaFX:java.lang.ClassNotFoundException for one“;“运行配置”;但不是另一个
Intellij IDEA让我因不良行为而发疯: 我有一个(基于Gradle的)项目,其中有两个主要类是用Java编写的,每个类都在自己的包中Gradle IntellijIDEA+;格拉德尔+;JavaFX:java.lang.ClassNotFoundException for one“;“运行配置”;但不是另一个,gradle,intellij-idea,javafx,module-path,Gradle,Intellij Idea,Javafx,Module Path,Intellij IDEA让我因不良行为而发疯: 我有一个(基于Gradle的)项目,其中有两个主要类是用Java编写的,每个类都在自己的包中 一个叫做“HelloFX” 其中一个称为“ImageViewExample” 两者都使用JavaFX,因此需要一些特殊的“运行配置” 为了“HelloFX” 对于“ImageViewExample” 这两种情况下的配置都是相同的(最好不必处理一组复杂的巴洛克文本框,只需在属性值文本描述中包含所有内容,也可以复制粘贴,但我离题了) 对于应
- 一个叫做“HelloFX”
- 其中一个称为“ImageViewExample”
- 为了“HelloFX”
- 对于“ImageViewExample”
JavaFxTrial/
├── build
│ ├── classes
│ │ └── java
│ │ └── main
│ │ ├── pack1
│ │ │ └── HelloFX.class
│ │ └── pack2
│ │ └── ImageViewExample.class
│ │
│ │
我也可以从命令行启动这个类
因此,这在命令行和Intellij IDEA中起作用:
JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects
$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack1.HelloFX
JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects
$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack2.ImageViewExample
但这只是调用另一个类的main,在Intellij IDEA中不起作用:
JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects
$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack1.HelloFX
JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects
$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack2.ImageViewExample
肯定错过了什么,但是什么
更新:
右键单击“Run ImageViewExample.main()”(我认为这意味着“通过Gradle插件运行”)(“Run HelloFX.main()”会成功),您会收到以下消息:
JavaFX runtime components are missing, and are required to run this application
这与“未找到类”并不完全相同
运行“with info”会发现Gradle插件运行启动“ImageViewExample”的命令行将Gradle缓存的所有JavaFX jar放在类路径而不是模块路径上,这显然会失败
Error: JavaFX runtime components are missing, and are required to run this application
这可能与此有关
更新:但可能不会。
右键单击Run只是拼凑出一个Run配置,这显然是错误的…但它至少找到了主类
更新更新
通过添加模块路径修复Intellij IDEA创建的运行配置,使“运行配置”能够正常工作,尽管故障“运行配置”和新的(正在工作的)“运行配置”表面上看起来完全相同
更新^3
即使在查看项目的.idea/workspace.xml
时,工作和非工作运行配置都是相同的..除了非工作运行配置没有标记为
真的
真的
假的
此设置中的移动部件太多。不喜欢。好的
事实证明,用于构建和运行的小部件是对空格敏感的
如果查看workspace.xml文件,这一点会变得很明显
<option name="MAIN_CLASS_NAME" value="pack2.ImageViewExample " />
这就是为什么XML不应该作为配置语言轻易地被忽略的原因
如果你知道要寻找什么,这是一个明显的标志:
嗯,那很容易
提交给JetBrains的错误报告