2010-03-15 1 views
7

maven-jar-plugin 섹션이 포함 된 기존 pom 파일이 있습니다. 이 테스트 항아리의 목표를 위해 실행하고 현재 몇 개의 디렉토리를 제외한다 : 나는 somedir 디렉토리에 파일을 포함하지만 somedir 디렉토리에있는 파일의 나머지 부분을 떠날 필요가maven-jar-plugin에는 다음이 포함됩니다.

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

. 나는 내가 좋아하는 뭔가를 추가하므로 제외보다 우선 순위를 포함하는 읽은 다음 (더 이전 섹션을 포함 없었다)이 :

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

이 그 안에 몇 개의 파일로 테스트를위한 jar 파일을 생성 끝 (META-INF의 내용 만). 내가 포함시킨 파일은 항아리에 없습니다. 내가 기대할 수있는 것은 하나의 추가 파일로 내 포함 변경 전에 작성된 항아리와 동일한 항아리입니다.

무엇이 여기에 있습니까?

답변

10

먼저 includes을 지정하지 않으면 maven jar 플러그인은 **/**을 기본 패턴 (o.a.m.p.j.AbstractJarMojo 참조)으로 사용합니다. 즉, 모든 항목이 포함됩니다. 이 기본 패턴을 덮어 쓰면 플러그인에는 분명히 포함시킬 내용 만 포함됩니다.

둘째, 디렉토리 검색은 o.c.p.u.DirectoryScanner에 의해 마지막에 수행되며이 클래스의 자바 독의 말씀입니다 만,

 
* 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. 

을 따라서, includesexcludes 패턴의 현재 세트 ONE 파일은 포함 패턴과 일치하지만 제외 패턴과도 일치하므로 선택되지 않고 거의 빈 아카이브가됩니다 (기본 매니페스트 만 사용, o.a.m.p.j.AbstractJarMojo#createArchive() 참조).

내가 여기 당신에게 정확한 솔루션을 제공 할 수 있지만, 명확하게 (예를 들어, 더 includes 패턴을 추가 <exclude>somedir/**</exclude>를 제거하거나 단지 includes를 사용하거나 전용 excludes 사용) 파일을 제외하면/포함하는 방식을 재고 할 필요가있다.