亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了無法運(yùn)行JavaFX.jar文件(出現(xiàn)許多錯誤)的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

為我的JavaFX程序創(chuàng)建.jar文件時遇到問題。

重要信息:

JavaFX版本:17

Java版本:17

IDE:IntelliJ

Project使用Maven

……………………………………………………………………………………………………………………………………………………………………………………………………………………..

文件結(jié)構(gòu):

模塊文件:

module A_DevicesInfoCardsManager {
    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.graphics;
    requires java.sql;
    
    opens application to javafx.graphics, javafx.fxml, javafx.base, javafx.controls,java.sql;
}

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>application</groupId>
    <artifactId>DevicesInfoCards</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>DevicesInfoCards</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>5.8.1</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>17.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>17.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-web</artifactId>
            <version>17.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.controlsfx</groupId>
            <artifactId>controlsfx</artifactId>
            <version>11.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.dlsc.formsfx</groupId>
            <artifactId>formsfx-core</artifactId>
            <version>11.3.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.openjfx</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>net.synedra</groupId>
            <artifactId>validatorfx</artifactId>
            <version>0.1.13</version>
            <exclusions>
                <exclusion>
                    <groupId>org.openjfx</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.kordamp.ikonli</groupId>
            <artifactId>ikonli-javafx</artifactId>
            <version>12.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.kordamp.bootstrapfx</groupId>
            <artifactId>bootstrapfx-core</artifactId>
            <version>0.4.0</version>
        </dependency>
        <dependency>
            <groupId>eu.hansolo</groupId>
            <artifactId>tilesfx</artifactId>
            <version>11.48</version>
            <exclusions>
                <exclusion>
                    <groupId>org.openjfx</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.8</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running with: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                            <mainClass>application/application.Main
                            </mainClass>
                            <launcher>app</launcher>
                            <jlinkZipName>app</jlinkZipName>
                            <jlinkImageName>app</jlinkImageName>
                            <noManPages>true</noManPages>
                            <stripDebug>true</stripDebug>
                            <noHeaderFiles>true</noHeaderFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

我創(chuàng)建了一個JAR,如下所示:

當(dāng)我這樣運(yùn)行JAR時:

我收到以下錯誤:

Error: JavaFX runtime components are missing, and are required to run this application

當(dāng)我從終端使用命令 java --module-path C:UsersaenasDesktopjavafx-sdk-17.0.1 --add-modules javafx.fxml,javafx.graphics,java.sql -jar DevicesInfoCards.jar

運(yùn)行它時

我收到以下錯誤

Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.graphics not found

當(dāng)我嘗試以下命令時:

 java --module-path C:UsersaenasDesktopjavafx-sdk-17.0.1 -jar DevicesInfoCards.jar

我收到以下錯誤

Error: LinkageError occurred while loading main class application.Main
        java.lang.UnsupportedClassVersionError: application/Main has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

我在SO中看了很多教程和答案,但我沒有得到任何新的東西。

解決方案之一是將以下內(nèi)容添加到POM文件中:

<packaging>jar </packaging>


            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>application.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

我無法解決最后一個錯誤,雖然我確實(shí)使用Java 11編譯了該程序,但同樣的錯誤也出現(xiàn)了。

我這樣做了(將代碼添加到POM文件),但我也收到了以下錯誤:

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

我還嘗試使用Main方法創(chuàng)建一個新類,并讓它調(diào)用MainCless,但這不起作用,我得到了以下錯誤:

no main manifest attribute, in C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_MavenoutartifactsDevicesHistoryCards_Maven_jarDevicesHistoryCards_Maven.jar

Process finished with exit code 1

盡管我已將POM文件中的所有<mainclass></mainclass>teg更改為正確的新主類,但仍收到相同的錯誤。

提前感謝您的幫助;

更新

我所做的是刪除了模塊信息文件,刪除了POM文件中的所有JavaFX依賴項(xiàng),所以我的POM現(xiàn)在看起來是這樣的:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>application</groupId>
    <artifactId>DevicesHistoryCards_Maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>DevicesHistoryCards_Maven</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>5.8.1</junit.version>
    </properties>

    <dependencies>





        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>



            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>application.MainLauncher</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.8</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running with: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                            <mainClass>
                                application.MainLauncher
                            </mainClass>
                            <launcher>app</launcher>
                            <jlinkZipName>app</jlinkZipName>
                            <jlinkImageName>app</jlinkImageName>
                            <noManPages>true</noManPages>
                            <stripDebug>true</stripDebug>
                            <noHeaderFiles>true</noHeaderFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

當(dāng)我運(yùn)行mvn package時,得到以下輸出:

