我的 Maven 项目有问题。该程序已经运行没有任何问题,但现在我无法再启动它。重要的是,用户只需双击该应用程序即可运行该应用程序,而不是使用命令“java -jar ...”。 我已将项目从 Java 16 更新到 Java 21,并自定义了一些 fxml 文件。 fxml 文件不应引起任何问题,因为这些纯粹是视觉调整。
不幸的是,我不确定其余的事情。所以这里是问题的简短描述。
如果我直接在Intellij中运行程序,没有问题并且程序启动。
如果我通过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项目并重新打包它。 我还检查了有关堆栈溢出的许多其他问题,但这些答案都无法解决我的问题。
如果我也在命令行中使用命令
运行 .jar,我会收到错误java .\vertragsmanager-1.0-SNAPSHOT.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 文件时,为什么还要这样做呢?)