Maven错误:无法找到或加载主类

问题描述 投票:24回答:10

我正在使用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>

我该如何解决这些错误?

java jar maven-2 manifest main
10个回答
14
投票

除非你因为设置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");
    }
}

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>的包名)。


11
投票

我使用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解决方案:

确保您的主要课程没有扩展任何第三方课程。把它们重新组合成自己的课程。该错误消息很糟糕,需要消除过程以找出要做的事情。


1
投票

我也得到了它,关键是将输出文件夹从bin更改为target\classes。似乎在Eclipse中,当将项目转换为Maven项目时,此步骤不会自动完成,但Maven项目不会查找基于bin的主类,而是查找target\classes


1
投票

我也得到了它,对我来说,删除m2文件夹(C:\ Users \ username.m2)并更新maven项目后问题得到了解决。


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>参数。

此外,我建议stop using Maven 2 and move to Maven 3 instead


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>

0
投票

对我来说,问题与Maven无关,而是与我如何运行.jar有关。我写了一些代码并将其打包为Maven的.jar。我跑了

java target/gs-maven-0.1.0.jar

并在OP中得到错误。实际上你需要-jar选项:

java -jar target/gs-maven-0.1.0.jar

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 clean install和mvn -jar“jar_file_name.jar”server“yaml_file_name.yml”

我希望它能正常工作,服务器将从指定的端口启动。


0
投票

我得到了这个错误(主类的classNotFoundException),我实际上改变了pom版本,所以maven再次安装然后错误消失了。

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