PS C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_Maven2> mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< application:DevicesHistoryCards_Maven >----------------
[INFO] Building DevicesHistoryCards_Maven 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ DevicesHistoryCards_Maven ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 6 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ DevicesHistoryCards_Maven ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ DevicesHistoryCards_Maven ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_Maven2src	estesources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ DevicesHistoryCards_Maven ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ DevicesHistoryCards_Maven ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ DevicesHistoryCards_Maven ---
[INFO]
[INFO] --- maven-shade-plugin:3.2.4:shade (default) @ DevicesHistoryCards_Maven ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_Maven2	argetDevicesHistoryCards_Maven-1.0-SNAPSHOT.jar with C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_Maven2	argetDevicesHistoryCards_Maven-1.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.692 s
[INFO] Finished at: 2022-02-17T13:40:42+03:00
[INFO] ------------------------------------------------------------------------

但是,當(dāng)我運(yùn)行java -jar DevicesHistoryCards_Maven2.jar時,我得到了以下信息:
Error: Unable to access jarfile DevicesHistoryCards_Maven.jar

為什么我無法訪問它?它是在哪里創(chuàng)建的?

推薦答案

此答案為打包和分發(fā)您的應(yīng)用程序提供了兩種替代方案,一種(不推薦創(chuàng)建FAT JAR文件),另一種(使用JLINK或JPackage)。

相關(guān)問題

我認(rèn)為這個問題的核心是:

Maven Shade JavaFX runtime components are missing

因?yàn)椋缭诟北局幸粯樱牵?/p>

    使用Maven。
    使用JavaFX。
    希望創(chuàng)建可執(zhí)行JAR。

但是,我已經(jīng)添加了一個答案,列出了您必須在項(xiàng)目中進(jìn)行更改才能使其正常工作的特定內(nèi)容。

不推薦使用胖罐子

創(chuàng)建FAT JAR不是當(dāng)前支持的打包JavaFX應(yīng)用程序的方法。

openjfx.io project提供了帶有JavaFX的FAT JAR的模板。

pom.xml project file在此。

如果不清楚下面的步驟,請研究有關(guān)JavaFX和示例Openjfx.io項(xiàng)目的maven shading的鏈接問題。

將您的項(xiàng)目轉(zhuǎn)換為可以打包為胖罐子的步驟:

    在pom.xml文件中定義您的應(yīng)用程序所需的所有JavaFX依賴項(xiàng)。

    Maven將傳遞地導(dǎo)入,因此您不需要直接依賴于低級別的構(gòu)件,如JavaFX-base,只需要較高級別的構(gòu)件,如JavaFX-Controls和JavaFX-fxml(如果您使用它的話)。

    它應(yīng)該是一個非模塊化項(xiàng)目(刪除您的模塊-info.java)

    它需要單獨(dú)的launcher class(創(chuàng)建一個)

    它需要使用maven shade插件合并JAR(使用該插件)

    若要使其跨平臺,您需要提供分類依賴項(xiàng)(添加它們)

    要支持M1 Mac,您需要

    一個額外的分類器依賴項(xiàng)mac-aarch64(添加)
    JavaFX 17.0.2+(升級到該版本)。

    您需要使用Maven依賴項(xiàng),而不是JavaFX SDK(您可以刪除SDK)。

    maven項(xiàng)目與SDK附帶的JAR不同。
    maven項(xiàng)目包括本機(jī)代碼,而SDK中的JAR不包括,本機(jī)代碼在SDK分發(fā)版中的單獨(dú)本機(jī)庫文件中提供。
    通過單獨(dú)的下載,您可以獲得包含Java代碼和本機(jī)代碼的jmod文件,但這些文件與Maven shade進(jìn)程不兼容,可以用于jlink進(jìn)程(就像maven構(gòu)件一樣)。

    使用transformer in the shade plugin指定主類,而不是使用maven-jar-plugin(您應(yīng)該刪除maven-jar-plugin部分)。

    使用mvn package打包應(yīng)用程序,不要使用IDE中的內(nèi)置項(xiàng)目生成器

    請勿使用IDEA或Eclipse項(xiàng)目生成系統(tǒng)。
    IDE項(xiàng)目生成系統(tǒng)當(dāng)前不支持正確生成包含JavaFX運(yùn)行時組件的可執(zhí)行JAR,它們將生成項(xiàng)目,但如果您嘗試執(zhí)行它們,它們將顯示錯誤。

    mvn package步驟將生成警告,但它可能仍然有效:

     [WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
    

    要運(yùn)行,只需使用以下命令,不使用其他命令:

    java -jar <yourjar>.jar
    

    這假設(shè)用戶已正確:

    安裝了兼容的JRE版本。
    已將系統(tǒng)路徑配置為包括包含相應(yīng)java二進(jìn)制文件的目錄。
    用戶的當(dāng)前目錄是包含陰影JAR的目錄。

    執(zhí)行步驟將生成警告,但它可能仍會工作:

    WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @14c24f4c'
    

    不再為任何內(nèi)容指定指向JavaFX SDK的路徑,不再需要它來支持此開發(fā)管道。

    不要指定模塊路徑,因?yàn)槟皇窃陬惵窂?即JAR文件)之外運(yùn)行應(yīng)用程序及其依賴項(xiàng)。

    只有核心JRE在模塊路徑上,這是隱式的,因?yàn)楹诵腏RE類在JRE模塊啟動路徑上。

    您正在編譯Java 17到Java 17字節(jié)碼(您的maven編譯器插件的源代碼和目標(biāo)是17)

    因此您必須在Java 17+版本上運(yùn)行它,否則它將不起作用,您將收到字節(jié)代碼錯誤。

