Me gustaría mostrar la marca de tiempo de cuando la aplicación fue compilada en un cuadro sobre. Esto me permitirá rastrear diferentes versiones de la aplicación. ¿Cómo puedo recuperar esta información en Java?Mostrar la marca de tiempo de compilación en una aplicación
Respuesta
Necesita decirle a su proceso de compilación que coloque la marca de tiempo en un archivo de propiedades de Java, desde donde su aplicación puede leerlo. Otra buena opción para ponerlo sería el archivo de manifiesto jar.
Para la hormiga, desea utilizar las tareas tstamp y property, consulte this for an example.
Mientras tanto, es posible que también desee incluir un número de revisión de control de fuente.
Además del archivo de propiedad, prefiero poner el número de compilación y el tiempo de compilación en una clase de versión como parte de la fuente y usar eso para informar. Los archivos de propiedades tienden a copiarse en nuevas instalaciones, lo que hace probable que se informe una versión incorrecta. (¡De esta forma, la aplicación puede registrar si el número de compilación en el archivo de propiedades! = El número de compilación incorporado). – rsp
Explíquelo explícitamente como un archivo. Solo leer las marcas de tiempo de los archivos se romperá si el archivo es, p. embalado más tarde. –
"Los archivos de propiedades tienden a copiarse en nuevas instalaciones, lo que hace probable que se informe de una versión incorrecta". Esos archivos deberían terminar dentro del archivo jar. Nadie se mete con ellos (y si lo hacen, ese es su problema). – Thilo
para Maven:
En pom.xml, agregue el siguiente
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>${basedir}/target/filter.properties</filter>
</filters>
usar Maven antRun plugin para generar el tiempo de construcción,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<mkdir dir="${project.build.directory}"/>
<tstamp>
<format property="last.updated"
pattern="yyyy-MM-dd hh:mm:ss"/>
</tstamp>
<echo file="${basedir}/target/
filter.properties" message="build.time=${last.updated}"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
asentando después del POM archivo para usar el archivo de manifiesto predeterminado
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<useDefaultManifestFile>true</useDefaultManifestFile>
<!--
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<addDefaultImplementationEntries>true
</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true
</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<Built-By>${user.name}</Built-By>
<Build-Jdk>${java.version}</Build-Jdk>
</manifestEntries>
</archive>
-->
</configuration>
</plugin>
Luego, MANIFEST.MF generado en el archivo jar se verá así.
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: admin
Build-Jdk: 1.5.0_14
Specification-Title: App Name
Specification-Version: 0.1 - 2008-02-21 01:03:13
Specification-Vendor: Company Name
Implementation-Title: App Name
Implementation-Version: 0.1 - 2008-02-21 01:03:13
Implementation-Vendor: Company Name
Build-Time: 2008-02-21 01:03:13
Recursos
para ANT
<?xml version="1.0"?>
<project name="tstamp" basedir="." default="jar">
<property name="src" value="src"/>
<property name="obj" value="obj"/>
<property name="jar" value="tstamp"/>
<target name="clean">
<delete file="${jar}.jar"/>
<delete dir="${obj}"/>
<delete dir="${doc}"/>
</target>
<target name="compile">
<javac srcdir="${src}" destdir="${obj}" source="1.4" debug="true"
deprecation="true" />
</target>
<target name="jar" depends="compile">
<tstamp/>
<jar jarfile="${jar}-${DSTAMP}${TSTAMP}.jar" compress="true">
<fileset dir="${obj}" includes="**/*"/>
<fileset dir="${src}" includes="**/*"/>
</jar>
</target>
</project>
The above build.xml outputs a jarfile named 'tstamp-200307011540.jar'
Recursos
Hay una solución experta mucho más simple que no requiere el plugin antRun. Maven tiene una variable especial maven.build.timestamp (desde Maven 2.1.0-M1).
<plugin>
<artifactId>maven-war-plugin</artifactId> <!-- or maven-jar-plugin -->
<version>2.2</version>
<configuration>
<archive>
<manifestEntries>
<Build-Time>${maven.build.timestamp}</Build-Time>
</manifestEntries>
</archive>
</configuration>
</plugin>
Esto producirá una línea "Build-Time: yyyyMMdd-HHmm". El formato se puede personalizar con:
<properties>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>
El patrón debe cumplir con el formato de SimpleDateFormat.
Referencia: Maven Documentation
Funciona para archivos jar también. ¡Bonito! – Snekse
¡Muy bien! Gracias –
Sugiero también https://stackoverflow.com/a/3403426/5580181 para leer el archivo –
normalmente siguen este enfoque alternativo para el manifiesto, ya que es de fácil acceso desde cualquier punto de nuestras aplicaciones.
package com.livngroup.sandbox;
import java.io.File;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;
import org.joda.time.DateTime;
public enum Versioning {
INSTANCE;
public final DateTime buildTime;
private Versioning() {
this.buildTime = this.getLastModifiedDate();
}
private DateTime getLastModifiedDate() {
try {
return new DateTime(this.getLastModifiedFile().lastModified());
} catch (Exception e) {
try {
URLConnection conn = Versioning.class.getResource(Versioning.class.getSimpleName()+".class").openConnection();
return new DateTime(conn.getLastModified());
} catch (Exception e2) {
return new DateTime(0L); //Just a fallback
}
}
}
private File getLastModifiedFile() {
try {
URL url = Versioning.class.getResource(Versioning.class.getSimpleName()+".class");
File dir = new File(url.toURI()).getParentFile().getParentFile().getParentFile().getParentFile().getParentFile();
//System.out.println("classes.dir: "+dir);
String[] extensions = null;
File lastModifiedFile = null;
for (Iterator<File> iterator = FileUtils.iterateFiles(dir, extensions, true); iterator.hasNext();) {
File file = iterator.next();
if(lastModifiedFile==null || FileUtils.isFileNewer(file, lastModifiedFile)) {
lastModifiedFile = file;
}
}
//System.out.println("lastModified: "+lastModified);
return lastModifiedFile;
} catch (Exception e) {
return null;
}
}
}
Obviamente, el tiempo de construcción a continuación, se puede acceder fácilmente como
Versioning.INSTANCE.buildTime
- 1. Constantes de tiempo de compilación flexible - Marca de tiempo
- 2. Cómo convertir una marca de tiempo de Unix en una marca de tiempo ISO8601 en PHP?
- 3. ¿Cómo formatear una marca de tiempo java.sql para mostrar?
- 4. ¿Cómo puedo mostrar una fecha formateada de una marca de tiempo de Unix en ramitas?
- 5. Obteniendo la marca de tiempo de compilación de una clase Java
- 6. Mostrar símbolo de marca en la etiqueta
- 7. Convirtiendo la marca de tiempo local a la marca de tiempo UTC en Java
- 8. ¿Muestra la marca de tiempo de la solicitud en Fiddler?
- 9. jQuery Hace tiempo de una marca de tiempo?
- 10. Convertir marca de tiempo en zonas horarias
- 11. Cambiar la marca de tiempo de una revisión de SVN
- 12. Eliminar parte del tiempo de una marca de tiempo
- 13. Agregando días a una marca de tiempo
- 14. Aplicación de anotaciones Java en tiempo de compilación
- 15. Obteniendo la marca de tiempo usando MySQL
- 16. archivos grep basados en la marca de tiempo
- 17. ¿Hay alguna forma de mostrar el tiempo de compilación de una solución completa en Visual Studio?
- 18. Campos de marca de tiempo en django
- 19. ASP.NET - mostrar la fecha/información de compilación de la aplicación en la parte inferior de la pantalla
- 20. Visual Studio 2008 Debug ¿Ventana para mostrar la marca de tiempo?
- 21. Lote: Marca de tiempo a UNIX Tiempo
- 22. ¿Cómo grafico solo la porción de tiempo de una marca de tiempo incluyendo una fecha?
- 23. Restablecer la parte de tiempo de una marca de tiempo en Java
- 24. ¿Cuál es la fórmula para calcular una marca de tiempo?
- 25. Creación de una marca de tiempo única en Java
- 26. ¿Convertir marca de tiempo hasta la fecha en Android?
- 27. MySQL marca de tiempo sólo en crear
- 28. Marca de tiempo personalizada en emacs orgmode
- 29. ¿Cómo comparar la marca de tiempo de SQL en .NET?
- 30. Envío de la marca de tiempo actual en CakePHP
que construyen herramienta que está utilizando? –
¿Hay alguna manera de hacer esto en el entorno de compilación de NetBeans? – jacknad
@JackN NB usa hormiga y maven. Depende de la herramienta de compilación que esté utilizando. en proyecto simple NB utiliza ANT así que sigue la solución dada para ant –