当前位置: 首页 > 知识库问答 >
问题:

用JAVAFX作为外部库构建JAVA项目的可运行Jar

贾飞鸿
2023-03-14

当我想将所有项目构建到一个可运行的jar中时,我的问题就出现了。Jar的构建没有错误,所有的Java类都能工作,只有JAVAFX类不能。我不明白如何将一个带有外部JAVAFX类和依赖项的Java项目构建到一个jar中,以便一切都能正常工作。有什么建议吗?我试了很多都没有结果...

如果您需要一些代码或一些关于项目设置的信息,我会很乐意编写它们。谢谢你的忠告。

我也尝试了Maven:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.openjfx</groupId>
  <artifactId>AvalonMikGiu</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.release>11</maven.compiler.release>
        <javafx.version>11</javafx.version>
    </properties>

  <name>AvalonMikGiu</name>

  <dependencies>
     <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
      <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
     <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
  </dependencies>

  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.1</version>
              <configuration>
                  <release>${maven.compiler.release}</release>
              </configuration>
          </plugin>
          <plugin>
              <groupId>org.openjfx</groupId>
              <artifactId>javafx-maven-plugin</artifactId>
              <version>0.0.3</version>
              <configuration>
                  <mainClass>src.QuickFlip2</mainClass>
              </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <shadedArtifactAttached>true</shadedArtifactAttached>
                        <shadedClassifierName>project-classifier</shadedClassifierName>
                        <outputFile>shade\${project.artifactId}.jar</outputFile>
                        <transformers>
                            <transformer implementation=
                                                 "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>src.MainGame</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>
</project>
Error: Could not find or load main class MainGame
Caused by: java.lang.ClassNotFoundException: MainGame

共有1个答案

云宝
2023-03-14

我找到了一个简单的解决方案:(Eclipse)

  1. 删除扩展应用程序的类并将方法导入Java类
  2. 在Eclipse项目中包含JavaFX libraris,并将它们导入Java类中
  3. 在可运行的Jar中导出项目,选择处理:“将所需的库复制到生成的Jar旁边的子文件夹中”
  4. 导出后,下一步是:

Windows:

MaC/Linux:

它们没有JavaFX bin文件夹,所以将JavaFX lib文件夹中的所有文件复制到您的project_lib中(覆盖...可能是jar文件重复)。

nb.下载正确的jdk JavaFX包,名称如下:openjfx-11.0.2_linux-x64_bin-sdk openjfx-11.0.2_windows-x64_bin-sdk openjfx-11.0.2_osx-x64_bin-sdk

 类似资料:
  • 我正在尝试建立基于Maven的应用程序的jar文件。所以我不需要将外部jar库包含到我的构建中。我需要我的应用程序在运行时从本地maven存储库或从本地文件夹提供这种外部依赖,这些将包含这些外部库。我为此依赖项配置pom文件,如下所示: 并尝试使用前缀运行这个jar。我正在用这个答案。

  • 我在NetBeans下开发了一个JavaFX应用程序,需要JRE8u60和一些外部库(jar和dll)以及一个“SQLite”数据库文件才能运行。我正在寻找一种方法来创建一个可执行文件或安装程序,它包括(或安装)这个版本的JRE和所需的库。 首先,我尝试了NetBeans本机打包程序,如https://NetBeans.org/kb/docs/java/native_pkg.html#fx所示,但

  • 问题内容: 我有一个使用eclipse ide编写的Java项目,我想在另一台机器上通过ssh运行它,但是我必须使用命令行来执行此操作,但我不知道该怎么做。 我是Shell命令和Java的初学者。 您能否给我一个有用的链接,其中包含有关此问题的答案,或者提供了有关如何执行此操作的固定说明? 问题答案: Maven或Ant是最好的选择,但是对于 仅Eclipse的 解决方案, 您可以选择 File-

  • 我一直在努力寻找一种干净的方法来处理gradle构建的模块化JavaFX项目(使用JDK11),它可以生成漂亮的可部署jlink图像,同时仍然能够在Eclipse IDE中执行JUnit测试。我有: 在src/main/java文件夹中,我的包中有一个JavaFX应用程序,与必要的信息模块一起。java文件 JUnit在src/test/java文件夹中的相应包中进行测试,该文件夹显然不包含信息模

  • 上一节我们简要介绍了如何编写一个单机的To Do应用,接下来要打包部署成可执行的应用,我们需要编译源代码,生成的class文件需要打包到JAR文件中。JDK提供了javac 和jar工具帮助你实现这些任务,但是你也不想每次源代码发生变化时你都手动去执行这些任务吧。 Gradle插件能够自动化完成这些任务,插件引入了一些领域特有的观念,其中一个Gradle插件就是java插件,Java插件不仅仅只有

  • 我有一个使用Maven、JPA和JavaFX的项目。我在maven中执行安装。一切都很顺利。但是当我运行jar文件时,我得到了带有异常的堆栈跟踪。 pom。xml 也是我的StackTrace 我在谷歌上搜索了这个问题,但没有找到对我有帮助的东西。 若我在引用DB的代码中注释了两行,那个么应用程序就会启动。好吧。我的应用程序找不到持久性类。我做错了什么?