it-swarm.com.de

Maven-Fehler: Hauptklasse konnte nicht gefunden oder geladen werden

Ich verwende ein Java-Maven-Programm und weiß nicht, was als <mainClass> einzugeben ist. Ich habe alle möglichen Dinge aus zahlreichenstackoverflow-Fragen ausprobiert .

Jedes Mal heißt es:

Maven Error: Could not find or load main class ...

Ich habe dies in meinen pom.xml geschrieben (minus dem ???)

  <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>

Wie behebe ich diese Fehler?

20
MLMLTL

Sofern Sie das 'maven-Assembly-Plugin' nicht aus anderen Gründen als zum Einstellen der Hauptklasse benötigen, können Sie das ' maven-jar-plugin ' - Plugin verwenden.

     <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>

Sie können das Plugin in der Praxis im ATLauncher sehen.

Das 'mainClass'-Element sollte auf die Klasse gesetzt werden, an der Sie den Einstiegspunkt in Ihr Programm haben, z.

package your.package.yourprogram;

public class YourMainClass {

    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
12
jamierocks

Ich habe diesen Fehler bekommen mit Maven und ich habe die Lösung gefunden.

Error: Could not find or load main class com.mycompany.testapifactory.Main

Ich verwende Java JDK Version 1.7 unter Linux, meine pom.xml-Datei war die von Netbeans generierte Standardeinstellung, und ich verwendete diese Befehle zum Kompilieren, die mit einer normalen Hallo-Welt-Java-Anwendung funktionieren:

mvn clean compile
Java -jar target/TestAPIFactory-1.0-SNAPSHOT.jar com.mycompany.testapifactory.Main

Was ist passiert:

Es stellte sich heraus, dass mein Problem darin bestand, dass meine Hauptmethode etwas Exotisches wie dieses erweitert hat:

public class Main extends SomeExoticLibraryClass{
    public static void main(String[] args){
        //...
    }
}

Diese Erweiterung der Hauptklasse hat den obigen Fehler verursacht.

TLDR-Lösung:

Stellen Sie sicher, dass Ihre Hauptklasse keine Drittanbieter-Klassen erweitert. Wandle die Leute in ihre eigenen Klassen um. Diese Fehlermeldung ist schrecklich und erfordert eine Beseitigung, um herauszufinden, was zu tun ist. 

9
Eric Leschinski

Ich bekam es auch, der Schlüssel war, den Ausgabeordner von bin in target\classes zu ändern. Es scheint, dass in Eclipse bei der Konvertierung eines Projekts in ein Maven-Projekt dieser Schritt nicht automatisch ausgeführt wird. Das Maven-Projekt sucht jedoch nicht nach der Hauptklasse basierend auf bin, sondern nach target\classes

1
WesternGun

Ich habe es auch bekommen, für mich wurde das Problem behoben, nachdem der m2-Ordner (C:\Users\Benutzername.m2) gelöscht und das Maven-Projekt aktualisiert wurde.

1

Als erstes würde ich vorschlagen, die korrekte Konfiguration für vordefinierte Deskriptoren zu verwenden .

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-Assembly-plugin</artifactId>
        <version>2.5.3</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        [...]
</project>

Um die Hauptklasse zu konfigurieren, müssen Sie das Paket und den Namen der Klasse, die Sie verwenden möchten, kennen, die im Parameter <mainClass>...</mainClass> angegeben werden soll.

Außerdem empfehle ich, die Verwendung von Maven 2 zu beenden und stattdessen zu Maven 3 zu wechseln .

1
khmarbaise

Ich habe diesen Fehler bekommen (classNotFoundException für die Hauptklasse), ich habe tatsächlich die pom-Version geändert, also habe maven erneut installiert und dann ist der Fehler verschwunden.

0
Priya

fügen Sie dies der Datei pom.xml hinzu:

<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>

und fügen Sie den Klassennamen Ihres Projekts (vollständiger Pfad) zusammen mit dem Paketnamen wie "com.packageName.className" hinzu, der aus der Hauptmethode besteht, die die "run" -Methode enthält . Und anstelle Ihres "??? " write $ {mainClass} die automatisch den Klassennamen erhält, den Sie oben angegeben haben.

Versuchen Sie dann den Befehl mvn clean install und mvn -jar "jar_file_name.jar" Server "yaml_file_name.yml"

Ich hoffe es funktioniert normal und der Server startet am angegebenen Port.

0
Abhishek Gupta

Für mich hatte das Problem nichts mit Maven zu tun, sondern mit der Art und Weise, wie ich die .jar leitete. Ich habe einen Code geschrieben und ihn als .jar bei Maven verpackt. Ich lief es mit

Java target/gs-maven-0.1.0.jar

und bekam den Fehler im OP. Eigentlich benötigen Sie die -jar-Option:

Java -jar target/gs-maven-0.1.0.jar
0
Jack M

geben Sie unter plugins die Position der Hauptklasse in pom an

<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

Bitte folgen Sie dem unten stehenden Ausschnitt .. es funktioniert ..

<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>

Bitte beachten Sie, dass Sie den vollständigen Klassennamen angeben müssen (Klassenname einschließlich Paketname ohne .Java oder .class) der Hauptklasse innerhalb <mainClass></mainClass> Etikett.

0
Sumit Karmakar