java - attribute - No se pudo encontrar o cargar la clase principal con un archivo Jar
no main manifest attribute in jar (8)
Estoy intentando cargar un jar usando
@echo off
java -jar Test.jar
pause
Con el manifiesto de
Manifest-Version: 1.0
Main-Class: classes.TestClass
En el directorio Jar, puedo ver claramente un archivo classes / TestClass cuando lo extraigo.
Edit: classes.TestClass
tiene un public static void main(String[] args)
.
Deceleración del paquete en classes.TestClass
es package classes;
Pero sigo recibiendo el mensaje de error
Could not find or load main class classes.TestClass
He pasado por todo lo que he podido encontrar con este problema, y nada parece ayudar.
Intenté editar el classpath, rehacer el manifiesto, instalar el nuevo JRE.
¿Qué más debería estar haciendo?
1. Cree un archivo de texto calles Manifest.txt y proporcione el valor como
Clase principal: classes.TestClass
2. Cree el jar como
jar cfm test.jar Manifest.txt classes / *. class
3. Ejecuta el jar como
java -jar test.jar
Esto es muy difícil de depurar sin información completa.
Las dos cosas que parecen más probables en este punto son que el archivo en el contenedor no está almacenado en un directorio DENTRO DEL JAR, o que no es el archivo correcto.
Debe almacenar TestClass.class: algunas personas nuevas en esta tienda almacenan el archivo fuente, TestClass.java.
Y debe crear el archivo jar para que TestClass.class aparezca con una ruta de clases. Asegúrate de que no sea "/ classes". Use zip para mirar el archivo y asegúrese de que tenga una ruta de "clases".
Lo tengo trabajando así:
TestClass.Java
package classes;
public class TestClass {
public static void main(String[] args) {
System.out.println("Test");
}
}
Use javac
en la línea de comando para producir TestClass.class
. Coloque TestClass.class
en una carpeta classes/
.
MANIFEST.MF
Manifest-Version: 1.0
Main-Class: classes.TestClass
Entonces corre
jar cfM MANIFEST.MF test.jar classes/
Luego ejecútalo como
java -jar test.jar
Acabo de tener el mismo problema al final porque copié y pegué el código de la palabra y era un tipo de personaje ''-'' ligeramente diferente, eso es todo lo que puedo pensar, cuando lo escribí manualmente funcionó
java -cp "full-path-of-your-jar" Principal
ejecutar cualquier otra clase que tenga "public void main" en algún paquete,
java -cp "full-path-of-your-jar" package1.package2.packages-hierarchy.ClassHavingMain
Al menos, la forma en que hice esto es la siguiente:
Si tiene un árbol src anidado (digamos com.test.myclass.MyClass) y está compilando desde un directorio raíz, debe hacer lo siguiente:
1) cuando creas el archivo jar (por lo general, ponlo en un script): jar -cvfm my.jar com / test / myclass / manifest.txt com / test / myclass / MyClass.class
2) El manifiesto debería verse así:
Mainfest-versión: 1.0 Main-Class: com.test.myclass.MyClass Class-Path:. my.jar
3) Ahora puedes ejecutar el jar desde cualquier lugar como este:
java -jar my.jar
Espero que esto ayude a alguien
Sigo las siguientes instrucciones para crear un ejecutable .jar en Eclipse. Luego ejecute el comando "java -jar .jar" para iniciar el programa.
Se encarga de crear mainfest e incluir partes de archivos principales y de biblioteca para usted.
http://java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html
Tuve un problema similar que pude resolver otorgando el privilegio de ejecución para todas las carpetas principales en las que se encuentra el archivo jar (en un sistema Linux).
Ejemplo:
/folder1/folder2/folder3/executable.jar
las 3 carpetas (carpeta1, carpeta2 y carpeta3) así como también el ejecutable.jar necesitan privilegio de ejecución para el usuario actual; de lo contrario, se devuelve el error "No se pudo encontrar o cargar la clase principal ...".