2009-09-08 9 views
15

Me gusta maven. Incluso me gusta mucho. Desde que me cambié de Ant, he ahorrado muchas horas de trabajo, construyendo archivos de compilación, administrando dependencias, etc., y ahorré mucho espacio en mi repositorio de control de código fuente.Mitigación de la verbosidad de los archivos Maven pom.xml (o: una crítica de Maven por parte de un fan)

El problema es que los archivos maven son demasiado detallados. No es que los archivos Ant fueran menos detallados, pero su nivel de detalle era apropiado para lo que hacen.

Por ejemplo, en lugar de escribir :

<dependencies> 
<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.1.1</version> 
<dependency> 
    <groupId>com.myosproject</groupId> 
    <artifactId>superlibrary</artifactId> 
    <version>7.5</version> 
</dependency> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
    </dependency> 
</dependencies> 

me gustaría escribir algo como

<dependencies> 
    commons-logging/commons-logging/1.1.1 
    com.myosproject/superlibrary/7.5 
    test:junit/junit/3.8.1 
</dependencies> 

O en lugar de

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.5</source> 
        <target>1.5</target> 
       </configuration> 
     </plugin> 
    </plugins> 

me gustaría

<build version="1.5"/> 

Y (último ejemplo y que se hacen), en lugar de escribir:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>native2ascii-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>native2ascii</goal> 
      </goals> 
      <configuration> 
      <encoding>UTF8</encoding> 
       </configuration> 
     </execution> 
    </executions> 
</plugin> 

me gustaría no tener que escribir nada . Es decir, maven detectará la presencia de la carpeta native2ascii y hará lo correcto de forma predeterminada.

Sé que estoy mezclando funcionalidad incorporada con complementos y otras cosas, pero intente mirar desde el punto de vista de un usuario experto, que está muy contento con la herramienta, pero piensa que podría estar más feliz.

Así:

  1. ¿Hay alguna manera de configurar experto para trabajar de esta manera? (Y sería prudente hacerlo)

  2. ¿Hay alguna otra herramienta que no conozca que haga esto?

+2

+ 1 para el buen espíritu de su pregunta :) –

Respuesta

9

configuración de Maven es sin duda detallado, Maven 3 tiene como objetivo hacer frente a esto entre otras cosas (ver these videos por alguna idea), y hay una plugin for Maven 2 que permite la configuración que se definirá en YAML. También hay un experimental "terse" branch que admite atributos, lo que reduce un poco el tamaño de la configuración.

Por ejemplo:

groupId: org.twdata.maven 
artifactId: maven-yamlpom-plugin 
version: 1.0-SNAPSHOT 
packaging: maven-plugin 
name: YAML POM Plugin 
dependencies: 
    - { groupId: org.apache.maven, artifactId: maven-plugin-api, version: 2.0 } 
    - { groupId: SnakeYAML, artifactId: SnakeYAML, version: 1.1 } 
    - { groupId: commons-io, artifactId: commons-io, version: 1.4 } 
    - { groupId: dom4j, artifactId: dom4j, version: 1.4 } 
    - { groupId: junit, artifactId: junit, version: 3.8.1, scope: test } 
    - { groupId: xmlunit, artifactId: xmlunit, version: 1.2, scope: test } 
build: 
    plugins: 
    - artifactId: maven-compiler-plugin 
     configuration: 
    source: 1.5 
    target: 1.5 
repositories: 
    - id: snakeyaml 
    name: SnakeYAML repository 
    url: http://snakeyamlrepo.appspot.com/repository 

con Maven 2, puede atenuar el nivel de detalle mediante la definición de configuración común en un proyecto principal, en los ejemplos que usted cita, las dependencias pueden todos ser definido en el padre , o en la sección DependencyManagement de un padre por lo que un niño puede declarar la dependencia junit como

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
</dependency> 

que es un poco de una mejora.

Los complementos se pueden declarar en el elemento principal y no es necesario que estén definidos en su hijo.

4

Estoy totalmente de acuerdo con usted en que algunas partes del pom.xml pueden estar condensadas, en particular la parte <dependencies>.

me gusta mucho la forma Ivy de dependencias que declaran:

<dependencies> 
    <dependency org="commons-lang" name="commons-lang" rev="2.0"/> 
    ... 

he visto un blog post que propone una herramienta experimental para crear las dependencias como la hiedra hacer. Sin embargo, nunca lo intenté.

+0

Si solamente la gente Maven habían molestado en aprender acerca de XML correctamente, en particular, que 'atributos' de existir, antes de que comenzaran .... No siquiera me refiero a en . –

Cuestiones relacionadas