web-dev-qa-db-fra.com

Erreur Maven: impossible de trouver ou de charger la classe principale

J'utilise un programme Java Maven et je ne sais pas quoi entrer en tant que <mainClass>. J'ai essayé toutes sortes de choses basées sur de nombreusesquestions de stackoverflow , mais elles ne résolvent pas l'erreur.

A chaque fois, il est écrit:

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

J'ai ceci écrit dans mon pom.xml (moins le ???)

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

Comment corriger ces erreurs?

20
MLMLTL

Sauf si vous avez besoin du "plug-in maven-Assembly" pour des raisons autres que le paramétrage de la classe principale, vous pouvez utiliser le plug-in " 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>

Vous pouvez voir le plugin en pratique dans le ATLauncher .

L'élément 'mainClass' doit être défini sur la classe dans laquelle vous avez le point d'entrée de votre programme, par exemple:

package your.package.yourprogram;

public class YourMainClass {

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

J'ai eu cette erreur en utilisant Maven, et j'ai découvert la solution.

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

J'utilise Java JDK version 1.7 sur Linux, mon fichier pom.xml était le fichier par défaut généré par Netbeans et j'utilisais ces commandes pour compiler, qui fonctionnent correctement avec une application Java normale:

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

Qu'est-il arrivé:

En fait, mon problème était que ma méthode principale étendait quelque chose d'exotique comme celui-ci:

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

C'est cette extension de la classe principale qui a causé l'erreur ci-dessus.

Solution TLDR:

Assurez-vous que votre classe principale ne prolonge aucune classe tierce. Recadrer ceux qui vont et viennent dans leurs propres classes. Ce message d'erreur est affreux et nécessite un processus d'élimination pour savoir quoi faire. 

9
Eric Leschinski

Je l’ai aussi, la clé était de changer le dossier de sortie de bin à target\classes. Il semble que dans Eclipse, lors de la conversion d'un projet en projet Maven, cette étape ne soit pas effectuée automatiquement, mais le projet Maven ne cherchera pas la classe principale basée sur bin, mais le target\classes

1
WesternGun

Je l’ai aussi, pour moi le problème a été résolu après la suppression du dossier m2 (C:\Utilisateurs\nomutilisateur.m2) et la mise à jour du projet maven.

1

La première chose que je suggérerais est d'utiliser la configuration correcte pour les descripteurs prédéfinis .

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

Pour configurer la classe principale, vous devez connaître le paquet et le nom de la classe que vous souhaitez utiliser, qui doivent être donnés dans le paramètre <mainClass>...</mainClass>.

En outre, je recommande de cesser d'utiliser Maven 2 et de passer à Maven 3 à la place .

1
khmarbaise

ajoutez ceci à votre fichier 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>

et ajoutez le nom de classe de votre projet (chemin complet) ainsi que le nom du package, tel que "com.packageName.className", qui consiste en la méthode principale ayant la méthode "run" ..... Et au lieu de votre "??? " write $ {mainClass} qui obtiendra automatiquement le nom de classe que vous avez mentionné ci-dessus.

Ensuite, essayez la commande mvn nouvelle installation et mvn -jar "nom_fichier_jar.jar" serveur "nom_fichier_aml.yml"

J'espère que cela fonctionnera normalement et que le serveur démarrera au port spécifié.

0
Abhishek Gupta

Pour moi, le problème n’était pas lié à Maven mais à la façon dont j’exécutais le .jar. J'ai écrit du code et l'ai empaqueté sous la forme d'un fichier .jar avec Maven. Je l'ai couru avec

Java target/gs-maven-0.1.0.jar

et a eu l'erreur dans l'OP. En fait, vous avez besoin de l'option -jar:

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

spécifier l'emplacement principal de la classe dans pom sous plugins

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