Quiero acceder a información como la versión de implementación almacenada en el archivo jar. Esto parece funcionar bastante bien, en cualquier técnica pero siempre basado en el cargador de clases.
Si quiero probar en mi entorno maven, por supuesto que no puedo usar el complemento seguro, porque esto es antes de empaquetarlo en el contenedor. Por lo tanto, debo usar el complemento a prueba de fallas.
Pero entonces ninguna de las técnicas funciona, muy probablemente, debido a alguna magia oscura relacionada con los cargadores de clases.
La forma más sencilla de obtener la versión de implementación es simplemente
this.getClass().getPackage().getImplementationVersion() que se lee de META-INF/MANIFEST.MF en el contenedor que se parece a algo
Name: eu/simuline/octave/ Extension-name: eu.simuline.octave Specification-Version: 0.7 Implementation-Version: 0.7-SNAPSHOT Tal vez no se necesita la extensión, lo que se necesita es el nombre de la sección que se deriva del nombre del paquete de una manera obvia (la barra diagonal parece vital ;-)). Pero como se dijo, esto funciona solo en un contexto productivo, no dentro de las pruebas con un complemento a prueba de fallas. Luego, el código Java devuelve 0.7-SNAPSHOT , de lo contrario, simplemente devuelve null , lo que significa que, según los documentos de la API, la versión es desconocida... bueno.
¿Qué puedo hacer para incluir metainformación en las pruebas maven?
Investigué un poco sobre el complemento a prueba de fallas. Por ejemplo, correr con
mvn -X verifydesvela
INFO] --- maven-failsafe-plugin:3.0.0-M5:verify (run-tests) @ javaoctave --- [DEBUG] Configuring mojo org.apache.maven.plugins:maven-failsafe-plugin:3.0.0-M5:verify from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-failsafe-plugin:3.0.0-M5, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@277050dc] [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-failsafe-plugin:3.0.0-M5:verify' with basic configurator --> [DEBUG] (s) basedir = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave [DEBUG] (s) reportsDirectory = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/failsafe-reports [DEBUG] (f) session = org.apache.maven.execution.MavenSession@1416a80a [DEBUG] (s) skip = false [DEBUG] (f) summaryFile = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/failsafe-reports/failsafe-summary.xml [DEBUG] (s) testClassesDirectory = /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/test-classes [DEBUG] (s) testFailureIgnore = false [DEBUG] -- end configuration -- [DEBUG] Failsafe report directory: /home/ernst/OpenSource/OctaveInJavaGit/octaveInJava/javaoctave/target/failsafe-reports Tenga en cuenta el testClassesDirectory . Pensé que el complemento accede al jar creado en el paquete de fase de ciclo de vida anterior
pero obviamente esto no es cierto y parece que no hay forma de hacerlo. Por lo tanto, todas las cosas no funcionan.
Presenté una solicitud de función/mejora para arreglar eso.
No tengo idea si les gusta mi idea.