FreeBSD 8 + debian con grub2

He decidido montar un servidor con arranque dual: debian linux y FreeBSD 8. He realizado la instalación básica de FreeBSD, sin gestor de arranque, y a continuacion la instalación de debian lenny, usando LVM para todas las particiones menos boot y swap. La instalación de debian tambien ha sido básica porque he migrado a testing inmediatamente. Tras instalar todo lo que necesito e actualizado a grub2 y he ahí la razón de esta entrada: no reconoce FreeBSD.

Para ello se edita el fichero /etc/grub.d/40_custom:


#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "FreeBSD 8.0-RELEASE AMD64" {
set root=(hd0,0)
chainloader +1
}

Una vez terminado se actualiza grub con el comando update-grub.

Publicada en Linux | Etiquetas , , , , | Dejar un comentario

Eclipse STS + maven2 no embebido

Recientemente he comenzado a utilizar la versión de Eclipse desarrollada por Spring Source, y me he encontrado con una serie de inconvenientes a la hora de usar maven2, como no poder añadir dependencias o plugins porque no se encuentran.

La solución que he encontrado consiste en dejar de usar la versión de maven embebida, y reemplazarla por la instalada en mi sistema. Para ello se accede al menú Window/Preferences/Maven/Installations y se añade el maven2 resisdente en mi sistema (en mi caso un debian squeeze):

/usr/share/maven2

Publicada en Linux, java | Etiquetas , , , , , , | Dejar un comentario

Gestión de entornos con usepackage en debian

Los que nos dedicamos al desarrollo software a veces necesitamos trabajar con diferentes entornos, i.e. diferentes versiones de Java, y la gestión asociada puede ser bastante engorrosa. Tradicionalmente se recomienda usar un enlace genérico que apunte al entorno específico.

El paquete usepackage viene en nuestra ayuda. En debian podemos instalarlo como

apt-get install usepackage

A continuación se escribe en los ficheros de configuración las variables de entorno a cargar según el entorno deseado. Va a usarse como caso práctico diferentes versiones de grails.

Editamos .bashrc para cargar use al inicio de sesión:

. /usr/share/usepackage/use.bsh

Se crea el fichero /etc/usepackage/grails.conf con el siguiente contenido:

# GRails 1.1.1
>> grails1.1.1: "Grails 1.1.1" <<
grails1.1.1 * * * * : GRAILS_HOME = /usr/local/grails-1.1.1,
PATH+= /usr/local/grails-1.1.1/bin;

# GRails 1.2.1
>> grails1.2.1: "Grails 1.2.1" <<
grails1.1.2 * * * * : GRAILS_HOME = /usr/local/grails-1.2.1,
PATH+= /usr/local/grails-1.2.1/bin;

Y finalmente creamos ~/.packages para insertar:

(include /etc/usepackage/grails.conf)

Refrescando la configuración (source .bashrc) y ejecutando use -l podremos ver los diferentes entornos disponibles, de los que nos interesan:

grails1.1.1 - Grails 1.1.1
grails1.2.1 - Grails 1.2.1

Y cargamos el deseado con use grails1.2.1 por ejemplo.

Publicada en Linux, java | Etiquetas , , , , , | Dejar un comentario

Importar un proyecto java en Eclipse

Puede parecer una entrada un poco tonta, pero lo cierto es que hay programadores que no lo tienen claro: el IDE es sólo una ayuda en el ciclo de desarrollo y no un fin en si mismo. Esto es, lo realmente importante es el código.

Me he decidido por esta entrada porque trabajo en un proyecto consistente en bastantes módulos, y como muchos desarrolladores han pasado por ahí, todos y cada uno ha dejado su granito de arena y un poco más (típicamente mierda). El caso es que desde la línea de comandos se puede compilar todo sin problemas, pero no todo el mundo quiere trabajar así.

El procedimiento es sencillo, se crea un nuevo proyecto Java (New Java Project) y se selecciona la opción Create project from existing source, apuntando al directorio que contiene todo el código, y que por buenas practicas hemos dejado en el workspace, no es plan de hacer copias innecesarias.

Comprobamos el entorno de ejecución, versión Java a usar, pulsamos siguiente o next para comprobar que se incluyen los directorios con los diferentes módulos y pinchamos sobre la pestaña de librerías para verificar que se han incluido. Si el proyecto tiene una estructura que se ajusta a las convenciones (src/main/java para el código, src/test/java para las pruebas, lib para las librerías y conf o src/resources para los ficheros de configuración) todo debería cargarse automáticamente, si no es así tocará añadirlo a mano y aprenderemos el valor de las convenciones.

Publicada en java | Etiquetas , , | Dejar un comentario

TestNG con maven

Para la realización de pruebas unitarias en Java el framework más utilizado es sin duda JUnit, que está soportado por maven, de hecho el arquetipo para una aplicación sencilla lo incluye como dependencia aunque sea como una versión antigua y siempre lo sustituya. Pero ha ganado popularidad TestNG, con lo que puestos a editar el fichero POM podemos sustituir JUnit por TestNG con el siguiente fragmento de código.

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>5.11</version>
    <classifier>jdk15</classifier>
    <scope>test</scope>
