Problema al crear y ejecutar un archivo .jar

Compilé un proyecto Java en un contenedor, pero tengo algunos problemas al intentar ejecutarlo.

java -jar XMltoCSV.jar
Error: no se pudo encontrar o cargar la clase principal XMLtoCSV.class

He creado un archivo de manifiesto que contiene:

Clase principal: xmltocsv.XMLtoCSV

(hay un carácter de nueva línea en el archivo de texto manifiesto)

La clase XMLtoCSV. contiene el método main(). He estado ejecutando este código para crear el archivo jar:

jar cvf XMLtoCSV.jar Manifest.txt xmltocsv/*.class

Y sé que está funcionando porque obtengo:

jar cvfm XMLtoCSV.jar manifiesto.txt XMLtoCSV.clase
manifiesto añadido
agregando: XMLtoCSV.class (entrada = 4885) (salida = 2492) (desinflado 48%)

¿Por qué me da este error? Gracias de antemano por la ayuda.

Parece que también me encuentro con otro error, ¿qué significa?:

Excepción en el subproceso "principal" java.lang.UnsupportedClassVersionError: xmltocsv/XMLt oCSV: versión mayor.menor no admitida 51.0 en java.lang.ClassLoader.defineClass1 (método nativo) en java.lang.ClassLoader.defineClassCond (origen desconocido) en java. lang.ClassLoader.defineClass(Fuente desconocida) en java.security.SecureClassLoader.defineClass(Fuente desconocida) en java.net.URLClassLoader.defineClass(Fuente desconocida) en java.net.URLClassLoader.access$000(Fuente desconocida) en java.net .URLClassLoader$1.run(Fuente desconocida) en java.security.AccessController.doPrivileged(Método nativo) en java.net.URLClassLoader.findClass(Fuente desconocida) en java.lang.ClassLoader.loadClass(Fuente desconocida) en sun.misc. Launcher$AppClassLoader.loadClass(Fuente desconocida) en java.lang.ClassLoader.loadClass(Fuente desconocida) No se pudo encontrar la clase principal: xmltocsv.XMLtoCSV. Programa saldrá.

preguntado el 09 de marzo de 12 a las 15:03

el paquete de la clase XMLtoCSV es predeterminado? es decir, ausente? ¿Cuál es la primera línea de XMLtoCSV.java? -

la primera línea es paquete xmltocsv; -

3 Respuestas

Main-Class: XMLtoCSV.class

no está bien.

Tienes que especificar algo como:

Main-Class: com.mydomain.XMLtoCSV

es decir, el nombre completo de la clase.

Ver: http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

respondido 09 mar '12, 15:03

¿podría ser también Main-Class: MyPackage.MyClass? - shahab

Sí, el nombre totalmente calificado consta del paquete y el nombre de la clase: paquete.className. - Robert

Suelta el .class en su manifiesto.

Actualizar: ¿Qué es package de tu clase principal? Si su archivo Java contiene una declaración como

package com.google.common.base;

en la cima. Necesita ese paquete en su manifiesto. En tu caso sería:

Main-Class: com.google.common.base.XMLtoCSV

Si tu clase lo hace no tiene una declaración de paquete de este tipo, el error es otra cosa.

(Tenga en cuenta que com.google.common.basees solo un ejemplo, por supuesto).

respondido 09 mar '12, 16:03

tiene el paquete xmltocsv y lo cambió a Main-Class: xmltocsv.XMLtoCSV, que ahora se ejecutará en la carpeta que creé, pero cuando intento moverlo a otra ubicación (solo el .jar), me da el mismo problema: shahab

Para que un jar sea ejecutable, debe preocuparse por dos cosas en el archivo de manifiesto:

1- La entrada 'Clase principal' debe apuntar a la clase que iniciará la aplicación, es decir, la clase donde declaró el método principal para iniciar su aplicación.

2- Después de todas las entradas en el archivo de manifiesto, debe dejar tres líneas en blanco (nunca encontré una documentación que explique por qué es necesario, pero siempre funciona para mí).

El archivo MANIFEST más simple se vería así:

Manifest-Version: 1.0
Main-Class: com.foo.FOO

Solo recuerda dejar tres líneas en blanco después de la última entrada.

Espero haber ayudado.

Respondido 09 ago 13, 02:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.