martes, 11 de agosto de 2009

Instalando Sonar usando MySQL en Tomcat 6

Sonar es una herramienta para administrar la calidad del código fuente en Java la cual se basa en otras herramientas de análisis como findbugs, PMD, cobertura, checkstyles, etc. Esta herramienta se encarga de recolectar los resultados de los diferentes análisis y los guarda en un histórico lo cual permite ver la evolución de un proyecto en el tiempo. 

La instalación por defecto de Sonar es muy sencilla, solo se debe descomprimir el instalador en formato zip y ejecutar el script asociado a la plataforma que se encuentra en la carpeta bin. La base de datos usada por la aplicación por defecto es Derby, aunque el equipo técnico de Sonar recomiendan usar otra BD para ambientes que no sean de pruebas. 

En este articulo voy a describir los pasos necesarios para instalarla en Tomcat usando como base de datos MySQL.

A continuación detallo los pasos a realizar:

Lo primero es crear la base de datos en MySQL y asignar los privilegios de acceso al usuario sonar (o cualquiera que se desee usar). Las tablas son creadas cuando se arranca la aplicación por primera vez



mysql -u root -p

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on sonar.* to 'sonar'@'localhost' identified by 'password';
flush privileges;


El siguiente paso consiste en configurar Sonar. Para eso lo primero que hay que hacer es descomprimir en un directorio temporal el instalador. Luego buscamos el archivo sonar.properties en la carpeta conf y editamos los parámetros de conexión a la bd.



Se comenta la configuración de la bd Derby



#sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true
#sonar.jdbc.driverClassName: org.apache.derby.jdbc.ClientDriver
#sonar.jdbc.validationQuery: values(1)


Y se des-comenta y se ajustan los parámetros de MySQL



sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
sonar.jdbc.validationQuery: select 1


sonar.jdbc.username: sonar
sonar.jdbc.password: password

El siguiente paso es la creación del war. Para eso debemos cambiarnos al directorio war dentro de la instalación de sonar y ejecutar el script build-war.sh

cd ../war
./build-war.sh

Si se usa tomcat 5 no hay necesidad de ajustar la configuración de tomcat ya que es soportado directamente por sonar. En nuestro caso vamos a usar Tomcat 6 (6.0.18 en mi caso) y para que funcione debemos hacer un pequeño cambio en el script $TOMCAT_HOME/bin/catalina.sh. Debemos editar el script y agregar la siguiente linea al principio

# Soporte Sonar
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -XX:PermSize=256m -Djava.awt.headless=true"

Hay otros sitios donde especifican el uso de otros parámetros pero a mi me funciono bien con la definición de arriba.


Ya lo único que nos queda es hacer deploy del war y configurar maven para que pueda registrar la información en la bd.


Para hacer deploy solo basta copiar el war en la carpeta $TOMCAT_HOME/webapps y reiniciar tomcat

$TOMCAT_HOME/bin/shutdown.sh
cp -p sonar.war $TOMCAT_HOME/webapps
$TOMCAT_HOME/bin/startup.sh

y para configurar maven solo debemos definir el siguiente perfil en el archivo {home}/.m2/settings.xml. La configuracion incluye los parametros de conexion a la bd.

<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- EXAMPLE FOR MYSQL -->
<sonar.jdbc.url>
jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
</sonar.jdbc.url>
<sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>mipassword</sonar.jdbc.password>
<!-- SERVER ON A REMOTE HOST -->
<sonar.host.url>https://www.mycompany.com/sonar</sonar.host.url>
</properties>
</profile>
</profiles>

<activeProfiles>
<activeProfile>sonar</activeProfile>
</activeProfiles>



Lo único que nos falta es recopilar la información usando maven, lo cual lo podemos hacer con el siguiente comando

mvn clean package sonar:sonar

Y luego revisar la información desde sonar.







No hay comentarios.: