Maven java.lang.ClassNotFoundException:无法找到或加载主类

问题描述 投票:0回答:1

我的 Maven 项目有问题。该程序已经运行没有任何问题,但现在我无法再启动它。重要的是,用户只需双击该应用程序即可运行该应用程序,而不是使用命令“java -jar ...”。 我已将项目从 Java 16 更新到 Java 21,并自定义了一些 fxml 文件。 fxml 文件不应引起任何问题,因为这些纯粹是视觉调整。

不幸的是,我不确定其余的事情。所以这里是问题的简短描述。

  1. 如果我直接在Intellij中运行程序,没有问题并且程序启动。

  2. 如果我通过maven包创建我的.jar,它在过去已经工作过。这是两种不同的行为。

a.如果我通过命令行“java -jar .ertragsmanager-1.0-SNAPSHOT.jar”启动.jar,一切正常。应用程序像在 Intellij 中一样启动。

b.如果我也在命令行中使用命令“java .ertragsmanager-1.0-SNAPSHOT.jar”运行 .jar,我会收到错误“java.lang.ClassNotFoundException:无法找到或加载主类”

我怀疑我的pom.xml有问题。因此我把它附在这里。正如你们可以想象的那样 - 主类是 GUIstarter.class。

<?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>de.XXX</groupId>
    <artifactId>vertragsmanager</artifactId>

    <version>1.0-SNAPSHOT</version>

    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.6.9.Final</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>21</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-swing</artifactId>
            <version>21</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>21</version>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>21</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>21</version>
            <classifier>win</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>21</version>
            <classifier>linux</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>21</version>
            <classifier>mac</classifier>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.5</version>
        </dependency>

        <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.doc</artifactId>
            <version>12.2.2</version>
        </dependency>


        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-web</artifactId>
            <version>17.0.2</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.5.0</version>

                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>de.XXX.vertragsmanager.bauvertrag.GUIStarter</Main-Class>
                                        <Build-Number>1.0.0</Build-Number>
                                        <SplashScreen-Image>images/SplashScreen.png</SplashScreen-Image>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
    </properties>

</project>

这是确切的错误(是德语 - 抱歉):

Fehler: Hauptklasse .\vertragsmanager-1.0-SNAPSHOT.jar konnte nicht gefunden oder geladen werden
Ursache: java.lang.ClassNotFoundException: /\vertragsmanager-1/0-SNAPSHOT/jar

提前非常感谢您!

我已经尝试清理maven项目并重新打包它。 我还检查了有关堆栈溢出的许多其他问题,但这些答案都无法解决我的问题。

java maven program-entry-point classnotfoundexception java-21
1个回答
0
投票

如果我也在命令行中使用命令

java .\vertragsmanager-1.0-SNAPSHOT.jar
运行 .jar,我会收到错误

"java.lang.ClassNotFoundException: Could not find or load main class"

您只是以错误的方式运行您的应用程序。这不是运行可执行 JAR 文件的方式。替代方案是:

java -jar path-to-jar-file

java -cp path-to-jar-file full-class-name

就您而言,后一种形式可能是

java -cp  .\vertragsmanager-1.0-SNAPSHOT.jar \
          de.XXX.vertragsmanager.bauvertrag.GUIStarter

(但是,当您已经费尽心思创建可执行 JAR 文件时,为什么还要这样做呢?)

© www.soinside.com 2019 - 2024. All rights reserved.