我可能漏掉了一個步驟,但是,如果我沒有漏掉一個步驟,而您做到了所有這些,那么它將適用于JRE/JavaFX 17.0.2。生成的JAR可以在兼容平臺上使用兼容的預(yù)安裝JRE執(zhí)行。

推薦方法:jlink或jPackage

建議構(gòu)建jlink鏡像:

    使用JavaFX-maven-pluginmvn javafx:jlink命令

    通過設(shè)置JavaFX-maven-plugin的jlinkZipName參數(shù)將其匯編為壓縮包。
    確保您擁有完全模塊化的應(yīng)用程序:

    在您的應(yīng)用程序中定義module-info.java文件。
    確保您的所有依賴項(xiàng)也定義了module-info.java文件。

    若要運(yùn)行,請解壓縮壓縮包并使用jlink創(chuàng)建的啟動腳本。

或者,您可以使用jpackage創(chuàng)建本機(jī)安裝程序,例如:

JPackageScriptFX對于非模塊化應(yīng)用,

用于模塊化應(yīng)用的Akmanjpackage-maven-plugin。

使用jlink或jPackage創(chuàng)建發(fā)行版是受支持的配置。對于開發(fā)人員來說,創(chuàng)建jlink圖像比創(chuàng)建FAT JAR更容易、更可靠。

應(yīng)用程序的用戶可以更輕松、更可靠地使用應(yīng)用程序,因?yàn)槌四膽?yīng)用程序之外,他們不需要獲取和安裝兼容的Java運(yùn)行時。

外部包裝資源

有關(guān)包裝的詳細(xì)信息,請參閱:

Stackoverflow JavaFX tag wiki
openjfx.io Runtime image documentation
How to create a standalone .exe in Java (that runs without an installer and a JRE)

常見問題

已從POM文件中刪除所有JavaFX依賴項(xiàng)

不要這樣做,請?jiān)趐om.xml文件中包含您的應(yīng)用程序使用的JavaFX依賴項(xiàng)(以及任何必需的第三方依賴項(xiàng))。

您不需要包括不使用的JavaFX依賴項(xiàng)

您不需要顯式列出將傳遞導(dǎo)入的依賴項(xiàng),例如JavaFX-base。

其中是命令mvn package創(chuàng)建的.jar文件

當(dāng)您運(yùn)行程序包步驟時,這將列在日志文件中:

Replacing C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_Maven2	argetDevicesHistoryCards_Maven-1.0-SNAPSHOT.jar with C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_Maven2	argetDevicesHistoryCards_Maven-1.0-SNAPSHOT-shaded.jar

它同時創(chuàng)建陰影JAR和未陰影JAR,然后將未陰影JAR替換為陰影JAR。

要查看JAR文件的內(nèi)容,可以運(yùn)行:

jar tvf <your-jar-file>.jar

在您的示例中:

cd C:UsersaenasIdeaProjectsdemo2DevicesHistoryCards_Maven2	arget
jar tvf DevicesHistoryCards_Maven-1.0-SNAPSHOT.jar

里面會有很多東西。JAR將包括您的應(yīng)用程序代碼、來自您的依賴庫的所有代碼、所有JavaFX Java代碼以及您在pom.xml中為匹配目標(biāo)分發(fā)平臺而定義的分類的JavaFX依賴項(xiàng)的JavaFX本機(jī)代碼(例如,Windows DLL)。

如果您使用openjfx fat jar sample pom.xml中的陰影定義,它將使用陰影JAR的分類器并將其輸出到單獨(dú)的目錄中,因此陰影JAR不會覆蓋目標(biāo)JAR,而是在<project directory>/shade文件夾中創(chuàng)建一個單獨(dú)的JAR。

如果您不想使用陰影JAR的分類器,則不需要這樣做。

有關(guān)詳細(xì)信息,請參閱:

attaching the shaded artifact

默認(rèn)情況下,插件將用陰影構(gòu)件替換項(xiàng)目的主構(gòu)件。如果原始構(gòu)件和著色構(gòu)件都應(yīng)該安裝/部署到存儲庫中,則可以配置插件以將著色構(gòu)件附加為輔助構(gòu)件

克隆OpenJFX示例項(xiàng)目以驗(yàn)證您的環(huán)境

如果您仍然有問題,請從git克隆openjfx sample project并嘗試生成它,以確保在使用已知良好的項(xiàng)目時,您可以在您的環(huán)境中正確運(yùn)行該打包。

這篇關(guān)于無法運(yùn)行JavaFX.jar文件(出現(xiàn)許多錯誤)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標(biāo)簽:JAR JavaFX 文件 運(yùn)行 錯誤
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定