关键词:
【中文标题】Maven 错误:无法找到或加载主类【英文标题】:Maven Error: Could not find or load main class 【发布时间】:2015-06-04 15:48:30 【问题描述】:我正在使用 Java Maven 程序,但我不知道应该输入什么作为 <mainClass>
。我已经尝试了基于 numerous *** questions 的各种事情,但它们并没有解决错误。
每次都说:
Maven Error: Could not find or load main class ...
我在我的pom.xml
里写了这个(减去???
)
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass> ??? </mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
如何修复这些错误?
【问题讨论】:
请出示完整的 pom 文件。 【参考方案1】:我在使用 Maven 时遇到了这个错误,我找到了解决方案。
Error: Could not find or load main class com.mycompany.testapifactory.Main
我在 Linux 上使用 java JDK 1.7 版,我的 pom.xml
文件是 Netbeans 生成的默认文件,我正在使用这些命令进行编译,这在普通的 hello-world java 应用程序中运行良好:
mvn clean compile
java -jar target/TestAPIFactory-1.0-SNAPSHOT.jar com.mycompany.testapifactory.Main
发生了什么:
原来我的问题是我的 Main 方法正在扩展 Exotic 的东西,像这样:
public class Main extends SomeExoticLibraryClass
public static void main(String[] args)
//...
正是这种对主类的扩展导致了上述错误。
TLDR 解决方案:
确保您的主课程没有扩展任何第 3 方课程。将它们重构到自己的类中。该错误消息很糟糕,需要消除过程才能找出要做什么。
【讨论】:
完美解决方案! 我的 JavaFX 项目扩展了 JavaFX 的 Application 类时遇到了这个问题。在删除扩展“修复”问题的同时,似乎使用 Oracle 的 JDK 来运行应用程序而不是我的 Linux 发行版附带的 OpenJDK 修复了它,而无需我更改代码。这可能与扩展类在启动时不可用/加载有关? 救了我一整天!谢谢@Eric 谢谢。很遗憾(对于我们的技术生态系统),我不得不阅读几十个答案才能找到这个。【参考方案2】:除非您出于设置 mainClass 以外的原因需要“maven-assembly-plugin”,否则您可以使用“maven-jar-plugin”插件。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<mainClass>your.package.yourprogram.YourMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
您可以在ATLauncher 中查看该插件的实践。
'mainClass' 元素应设置为您在程序中具有入口点的类,例如:
package your.package.yourprogram;
public class YourMainClass
public static void main(String[] args)
System.out.println("Hello World");
【讨论】:
【参考方案3】:对我来说,问题与 Maven 无关,而与我运行 .jar 的方式有关。我编写了一些代码并使用 Maven 将其打包为 .jar。我用它运行它
java target/gs-maven-0.1.0.jar
并在 OP 中得到错误。实际上你需要-jar
选项:
java -jar target/gs-maven-0.1.0.jar
【讨论】:
这应该为每个人修复Could not find or load main class
错误【参考方案4】:
请按照下面的sn-p..它有效..
<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>com.xyz</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>TestProject</name>
<description>Sample Project</description>
<dependencies>
<!-- mention your dependencies here -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<manifest>
<mainClass>com.xyz.ABC.</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
请注意,您必须在<mainClass></mainClass>
标签内提供主类的完整分类类名(类名包括包名,不包括.java
或.class
)。
【讨论】:
【参考方案5】:我也明白了,对我来说,删除 m2 文件夹 (C:\Users\username.m2) 并更新 maven 项目后问题得到解决。
【讨论】:
【参考方案6】:我也明白了,关键是将输出文件夹从bin
更改为target\classes
。似乎在Eclipse中,将项目转换为Maven项目时,这一步不是自动完成的,但是Maven项目不会根据bin
寻找主类,而是会在target\classes
上。
【讨论】:
【参考方案7】:在插件下的pom中指定主类位置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<mainClass>com.example.hadoop.wordCount.WordCountApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
【讨论】:
【参考方案8】:将此添加到您的 pom.xml 文件中:
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>sample.HelloWorldApplication</mainClass>
</transformer>
</transformers>
</configuration>
并添加项目的类名(完整路径)以及包名,如“com.packageName.className”,其中包含包含“run”方法的主方法。 而不是你的“???”写 $mainClass 会自动得到你上面提到的className。
然后尝试命令 mvn clean install 和 mvn -jar "jar_file_name.jar" server "yaml_file_name.yml"
希望它能正常工作,服务器会在指定的端口启动。
【讨论】:
【参考方案9】:我建议的第一件事是使用correct configuration for predefined descriptors。
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
[...]
</project>
要配置主类,您需要知道要使用的类的包和名称,应将其提供给<mainClass>...</mainClass>
参数。
另外我推荐给stop using Maven 2 and move to Maven 3 instead。
【讨论】:
【参考方案10】:我得到了这个错误(主类的classNotFoundException),我实际上改变了pom版本,所以maven再次安装然后错误消失了。
【讨论】:
【参考方案11】:TLDR : 检查 pom.xml 文件中的 packaging
元素是否设置为 jar
。
像这样 - <packaging>jar</packaging>
。如果它设置为pom
,即使在您清理和构建项目之后也不会创建您的目标文件夹,Maven 可执行文件将无法找到.class
文件(因为它们不存在),之后您会得到@ 987654327@
在Netbeans 8.2中创建Maven POM项目后,默认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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>myproject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
这里packaging
元素设置为pom
。因此,target
目录没有创建,因为我们没有启用 maven 将我们的应用程序打包为jar
文件。将其更改为jar
然后清理并构建您的项目,您应该会看到在根位置创建的目标目录。现在您应该可以使用 main 方法运行该 java 文件了。
当没有声明打包时,Maven 假定打包为jar
。其他核心封装值为pom
、war
、maven-plugin
、ejb
、ear
、rar
。这些定义了在该包的每个相应构建生命周期阶段执行的目标。查看更多here
【讨论】:
【参考方案12】:这对我有用....
我在 pom.xml 中的属性中添加了以下行
<properties>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
【讨论】:
【参考方案13】:对我来说,我添加了
<packaging>jar</packaging>
并删除了默认的 spring-boot-maven-plugin
<!-- remove this plugin
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin> -->
【讨论】:
【参考方案14】:在执行时添加-Xdiag
选项。这是额外的“诊断”。这不会解决问题,但会添加更详细的错误消息和根本原因,以帮助识别问题。
【讨论】:
【参考方案15】:在极少数情况下,访问路径中的表情符号会导致此类错误。仔细检查您的目录名称,也许一个非标准字符会很有趣!
【讨论】:
【参考方案16】:在我的情况下,我迟到了,是我使用的图像造成了麻烦
工作配置
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>$jib-maven-plugin.version</version>
<configuration>
<from>
<image>openjdk:11-jre-slim</image>
</from>
<to>
<image>$docker.image.prefix/$project.artifactId</image>
</to>
<container>
<mainClass>com.example.configserverApplication</mainClass>
<ports>
<port>8888</port>
</ports>
</container>
</configuration>
</plugin>
失败一个
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>$jib-maven-plugin.version</version>
<configuration>
<from>
<image>openjdk:alpine</image>
</from>
<to>
<image>$docker.image.prefix/$project.artifactId</image>
</to>
<container>
<mainClass>com.example.configserverApplication</mainClass>
<ports>
<port>8888</port>
</ports>
</container>
</configuration>
</plugin>
我的理解是这样的
“Alpine 的 OpenJDK 端口不在 OpenJDK 支持的版本中,因为它不在主线代码库中。它仅作为 OpenJDK Project Portola 的早期访问版本提供。另见此评论。所以这个图片遵循 OpenJDK 项目维护者提供的内容。”
https://hub.docker.com/_/openjdk
奇怪的是,它因一行错误而失败,并且更改图像为我修复了它。
【讨论】:
错误:无法找到或加载主类 Maven Spring Boot 应用程序 - 可执行 JAR
】错误:无法找到或加载主类MavenSpringBoot应用程序-可执行JAR【英文标题】:Error:CouldnotfindorloadmainclassMavenSpringBootApplication-ExecutableJAR【发布时间】:2020-03-2602:28:18【问题描述】:我正在尝试运行可执行jar,但收到以下消息:Couldno... 查看详情
运行maven-assembly创建的可执行jar:错误:无法找到或加载主类
错误原因:生成的jar包中没有主类的class文件。解决方案:在IDEA中,先build,然后在Terminal中执行mvnassembly:assembly。 查看详情
无法找到或加载主类 org.apache.maven.wrapper.MavenWrapperMain
】无法找到或加载主类org.apache.maven.wrapper.MavenWrapperMain【英文标题】:Couldnotfindorloadmainclassorg.apache.maven.wrapper.MavenWrapperMain【发布时间】:2018-10-1018:21:25【问题描述】:我在这里有一个SpringBoot项目:https://github.com/jcasbin/jcasbin-sprin... 查看详情
通过 gradle 构建后无法找到或加载主类
...的项目换成gradle。现在,之后:gradlebuild出现以下异常。错误:Error:Couldnotfindorloa 查看详情
Eclipse“错误:无法找到或加载主类”
】Eclipse“错误:无法找到或加载主类”【英文标题】:Eclipse"Error:Couldnotfindorloadmainclass"【发布时间】:2012-06-2910:52:06【问题描述】:我的笔记本电脑上有一个Eclipse项目,我将其推送到Githttps://github.com/chrisbramm/LastFM-History-... 查看详情
Xcode 构建失败:无法找到或加载主类
...正在尝试上传我的文件,它在我将xcode更新到12.5后显示此错误AppStoreConnect操作错误无法找到或加载主类Tucker.Library.Java.Extensions:.Library.Java.Extensions 查看详情
“错误:无法找到或加载主类”javafx终端
我正在使用JavaFX教程中的以下类:importjavafx.application.Application;importjavafx.stage.Stage;publicclassHelloFXAppextendsApplication{publicstaticvoidmain(String[]args){//LaunchtheJavaFXapplicationApplication.laun 查看详情
IntelliJ IDEA 错误:无法找到或加载主类 GradleStart
】IntelliJIDEA错误:无法找到或加载主类GradleStart【英文标题】:IntelliJIDEAError:CouldnotfindorloadmainclassGradleStart【发布时间】:2019-12-0707:20:55【问题描述】:当我尝试启动我的Minecraft客户端项目时,它出现Error:CouldnotfindorloadmainclassGradl... 查看详情
“无法找到或加载主类”从执行“mvn install”中生成的 JAR
...码生成JAR文件。它运行良好,类在jar文件中,但它给了我错误Error:Couldnotfi 查看详情
错误:无法找到或加载主类 sample.Main
】错误:无法找到或加载主类sample.Main【英文标题】:Error:Couldnotfindorloadmainclasssample.Main【发布时间】:2017-03-1403:30:14【问题描述】:我花了大约4个小时尝试解决此问题。没有任何效果。我正在使用Java、Intellij和JavaFX。我想做什... 查看详情
错误:无法找到或加载主类 com.example.pdfone.MainActivity
】错误:无法找到或加载主类com.example.pdfone.MainActivity【英文标题】:Error:Couldnotfindorloadmainclasscom.example.pdfone.MainActivity【发布时间】:2014-07-1318:01:30【问题描述】:我是android的新用户,我尝试使用itextjar文件查看pdf文件。我的代... 查看详情
Gradle - 无法找到或加载主类
...一个非常简单的项目,并在使用gradlewruncommand时遇到以下错误:couldnotfindorloadmainclass\'hello.HelloWorld\'这是我的文件结构:SpringTest-src-hello 查看详情
错误:无法找到或加载主类 –Xmx1G
】错误:无法找到或加载主类–Xmx1G【英文标题】:Error:Couldnotfindorloadmainclass–Xmx1G【发布时间】:2018-01-1110:18:37【问题描述】:这太疯狂了;有人见过这个吗?java–Xmx1G–Xms1G–XX:+UseG1GC-XX:+PerfDisableSharedMem-jarservice-1.0-SNAPSHOT.jarEr... 查看详情
Flutter 收到错误“错误:无法找到或加载主类 org.gradle.wrapper.GradleWrapperMain”
】Flutter收到错误“错误:无法找到或加载主类org.gradle.wrapper.GradleWrapperMain”【英文标题】:Fluttergeterror"Error:Couldnotfindorloadmainclassorg.gradle.wrapper.GradleWrapperMain"【发布时间】:2020-09-0305:28:28【问题描述】:我正在尝试运行... 查看详情
Gradle(包装器)+ STS + Spring Boot:错误:无法找到或加载主类 1.1,
】Gradle(包装器)+STS+SpringBoot:错误:无法找到或加载主类1.1,【英文标题】:Gradle(wrapper)+STS+SpringBoot:Error:Couldnotfindorloadmainclass1.1,【发布时间】:2018-12-1919:17:45【问题描述】:运行GradleTasks->application->bootRun时,许多项目中... 查看详情
错误:无法找到或加载主类 org.apache.ignite.startup.cmdline
】错误:无法找到或加载主类org.apache.ignite.startup.cmdline【英文标题】:Error:Couldnotfindorloadmainclassorg.apache.ignite.startup.cmdline【发布时间】:2018-05-0606:20:51【问题描述】:在谷歌云实例上安装apacheignite时,我收到了这个错误。我用谷... 查看详情
Gradle:“错误:无法找到或加载主类 Main”。通过 Gradle 构建后无法运行文件
】Gradle:“错误:无法找到或加载主类Main”。通过Gradle构建后无法运行文件【英文标题】:Gradle:"Error:CouldnotfindorloadmainclassMain".Can\'trunfileafterbuildviaGradle【发布时间】:2022-01-0505:55:08【问题描述】:堆栈溢出在使用Gradle构... 查看详情
颤振医生 --android-licenses 错误:无法找到或加载主类 Studio
】颤振医生--android-licenses错误:无法找到或加载主类Studio【英文标题】:flutterdoctor--android-licensesError:CouldnotfindorloadmainclassStudio【发布时间】:2021-06-0307:00:10【问题描述】:我已经尝试重新安装AndroidStudio、AndroidSDK、SDK的所有工具... 查看详情