我使用的是Java Maven程序而且我不知道输入<mainClass>
的内容。我已根据numerous stackoverflow 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>
如何修复这些错误?
答案 0 :(得分:13)
除非你需要&#39; maven-assembly-plugin&#39;除了设置mainClass之外的其他原因,您可以使用&#39; maven-jar-plugin&#39;插件。
<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。
中查看插件&#39; mainClass&#39; element应设置为您具有程序入口点的类,例如:
package your.package.yourprogram;
public class YourMainClass {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
答案 1 :(得分:10)
我收到此错误,我发现了解决方案。
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解决方案:
确保您的主要课程不会扩展任何第三方课程。把它们重新组合成自己的课程。该错误消息很糟糕,需要消除过程以找出要做的事情。
答案 2 :(得分:1)
我也得到了它,关键是将输出文件夹从bin
更改为target\classes
。似乎在Eclipse中,当将项目转换为Maven项目时,此步骤不会自动完成,但Maven项目不会基于bin
查找主类,而是查找target\classes
上的主类。
答案 3 :(得分:1)
我也明白了,对我来说,删除m2文件夹(C:\ Users \ username.m2)并更新maven项目后,问题得以解决。
答案 4 :(得分:0)
我建议的第一件事是使用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>
参数。
答案 5 :(得分:0)
在插件下的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>
答案 6 :(得分:0)
对我来说,问题与Maven无关,而与我运行.jar的方式有关。我编写了一些代码,并与Maven打包为.jar。我用
java target/gs-maven-0.1.0.jar
并在OP中得到错误。实际上,您需要使用-jar
选项:
java -jar target/gs-maven-0.1.0.jar
答案 7 :(得分:0)
将此添加到您的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全新安装命令和 mvn -jar“ jar_file_name.jar”服务器“ yaml_file_name.yml”
我希望它能正常工作,并且服务器将在指定的端口启动。
答案 8 :(得分:0)
我遇到了这个错误(主类为classNotFoundException),实际上我更改了pom版本,所以maven重新安装,然后错误消失了。
答案 9 :(得分:0)
请按照以下代码段进行操作。.
<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>
请注意,您必须在.java
标签内提供主类的完整分类类名(类名,包括没有.class
或<mainClass></mainClass>
的包名。)
答案 10 :(得分:0)
TLDR:检查pom.xml文件中的packaging
元素是否设置为jar
。
像这样-<packaging>jar</packaging>
。如果将其设置为pom
,即使在清理并生成项目后,您的目标文件夹也不会创建,并且Maven可执行文件将无法找到.class
文件(因为它们不存在),之后您会得到Error: Could not find or load main class your.package.name.MainClass
在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
答案 11 :(得分:0)
这对我有用。...
我在pom.xml的属性中添加了以下行
<properties>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
答案 12 :(得分:0)
对我来说,我加了
<packaging>jar</packaging>
并删除默认的 spring-boot-maven-plugin
<!-- remove this plugin
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin> -->
答案 13 :(得分:0)
在执行时添加 -Xdiag
选项。这是额外的“诊断”。这不会解决问题,但会添加更详细的错误消息和根本原因,以帮助确定问题。
答案 14 :(得分:0)
在极少数情况下,访问路径中的表情符号会导致此类错误。仔细检查您的目录名称,也许一个非标准字符很有趣!