我正在使用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>
我该如何解决这些错误?
除非你因为设置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");
}
}
请按照以下片段进行..它的工作原理..
<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>
的包名)。
我使用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解决方案:
确保您的主要课程没有扩展任何第三方课程。把它们重新组合成自己的课程。该错误消息很糟糕,需要消除过程以找出要做的事情。
我也得到了它,关键是将输出文件夹从bin
更改为target\classes
。似乎在Eclipse中,当将项目转换为Maven项目时,此步骤不会自动完成,但Maven项目不会查找基于bin
的主类,而是查找target\classes
。
我也得到了它,对我来说,删除m2文件夹(C:\ Users \ username.m2)并更新maven项目后问题得到了解决。
我建议的第一件事是使用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>
参数。
在插件下指定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>
对我来说,问题与Maven无关,而是与我如何运行.jar有关。我写了一些代码并将其打包为Maven的.jar。我跑了
java target/gs-maven-0.1.0.jar
并在OP中得到错误。实际上你需要-jar
选项:
java -jar target/gs-maven-0.1.0.jar
将其添加到您的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”
我希望它能正常工作,服务器将从指定的端口启动。
我得到了这个错误(主类的classNotFoundException),我实际上改变了pom版本,所以maven再次安装然后错误消失了。