with plugin attribute java jar maven-2 manifest main

java - plugin - Error de Maven: no se pudo encontrar o cargar la clase principal



no main manifest attribute (8)

Estoy usando un programa Java Maven y no sé qué ingresar como <mainClass> . He intentado todo tipo de cosas basadas en numerous preguntas de stackoverflow , pero no están resolviendo el error.

Cada vez que dice:

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

Tengo esto escrito dentro de mi pom.xml (menos el ??? )

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

¿Cómo soluciono estos errores?


A menos que necesite el ''plugin de ensamblaje de maven'' por razones distintas a la configuración de mainClass, puede usar el maven-jar-plugin ''plugin de 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>

Puedes ver el plugin en la práctica en el ATLauncher .

El elemento ''mainClass'' debe establecerse en la clase en la que tiene el punto de entrada a su programa, por ejemplo:

package your.package.yourprogram; public class YourMainClass { public static void main(String[] args) { System.out.println("Hello World"); } }


Especifique la ubicación de la clase principal en pom bajo complementos

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


Lo primero que sugeriría es usar la configuración correcta para los descriptores predefinidos .

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

Para configurar la clase principal, debe conocer el paquete y el nombre de la clase que le gustaría usar, que debe incluirse en el <mainClass>...</mainClass> .

Además, recomiendo dejar de usar Maven 2 y mover a Maven 3 en su lugar .


Para mí, el problema no tenía nada que ver con Maven sino con cómo estaba ejecutando el .jar. Escribí un código y lo empaqueté como un .jar con Maven. Lo corri con

java target/gs-maven-0.1.0.jar

Y consiguió el error en el OP. En realidad necesitas la opción -jar :

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


También lo conseguí, la clave era cambiar la carpeta de salida de bin a target/classes . Parece que en Eclipse, al convertir un proyecto en un proyecto Maven, este paso no se realiza automáticamente, pero el proyecto Maven no buscará una clase principal basada en bin , sino que lo hará en target/classes .


También lo conseguí, para mí el problema se resolvió después de eliminar la carpeta m2 (C: / Users / username.m2) y actualizar el proyecto de Maven.


agrega esto a tu archivo 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>

y agregue el nombre de clase de su proyecto (ruta completa) junto con el nombre del paquete como "com.packageName.className", que consiste en el método principal que tiene el método "ejecutar". Y en lugar de tu "???" escriba $ {mainClass} que obtendrá automáticamente el nombre de clase que ha mencionado anteriormente.

Luego intente el comando mvn clean install y mvn -jar "jar_file_name.jar" server "yaml_file_name.yml"

Espero que funcione normalmente y que el servidor se inicie en el puerto especificado.


Recibí este error usando Maven, y descubrí la solución.

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

Estoy usando java JDK versión 1.7 en Linux, mi archivo pom.xml fue el predeterminado generado por Netbeans y estaba usando estos comandos para compilar, que funcionan bien con una aplicación java normal de hello-world:

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

Que pasó:

Resulta que mi problema era que mi método principal estaba extendiendo algo exótico como este:

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

Fue esta extensión de la clase principal la que causó el error anterior.

Solución TLDR:

Asegúrese de que su clase principal no esté extendiendo ninguna clase de terceros. Refactorizar aquellos fuera y lejos en sus propias clases. Ese mensaje de error es horrible, y requiere un proceso de eliminación para saber qué hacer.