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

尝试在Intellij上的JavaFX中使用maven制作胖jar时出错

丁书
2023-03-14

在本教程之后,我一直在尝试使用maven和maven-shade-plugin为我的JavaFX项目创建一个jar。https://www.youtube.com/watch?v=EyYb0GmtEX4.

我可以创建jar文件,但当我运行它时,它会给我一个错误:<代码>错误:无法找到或加载主类com。实例请工作。通用域名格式。实例请工作。Main\u 1

<代码>原因:java。lang.ClassNotFoundException:com。实例请工作。通用域名格式。实例请工作。Main\u 1

我已经尝试添加java——模块路径/路径/到/java fx libs/——添加模块javafx。控件,javafx。fxml MyMainClass到vm选项,但它只是将错误更改为错误:无法找到或加载主类Java。此外,我还有第二个主文件,它运行扩展应用程序的第一个主文件。

我正在使用IntelliJ,并通过IntelliJ与Maven的内置JavaFX项目创建了我的项目。我可以正常运行我的项目,它工作得很好,但当我尝试运行通过Maven的shade插件生成的shaded jar时,我会遇到这些错误。

这是我的第二个主文件

package com.example.pleasework;

public class Main_1 {
    public static void main(String[] args) {
        HelloApplication.main(args);
    }
}

这是我的第一个主文件

package com.example.pleasework;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloApplication extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 320, 240);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

这是我的pom.xml

<?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>com.example</groupId>
    <artifactId>PleaseWork</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>PleaseWork</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>11.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>11.0.2</version>
        </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>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.1.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.0.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.5.2</version>
        </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.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>com.example.pleasework/com.example.pleasework.Main_1</mainClass>
                            <launcher>app</launcher>
                            <jlinkZipName>app</jlinkZipName>
                            <jlinkImageName>app</jlinkImageName>
                            <noManPages>true</noManPages>
                            <stripDebug>true</stripDebug>
                            <noHeaderFiles>true</noHeaderFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-compile</id>
                        <configuration>
                            <compilerArgument>-proc:none</compilerArgument>
                            <includes>
                                <include>fun/n/learn/annotation/LogMeCustomAnnotationProcessor.java</include>
                                <!--include dependencies required for LogMeCustomAnnotationProcessor -->
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <shadedArtifactAttached>true</shadedArtifactAttached>
                            <transformers>
                                <transformer implementation=
                                                     "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.example.pleasework/com.example.pleasework.Main_1</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

共有1个答案

张岳
2023-03-14

错误消息指示您必须指定没有模块名称的主类。只需在那里使用完全限定的类名。完全限定的从不包含斜杠,因为它不是路径名。因此,在您的示例中,完全限定的类名包括周围的XML标记(主类在pom.XML中使用了两次,在这两种情况下都必须更正):

<mainClass>com.example.pleasework.Main_1</mainClass>

您可以自己构建完全限定的类名:使用您要引用的类的声明中的字符串,添加一个点,然后从类声明中写入类名,瞧,您就有了完全限定的类名。

 类似资料:
  • 我用intellij思想做了一个maven项目,但是当我将项目构建到jar时,jar中的manifest.mf不是我的,看起来像我的maven lib的manifest.mf

  • 我正在阅读有关C中线程的教程并测试了以下代码: 我试图使用gcc和g编译此代码,但我总是遇到编译错误。 使用gcc-pthread thread_test.c: /tmp/ccmpQLyp。o: 在函数std::cout'thread_test.cpp: 你能帮忙吗?我必须做些什么才能让这段代码在Linux和Windows上运行吗?

  • 我正在使用SBT(在IntelliJ IDEA中)构建一个简单的Scala项目。 我想知道什么是最简单的方法来建立一个Uber JAR文件(又名胖JAR,超级JAR)。 我当前使用的是SBT,但当我将JAR文件提交到Apache Spark时,我得到以下错误: 线程“main”java.lang.SecurityException中的异常:清单主属性的签名文件摘要无效 或在编译期间出现此错误: j

  • 我正在使用org.codehaus.mojo exec-maven-plugin通过我的pom.xml项目执行一个可执行的。jar文件。目前这不起作用,我不确定为什么。当我指定CommandLineArgs时会发生错误。 我的插件如下所示:

  • 我试图读取xsd文件以验证模式。 我的架构位于位置 我的类读取这个文件也在< code > x/y/z/read schema . Java 中 它们都装在我的罐子里。 我试图在中读取这个文件,如下所示,其中名称是但url返回为null? 我做错什么了吗?

  • 我已经安装了intellij,并且试图打开一个新的javafx,但是我无法运行它(即使是基本的默认的,应该只是打开一个简单的窗口)。我使用的是JDK11(我必须),所以我下载了javafx,就像本文中所说的那样: 错误:JavaFX运行时组件丢失,而使用JDK 11运行此应用程序需要JavaFX运行时组件 但我得到了这个错误 如果我试着在溶液中做这一行 然后在run->edit configura