Felix no comienza paquete

Hello World no está impreso en la consola, porque el jar que creaste no es realmente un paquete. Curiosamente, felix le permite iniciar un jar que no tiene ninguna información relacionada con OSGI en el manifiesto. No me queda claro qué significa comenzar un paquete así. Tal vez las clases se publiquen, tal vez no.

La mayoría de los frameworks java escanean los archivos en un jar y usan análisis de reflexión o código de bytes para encontrar clases relevantes. Para los marcos normales, la sobrecarga de los frascos de exploración se incurre solo una vez, al inicio. OSGI fue diseñado para ser liviano y también se usa en dispositivos móviles. Además, dado que los paquetes OSGI pueden ir y venir, diseñaron un enfoque más eficiente. Los paquetes OSGI almacenan los metadatos en el manifiesto. Este es un archivo de texto simple que siempre está en la misma ubicación (en el archivo jar): "META-INF / MANIFEST.MF". Si usa una herramienta zip para inspeccionar el archivo en el jar, debería ver algo como esto:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Peter Rader
Build-Jdk: 1.8.0_111

Para futuras soluciones de problemas de OSGI, le sugiero que inspeccione (y publique) el manifiesto que se crea.

Un manifiesto OSGI válido se vería así:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Peter Rader
Build-Jdk: 1.8.0_111
Bundle-Name: testa
Bundle-SymbolicName: testa.impl
Bundle-Version: 1.0.0
Bundle-Activator: testa.impl.Activator
Import-Package: org.osgi.framework

Cuando Felix lee este manifiesto, utiliza la entrada "Activador de paquete" para encontrar el activador (si lo hay). Reemplace el manifiesto y el paquete debe implementarse normalmente.
Simplemente cree un archivo de texto llamado "META-INF / MANIFEST.MF" que contenga el texto de arriba en una ubicación relativa al jar. Luego reemplace el archivo de manifiesto en el jar con el siguiente comando de Linux (o su herramienta zip favorita):

zip testa-0.0.1-SNAPSHOT.jar -u META-INF/*

salida esperada del comando zip:

updating: META-INF/MANIFEST.MF (deflated 36%)

Asegúrese de abrir el archivo jar con un archivo zip y verifique que el contenido haya cambiado. Ahora, si instala e inicia el paquete, debería imprimir "Hello World!".

Aunque esto soluciona el problema, no es una solución muy limpia.
La especificación jar tiene algunas reglas bastante extrañas, en cuanto a cómo deben formatearse las entradas en el manifiesto:
https://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Manifest_Specification
Más notablemente:

No line may be longer than 72 bytes (not characters), in its UTF8-encoded form.
If a value would make the initial line longer than this, 
it should be continued on extra lines (each starting with a single SPACE).

Por lo tanto, no desea editar este archivo a mano. Como han comentado otros, tiene varias opciones para generar un manifiesto OSGI automáticamente. Como antes, puede verificar el manifiesto en el jar generado para verificar que se está generando correctamente.

Respuesta 1

Estoy reiniciando la variable miembro de una clase local y obtengo un error de compilación. ¿Que esta mal aquí? ¿Por qué esto no se compila? ¡Gracias! Esto no compilará la clase pública TestSomething {...

Quiero hacer el cifrado / descifrado AES 256 usando Java y .Net. Lo que significa que debería poder cifrar con Java y descifrar con .Net y Vice Vesra. El siguiente es el cifrado Java AES 256. ...

No puedo arreglar: "R no puede resolverse a una variable" He intentado limpiar, construir, he eliminado y me he asegurado de que faltan las importaciones de "java.R" o lo que sea, pero TODAVÍA parece que no puedo aplastar ...

Recibo el siguiente error al intentar ejecutar mi archivo jar en la línea de comando: $ java -jar target / Controller-0.0.1-SNAPSHOT.jar Excepción en el hilo "main" java.lang.NoClassDefFoundError: org / .. .