manifiesto - La clase principal de la aplicación Java no se encuentra en Ubuntu
no hay ningún atributo de manifiesto principal en war (1)
Después de pasar horas intentando cosas diferentes, finalmente descubrí cuál es el problema.
Ubuntu (y Raspbian) usan OpenJDK por defecto. El desarrollo de mi aplicación se realizó en Oracle Java 8.
Después de instalar Oracle JDK en Ubuntu funcionó en la primera vez.
No sé si esto es un comportamiento esperado. Tengo dos preguntas:
- ¿No debería OpenJDK tener los mismos parámetros al ejecutar un archivo Java?
- Si no, ¿no debería Gradle admitir OpenJDK?
Para completar mi solución, deseo publicar información sobre cómo instalar Oracle JDK 8 fácilmente en Ubuntu (15.10):
Usé el repositorio webupd8 que proporciona una forma automática de instalar Java 8 en Ubuntu (esto también es recomendado por Ubuntu / Canonical).
Nuestro PPA admite Ubuntu 15.04, 14.10, 14.04 y 12.04, así como Linux Mint 17.1, 17 y 13. Agregue el PPA e instale Oracle Java 8 (el paquete proporciona tanto JDK8 como JRE8) utilizando los siguientes comandos:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update sudo
apt-get install oracle-java8-installer
Consejo: si está detrás de un firewall / enrutador que bloquea algunos de los redireccionamientos necesarios para descargar el archivo Oracle Java, puede descargar el archivo JDK tar.gz manualmente y colocarlo en / var / cache / oracle-jdk8-installer - luego, la instalación del paquete "oracle-java8-installer" usará el archivo local en lugar de intentar descargarlo.
Una vez instalado, ejecutar "java -version" en un terminal debería generar algo como esto:
andrei@andrei-desktop:~$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
Estoy utilizando el complemento de aplicación Gradle para distribuir una aplicación Java para Windows y Ubuntu / Linux / Mac, etc.
Probé esto en Linux hace algunas semanas y funcionó perfectamente. Hoy mi clase principal no se encuentra en mis máquinas Linux. No puedo pensar en ningún cambio que haya hecho en la parte de Gradle, excepto la actualización de Gradle 2.0 a 2.12. No probé cada cambio en Linux porque normalmente trabajo en Windows.
El script por lotes para Windows funciona sin problemas, no muestra ningún mensaje de error. En Linux obtengo el mensaje clásico:
No se pudo encontrar o cargar la clase principal ...
¿Conoce algo que pueda causar este error en Linux pero no en Windows? Creo que Gradle debería construir ambos scripts exactamente de la misma manera y no necesito configurar nada especial para que funcione en Linux. Si mal no recuerdo, no he cambiado nada desde Updating Gradle, y estaba funcionando muy bien en Linux.
// I even changed it back to the old syntax.
//plugins {
// id ''java'' // or ''groovy'' Must be explicitly applied
// id ''application''
//}
apply plugin: ''java''
apply plugin: ''application''
repositories {
mavenCentral()
}
mainClassName = "controllers.Main"
Si necesita más información, no dude en preguntarme.
EDITAR
Y actualicé a IntelliJ 2016 (de la versión de los últimos años). No sé si esto es importante, pero creo que hicieron algunos cambios con Gradle.
EDIT 2
Acabo de probar esto en OSX, y funciona sin problemas. El problema es solo con Ubuntu y Raspbian.