Maven

Hola a todos, espero este sea el lugar adecuado para este tema

Empece a pasar los proyectos que tengo a Maven, pero tengo una duda a la que no he encontrado respuesta asi que aqui va a ver si alguien sabe que pex

Hay varios jars que me provee JBoss y que no necesito importar de algun repositorio ni nada, empece por poner algunos asi

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.4</version>
        <scope>provided</scope>
</dependency>

pero ya son varios y no quisiera estar poniendo uno por uno de los que voy necesitando ¿hay alguna forma de indicar a donde tiene que ir a buscar las libs/jars que le hagan falta?

De antemano gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Gradle

Un consejo: Si apenas estás empezando a usar Maven, la verdad mejor sáltatelo y pásate directamente a Gradle. Te vas a ahorrar muchos dolores de cabeza.

Eso sí, tanto en Maven como en Gradle el manejo de dependencias es muy similar en cuanto a los mecanismos. Si tienes una dependencia que necesitas para compilación pero no la necesitas incluir en tu producto final, debes especificar el "provided". Pero eso es solamente para dependencias que el Maven (o Gradle) te están incluyendo en tu producto final.

En Gradle, usas el war plugin y puedes especificar una lista de dependencias en los grupos providedCompile y providedRuntime. Pero pues mira la diferencia de verborrea... si tienes que incluir unas 5 dependencias en tu proyecto que quieres que NO se incluyan en el WAR, ya sabes que en Maven serán 30 líneas de XML. Mira en Gradle:

dependencies {
  providedCompile 'org.slf4j:slf4j-api:1.6.1', 'javax.servlet:servlet-api:2.4',
    'javax.mail:mail:1.4', 'log4j:log4j:1.2.16', 'grupo:artefacto:version'
  //Aquí pones las que SI quieres que se incluyan en tu WAR y que se usen para compilar
  compile 'org.springframework:spring-core:3.0.5.RELEASE'
  //Y aquí pones las que quieres que metan al JAR pero no se usan para compilar
  runtime 'org.springframework:spring-asm-3.0.5.RELEASE'
}

Menos choro, no?

EDIT: Aquí la info completa del plugin para wars, a ver si te gusta lo que lees...

Le echaré un lente

¬¬ a ver si te gusta lo que lees...

De antemano gracias

Imagen de ezamudio

convención sobre configuración

Gradle sigue el principio de convención sobre configuración. Si vas a empezar un proyecto nuevo o estás reorganizando uno existente, puedes usar el layout que se ha vuelto tan popular con Maven:

src/main/java
Con las clases de tu proyecto
src/main/resources
Con los archivos de tu proyecto como imágenes, audio, properties, XML, etc.
src/test/java
Con tus pruebas unitarias
src/test/resources
Con los archivos de recursos necesarios para tus pruebas unitarias

Si usas eso, ya no necesitas definir nada para construir tu proyecto con Gradle. El nombre del proyecto será el directorio que lo contiene. Si no tienes dependencias externas, puedes tener un archivo build.gradle de una sola línea:

apply plugin:'java'

Con eso le das "gradle build" y va a hacer un montón de cosas: bajar dependencias (que no tiene por ahora), compilar los fuentes, correr las pruebas unitarias, y armar un JAR con tus clases de proyecto (sin las de prueba). Algo equivalente a correr "mvn package". La gran diferencia está en la complejidad del archivo que estás usando para construir el proyecto: 1 línea en Gradle, comparado con unas 20 que necesitas en el pom.xml de Maven para un proyecto básico (tienes que meter al menos el plugin de compilador, para compilar el proyecto, pfff).

Si empiezas a meter dependencias, ya sabes que son unas 5 líneas de XML por cada dependencia. Y si quieres meter repositorios adicionales pues también es un rollo. Y si quieres definir que tus fuentes están en otro lado porque no estás siguiendo el layout estándar de directorios, es más rollo... todo eso en Gradle es más sencillo.

Lo único que todavía no tiene Gradle es algo similar al plugin de Maven para hacer el sitio de tu proyecto. Pero para construir el proyecto es muy bueno, muy simple, y si además quieres manejar múltiples proyectos, es MUCHO más fácil Gradle que Maven; cuando empieces a armar una jerarquía de pom's vas a querer llorar.