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.