【问题标题】:Building JavaFX app in IntelliJ IDEA using maven使用 maven 在 IntelliJ IDEA 中构建 JavaFX 应用程序
【发布时间】:2021-01-21 04:45:29
【问题描述】:

我在尝试使用 maven 构建 JavaFX 应用程序时遇到了一些困难。该应用程序在 IDE 中运行良好。我运行 maven 包任务并创建 JAR 文件。问题是这个文件没有运行。我检查了包含清单,但没有入口点。我已经添加了它,但文件仍然没有运行。这就是清单现在的样子(最后一个字符串是手动添加的):

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.6.3
Built-By: Комп
Build-Jdk: 15
Main-Class: org.example.App

pom 文件

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>Refinement</artifactId>
  <version>1.0-SNAPSHOT</version>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>11.0.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-maven-plugin -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-maven-plugin</artifactId>
      <version>0.0.4</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>0.0.4</version>
        <configuration>
          <mainClass>org.example.App</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>


</project>

并构建日志

"C:\Program Files\Java\jdk-15\bin\java.exe" -Dmaven.multiModuleProjectDirectory=C:\Users\Комп\Documents\javaProjects\Refinement "-Dmaven.home=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\plugins\maven\lib\maven3" "-Dclassworlds.conf=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\plugins\maven\lib\maven3\bin\m2.conf" "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\plugins\maven\lib\maven-event-listener.jar" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\lib\idea_rt.jar=65494:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\plugins\maven\lib\maven3\boot\plexus-classworlds-2.6.0.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.3\plugins\maven\lib\maven3\boot\plexus-classworlds.license" org.codehaus.classworlds.Launcher -Didea.version=2020.2.2 package
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< org.example:Refinement >-----------------------
[INFO] Building Refinement 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Refinement ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\Комп\Documents\javaProjects\Refinement\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ Refinement ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Refinement ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\Комп\Documents\javaProjects\Refinement\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ Refinement ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ Refinement ---
[INFO] Surefire report directory: C:\Users\Комп\Documents\javaProjects\Refinement\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.example.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.052 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ Refinement ---
[INFO] Building jar: C:\Users\Комп\Documents\javaProjects\Refinement\target\Refinement-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  35.456 s
[INFO] Finished at: 2020-10-06T12:04:09+03:00
[INFO] ------------------------------------------------------------------------

更新

我尝试从 CLI 启动 JAR 文件并收到错误:

Error: Could not find or load main class org.example.App
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

也许我必须在 JAR 文件中包含 JavaFX 类?我不确定用户的机器是否会安装 JavaFX,我不想依赖这个。

我还尝试重建 pom 文件,如Building a minimal JavaFX 11 application with Maven 文章中所示。这个新版本也报错:

Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at org.example.Launcher.main(Launcher.java:5)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 10 more

看起来比较冗长,但本质在我脑海中是一样的。

检查 PATH 变量,它指向 JavaFX lib 文件夹。

【问题讨论】:

  • 运行应用程序时遇到什么错误?请尝试本文中的步骤:webtechie.be/post/…
  • 谢谢,我已经更新了描述
  • 让我跳入这个问题,因为@y.bedrov 非常乐意参考我的博客 ;-) 似乎您没有链接到正确的 JavaFX 路径,请参阅 askubuntu.com/questions/1136420/… --> "java --module-path $FX-PATH --add-modules javafx.controls -jar sample.jar" 其中 $FX-PATH 应设置或替换为提到的 JavaFX 路径。或者使用包含 JavaFX 的 LibericaJDK:webtechie.be/post/…

标签: java maven intellij-idea javafx maven-plugin


【解决方案1】:

要开始一个新的 JavaFX 项目,最好访问这个(全新的)网站:https://start.gluon.io/。您将获得一个包含所有文件的 ZIP 和一个 README,让您立即开始。

对于基本应用,取消选择所有“Gluon Features”、“CloudLink”和“Attach”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多