2010-03-15 20 views
7

Tengo un archivo pom existente que incluye una sección maven-jar-plugin. Se ejecuta por el objetivo prueba de jarra y actualmente es exclusión de algunos directorios:maven-jar-plugin incluye vs excluye

<excludes> 
    <exclude>...</exclude> 
    <exclude>...</exclude> 
    <exclude>somedir/**</exclude> 
</excludes> 

necesito incluir un archivo en el directorio somedir pero dejar de lado el resto de los archivos en el directorio somedir. He leído que incluye tener preferencia sobre los excluye por lo que añade algo como lo siguiente (no había incluye la sección anterior):

<includes> 
    <include>somedir/somefile.xml</include> 
</includes> 

Esto termina por crear un archivo JAR para la prueba con sólo unos pocos archivos en el mismo (solo las cosas en META-INF). El archivo que incluí tampoco está en el contenedor. Lo que esperaría es un jar que sea idéntico al jarrón que se creó antes de que mi inclusión cambie con el archivo adicional.

¿Qué me falta aquí?

Respuesta

10

primer lugar, si no se especifica ningún includes, a continuación, el frasco plugin de Maven usará **/** como patrón por defecto (ver o.a.m.p.j.AbstractJarMojo) es decir, que incluirá todo. Si anulas este patrón predeterminado, el complemento obviamente solo incluirá lo que le pidas que incluya.

En segundo lugar, la exploración de directorio se realiza al final de la o.c.p.u.DirectoryScanner y esto es lo que el javadoc de la clase dice:

 
* The idea is simple. A given directory is recursively scanned for all files 
* and directories. Each file/directory is matched against a set of selectors, 
* including special support for matching against filenames with include and 
* and exclude patterns. Only files/directories which match at least one 
* pattern of the include pattern list or other file selector, and don't match 
* any pattern of the exclude pattern list or fail to match against a required 
* selector will be placed in the list of files/directories found. 

Así, con su actual conjunto de includes y excludes patrones, solamente UNO El archivo coincidirá con el patrón de inclusión, pero también coincidirá con un patrón de exclusión y, por lo tanto, no se seleccionará y obtendrá un archivo casi vacío (con solo el manifiesto predeterminado, consulte o.a.m.p.j.AbstractJarMojo#createArchive()).

no le pueden dar la solución exacta aquí, pero es necesario volver a pensar con claridad la manera de incluir/excluir archivos (por ejemplo, añadir más includes patrones, retire <exclude>somedir/**</exclude>, o utilizar includes solamente, o utilizar excludes solamente).

Cuestiones relacionadas