Hemos visto que teniamos muy atrasado el reloj de una máquina donde tenemos instalado Suse Linux.
La instrucción que hemos utilizado para cambiar la hora (nos ha costado mucho conseguirla) ha sido esta:
# date --set=1129 +%M%S
Con esa instrucción, hemos puesto la hora bien (en este caso, le hemos dicho al sistema que la nueva hora es las 11:29).
Un blog contando un poco de todo: informática, gestión de contenidos, redes sociales, etc.
jueves, 23 de octubre de 2008
ANT. Mantener numero de linea en compilados
Hemos utilizado ANT para compilar un proyecto Java, pero cuando hemos empezado a probar la aplicación, hemos visto que las excepciones que se generaban no incluian los numeros de linea justo en los módulos que habíamos escrito nosotros. Algo así como esto:
at com.vilt.Listener.process((Unknown Source))
at com.vignette....ion.getOne(Appli...java:253)
at com.vignette...Published(Deploy...java:57)
at com.vignette....nitialize(PageMen..java:153)
Finalmente, lo hemos resuelto modificando la tarea ANT de compilación, añadiendo varios parametros de compilación (en concreto debug y debuglevel) que por omisión no se utilizan. Las cosas han quedado así:
<javac sourcepath="" srcdir="src" destdir="release/classes" debug="on"
debuglevel="lines,vars,source">
</javac>
Con estos cambios, en las excepciones ya aparece el .java y el número de línea, lo cual ayuda mucho a diagnosticar mejor el problema.
at com.vilt.Listener.process((Unknown Source))
at com.vignette....ion.getOne(Appli...java:253)
at com.vignette...Published(Deploy...java:57)
at com.vignette....nitialize(PageMen..java:153)
Finalmente, lo hemos resuelto modificando la tarea ANT de compilación, añadiendo varios parametros de compilación (en concreto debug y debuglevel) que por omisión no se utilizan. Las cosas han quedado así:
<javac sourcepath="" srcdir="src" destdir="release/classes" debug="on"
debuglevel="lines,vars,source">
</javac>
Con estos cambios, en las excepciones ya aparece el .java y el número de línea, lo cual ayuda mucho a diagnosticar mejor el problema.
Multivalent - Uniendo PDFs
Recientemente, me he tenido que leer 15 PDFs pequeños, cada uno de ellos de 20 páginas. Como no me apetecía descargarlos individualmente a la PDA, he decidido unirlos, creando uno solo más grande.
¿Como lo he hecho?
He usado una pequeña utilidad java denominada Multivalent, la cual tiene muchas funcionalidades, y una de ellas es el tratamiento de documentos PDF.
Los pasos para utilizar esta herramienta son muy sencillos:
¿Como lo he hecho?
He usado una pequeña utilidad java denominada Multivalent, la cual tiene muchas funcionalidades, y una de ellas es el tratamiento de documentos PDF.
Los pasos para utilizar esta herramienta son muy sencillos:
- Se descarga la herramienta, la cual no es más que una librería JAR de un par de megas.
- Con un 'command prompt' nos posicionamos en el directorio donde tengamos los PDFs.
- Lanzamos la siguiente instruccion, la cual genera un único PDF que ya podemos descargar a la PDA (para leerlo por ejemplo con Repligo).
C:\dir> java -cp \tmp\Multivalent.jar tool.pdf.Merge *
Etiquetas:
Multivalent,
PDA,
PDF,
Repligo
miércoles, 15 de octubre de 2008
Buscando una clase entre decenas de librerias JAR
Todas las personas que llevamos un tiempo usando UNIX, conocemos la potencia de 'find' a la hora de buscar ficheros que cumplan ciertas caracteristicas y opcionalmente ejecutar operaciones sobre ellos.
En ocasiones, trabajando con Java, necesitamos encontrar una clase determinada, pero todo lo que tenemos para buscar es un directorio con decenas de librerias, pero no tenemos la menor idea de cual de las librerias contiene la clase en cuestion.
Una opcion es utilizar una instruccion de este tipo:
$ find . -name "*.jar" -exec jar tvf {} \; grep -i Logger
Este tipo de instrucciones, como mucho te puede decir si una clase se encuentra dentro de alguna de las librerias, pero lo que no te puede decir es en que libreria esta.
¿Como se soluciona esto?
Lo mas sencillo es crear una pequeña shell script como esta:
echo $1
jar tvf $1 grep -i $2
Si grabamos esta shell script por ejemplo en /tmp, podemos invocarla asi:
$ find . -name "*.jar" -exec /tmp/shell.sh {} Logger \;
De esta manera, la ejecución anterior nos daría esta salida, donde vemos que la clase Logger se encuentra bajo log4j.jar:
SDPM/lib/log4j.jar
Sep 14 2006 org/apache/log4j/Logger.class
Sep 14 2006 org/.../LoggerDynamicMBean.class
Sep 14 2006 org/.../log4j/spi/LoggerFactory.class
Sep 14 2006 org/.../spi/LoggerRepository.class
Sep 14 2006 org/apache/log4j/spi/RootLogger.class
SDPM/lib/tomcat-5.5.23/jsp-api.jar
SDPM/lib/tomcat-5.5.23/servlet-api.jar
SDPM/lib/vap 7.3/portlet.jar
SDPM_ALUI/lib/commons-beanutils.jar
SDPM_ALUI/lib/commons-collections.jar
SDPM_ALUI/lib/commons-digester-1.5.jar
SDPM_ALUI/lib/commons-logging.jar
En ocasiones, trabajando con Java, necesitamos encontrar una clase determinada, pero todo lo que tenemos para buscar es un directorio con decenas de librerias, pero no tenemos la menor idea de cual de las librerias contiene la clase en cuestion.
Una opcion es utilizar una instruccion de este tipo:
$ find . -name "*.jar" -exec jar tvf {} \; grep -i Logger
Este tipo de instrucciones, como mucho te puede decir si una clase se encuentra dentro de alguna de las librerias, pero lo que no te puede decir es en que libreria esta.
¿Como se soluciona esto?
Lo mas sencillo es crear una pequeña shell script como esta:
echo $1
jar tvf $1 grep -i $2
Si grabamos esta shell script por ejemplo en /tmp, podemos invocarla asi:
$ find . -name "*.jar" -exec /tmp/shell.sh {} Logger \;
De esta manera, la ejecución anterior nos daría esta salida, donde vemos que la clase Logger se encuentra bajo log4j.jar:
SDPM/lib/log4j.jar
Sep 14 2006 org/apache/log4j/Logger.class
Sep 14 2006 org/.../LoggerDynamicMBean.class
Sep 14 2006 org/.../log4j/spi/LoggerFactory.class
Sep 14 2006 org/.../spi/LoggerRepository.class
Sep 14 2006 org/apache/log4j/spi/RootLogger.class
SDPM/lib/tomcat-5.5.23/jsp-api.jar
SDPM/lib/tomcat-5.5.23/servlet-api.jar
SDPM/lib/vap 7.3/portlet.jar
SDPM_ALUI/lib/commons-beanutils.jar
SDPM_ALUI/lib/commons-collections.jar
SDPM_ALUI/lib/commons-digester-1.5.jar
SDPM_ALUI/lib/commons-logging.jar
Etiquetas:
find,
jar,
java,
shell script,
unix
Suscribirse a:
Entradas (Atom)