</dependency>
Publicada en java | Etiquetas , , , , , | Dejar un comentario

Vim como IDE

Aunque vim, un clónico del clásico editor vi, no puede compararse a la funcionalidad que proveen populares IDEs como Eclipse o Netbeans, tiene una serie de ventajas como su ligereza y el estar disponible en casi todos las distribuciones Linux o UNIX, y es este punto el que justifica esta entrada.

En determinados entornos no tenemos disponible un IDE o ni siquiera un entorno de ventanas, pero aún así se puede editar código Java. Primero hablemos de la configuración de Vim para numeración de líneas, identación de código con cuatro espacios y resalte la sintáxis.

set nu
set tabstop=4
syntax on

La anterior configuración debe añadirse al fichero .vimrc en nuestro directorio HOME de usuario. Los leguajes más populares están soportados, y de no ser así en la web de podemos encontrar los ficheros necesarios para otros lenguajes.

A pesar de que Vim es muy ligero, no es necesario editar, grabar y salir para compilar el código, con la secuencia “ESC + : + ! + comando” podemos invocar cualquier aplicación disponible:


:!ls

Recordamos que con “ESC” accedemos al modo comando de vi, mientras que pulsando la tecla “i” lo hacemos al de edición.

Para muestra un botón, el clásico Hola Mundo.


vi Hello.java

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Que puede compilarse y ejecutarse con los siguientes comandos.


:!javac Hello.java
:!java Hello

Con las anteriores instrucciones.

Publicada en Linux, java | Etiquetas , , , , , | Dejar un comentario

Maven plugins

Los plugins son los elementos que realmente hacen el trabajo en maven, típicamente las fases. El más importante: el compilador , que es el más usado, y que yo configuro para que trabaje con una determinada versión de java. Ver fragmento de pom.xml aquí.

Y otro que acabo de descubrir, el de recursos, que configuro para indicar la codificación por defecto y que la salida no sea dependiente de la plataforma donde se compila. Pero este plugin es interesante porque permite indicar la ubicación de recursos diferentes a la ruta por defecto (main/resources) lo que hace adecuado para portar proyectos existentes.

<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<encoding>utf-8</encoding>
</configuration>
</plugin>

Publicada en java | Etiquetas , , , | Dejar un comentario

grub2 in a partition

I enjoy using debian on my second generation macbook, and everything was working fine until my last system update, because I was unable to boot linux. I followed this guide to install it, and I use rEFIt to boot OS X and grub which boots linux. So grub is installed in a partition, /dev/sda3 in my case.

With previous updates grub2 was ready to replace grub in my current installation so I was surprised to see it was falling, till now :)

It seems when I tried to install it on the desired partition grub reported and error, but with the force option I succeed and now everything works.

grub-install --force /dev/sda3

Publicada en Linux | Etiquetas , , , , , | Dejar un comentario

Añadir repositorios para maven

Se debe añadir los repositorios a nuestro fichero de configuración, .m2/settings.xml, con el siguiente contenido:

<settings>
    <profiles>
        <profile>
            <id>standard-extra-repos</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>jboss</id>
                    <url>http://repository.jboss.com/maven2</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>jboss-snapshot</id>
                    <url>http://snapshots.jboss.org/maven2</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>jboss-plugins</id>
                    <url>http://repository.jboss.com/maven2</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
                <pluginRepository>
                    <id>jboss-snapshot-plugins</id>
                    <url>http://snapshots.jboss.org/maven2</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
</settings>

Como bien comentan en el post que he seguido, a mayor numero de repositorios más lento funcionará maven.

The developer corner

Publicada en java | Etiquetas , , , | Dejar un comentario

Proyecto simple de Java con maven2, junit 4 y log4j en Eclipse

Para crear un proyecto java sencillo con maven2 podemos hacer uso del arquetipo quickstart, pero tiene el problema de que no se ajusta exactamente a mi configuración: pues me gusta ya configurar desde el principio las pruebas con junit 4 y usar log4j en lugar de imprimir por pantalla.

Creado el proyecto editamos el fichero pom.xml para añadir las dependencias a junit 4, y no 3 como hace por defecto, y log4j. Tambien aprovecharemos para añadir el plugin de compilación y establecer la compatibilidad con java 1.6.

Para el plugin se inserta el siguiente fragmento.

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>

Mientras que para las dependencias será:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.8</version>
</dependency>
</dependencies>

Luego se crea el directorio src/main/resources que contendra el fichero de propiedades para log4j.properties.


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=App.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# set root log level
log4j.rootLogger=debug, stdout

La mayor parte de la configuración se puede hacer gráficamente, click derecho y seleccionando add dependency o add plugin sobre el proyecto de trabajo.

Publicada en java | Etiquetas , , , , | 1 Comentar