M101J y Netbeans 7.3.1
Siguiendo el curso M101J de 10gen con Netbeans 7.3.1
He empezado a seguir un curso sobre MongoDB que está dando la gente de 10gen. Ofrecen tres cursos actualmente, a saber:
Ya llevan una semana de curso. Lo primero que nos han enseñado es a instalar MongoDB y utilizar algunos ejemplos de uso muy simples.
No usarán un framework completo web tipo Spring o JSF para el curso, si no que se usará un "mini-framework" MVC llamado Spark. También usarán Maven como gestor de proyectos.
Los videos que componen el curso son un poco antiguos, por lo que las versiones que se utilizan en los mismos no se corresponden con las que existen en la actualidad. Además utilizan el editor Java IntellJ Idea.
El uso del Idea me parece estupendo, ya que en mi opinión es el mejor IDE que existe actualmente para Java (y para muchos otros lenguajes). Sin embargo, desde hace ya muchos años, le tengo especial cariño a Netbeans (antes de Sun, ahora de Oracle), por lo que he decidido seguir el curso con Netbeans hasta donde pueda.
Ya que los cursos están basados en Maven y dado el excelente soporte de Netbeans al mismo, no creo que tenga ningún problema en usarlo.
Ya que los cursos están basados en Maven y dado el excelente soporte de Netbeans al mismo, no creo que tenga ningún problema en usarlo.
Ahora al tema. ¿Cómo se importa un proyecto de los del curso, por ejemplo el Homework 1.4, en Netbeans?. Supongo que se tiene el Netbeans instalado y un JDK 1.6 o superior.
- Descargarse el proyecto (es un .zip en windows o un .tar para Linux o Mac), y descomprimirlo en un directorio a elegir.
- Desde el Netbeans, elegir File->Open project... o teclear Ctrl+Mayus+o. Esto nos abrirá el siguiente diálogo:

como veis, Netbeans ya identifica los directorios que tienen un archivo pom.xml como proyectos java de maven. - Una vez abierto el proyecto seleccionado, se verá lo siguiente en la vista del explorador de proyectos:

Veis que el Netbeans nos dice que hay errores, esto se debe Netbeans no tiene (o no debería tener) los jar's de los proyectos auxiliares que utiliza nuestro proyecto, Spark y el driver de MongoDB.
Para que se los baje, sólo tenéis que decirle al Netbeans que compile el proyecto. Si lo compilais, dándole al botón de la barra de herramientas
, Netbeans se bajará todas las librerías necesarias del repositorio central de Maven, y del repositorio adicional que viene definido en el propio pom.
Pero, aún con las librerías correctamente bajadas, seguirá produciéndose un error al compilar debido a que el nivel de la fuente del proyecto no es la correcta. Nosotros tenemos una máquina virtual 1.6 o 1.7, sin embargo, el proyecto se está compilando con una fuente 1.3, por lo que se produce el siguiente error:
1: ------------------------------------------------------------------------ 2: BUILD FAILURE 3: ------------------------------------------------------------------------ 4: Compilation failure 5: com/tengen/Week1Homework4.java:[55,13] error: annotations are not supported in -source 1.3 6: could not parse error message: (use -source 5 or higher to enable annotations) 7: C:\XXXXXXXX\Documents\Curso mongoDB\Week 1\hw1-4.blog\src\main\java\com\tengen\Week1Homework4.java:76: error: for-each loops are not supported in -source 1.3 8: for (DBObject doc : output.results()) { 9: ^ 10: could not parse error message: (use -source 5 or higher to enable for-each loops)
Para evitar ése error además de usar las versiones más actuales de los proyectos auxiliares (Spark y el driver de MongoDB), debemos dejar el pom del proyecto así: - Ahora si le volvemos a dar a compilar tendremos algo similar a lo siguiente:

- Ahora si arrancamos mongod tal y como nos indican en los primeros vídeos del curso, y si ejecutamos el proyecto tendremos la solución para el ejercicio 4 de la primera semana:

oops... algo le ha pasado a la imagen ;-)
1: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2: xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3: <modelVersion>4.0.0</modelVersion>
4: <groupId>com.10gen</groupId>
5: <artifactId>M101J</artifactId>
6: <version>1.0-SNAPSHOT</version>
7: <packaging>jar</packaging>
8: <name>M101J</name>
9: <url>http://maven.apache.org</url>
10: <build>
11: <plugins>
12: <plugin>
13: <groupId>org.apache.maven.plugins</groupId>
14: <artifactId>maven-compiler-plugin</artifactId>
15: <version>2.3.2</version>
16: <configuration>
17: <source>1.7</source>
18: <target>1.7</target>
19: </configuration>
20: </plugin>
21: </plugins>
22: </build>
23: <properties>
24: <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25: </properties>
26: <dependencies>
27: <dependency>
28: <groupId>org.mongodb</groupId>
29: <artifactId>mongo-java-driver</artifactId>
30: <version>2.11.1</version>
31: </dependency>
32: <dependency>
33: <groupId>com.sparkjava</groupId>
34: <artifactId>spark-core</artifactId>
35: <version>1.0</version>
36: </dependency>
37: <dependency>
38: <groupId>org.freemarker</groupId>
39: <artifactId>freemarker</artifactId>
40: <version>2.3.20</version>
41: </dependency>
42: </dependencies>
43: </project>
Con los nodos <target> y <source> decimos que queremos que el código fuente sea 1.7 y que vamos a compilar el código para una máquina virtual 1.7 o superior.