POM.xml管理嵌套目录和资源过滤

时间:2014-06-17 21:30:39

标签: java maven pom.xml

我有一些关于pom的问题。基本上我们想要过滤整个目录,但是我不希望过滤该目录的某些部分,但仍需要包含在我的构建中。

以下是一个例子:

文件夹目录:

some/
  path/
    dir1
      stylesheet
    dir2
      imageFile
    dir3
      fontFile
然后在我的pom中我有类似的东西:

<resource>
  <directory>some/path</directory>
  <filtering>true</filtering>
</resource>

这很好,除了我遇到了fontFile和imageFile类型文件的问题,所以我需要将它们从过滤中排除。我的第一反应是做这样的事情:

<resource>
  <directory>some/path/dir1</directory>
  <filtering>true</filtering>
</resource>    

<resource>
  <directory>some/path/dir2</directory>
  <filtering>false</filtering>
</resource>    

<resource>
  <directory>some/path/dir3</directory>
  <filtering>false</filtering>
</resource>

现在对于我的实际实现,这将是非常不可扩展的并且有点冗长。所以我很好奇是否有办法设置它,以便我们可以在顶层设置过滤,然后排除我们不想过滤的目录。

所以我喜欢这样的东西:

<resource>
  <directory>some/path/dir1</directory>
  <filtering>true</filtering>
  <excludes>
    <exclude>**/*.eot</exclude>
    <exclude>**/*.svg</exclude>
    <exclude>**/*.ttf</exclude>
    <exclude>**/*.woff</exclude>
  </excludes>
</resource> 

如何阻止我的所有字体文件一起包含在目标中。我尝试了几种不同的组合,希望我可以包含文件,然后进行过滤,如下所示:

<resource>
  <directory>some/path</directory>
  <filtering>false</filtering>
  <includes>
    <include>**/dir2/**</include>
    <include>**/dir3/**</include>
  </includes>
</resource>

<resource>
  <directory>some/path</directory>
  <filtering>true</filtering>
  <excludes>
    <exclude>**/dir2/**</exclude>
    <exclude>**/dir3/**</exclude>
  </excludes>
</resource>

我目前处于亏损状态,所以我希望有人可能会对如何做到这一点有所了解,而无需单独定位每个目录。

谢谢你, 布罗迪

1 个答案:

答案 0 :(得分:3)

因此,在进行了更多挖掘之后,只是查看了周围的不同pom.xml文件,我发现了一种从过滤器中排除某些文件类型的简单方法。

基本上,在声明maven-resources-plugin时,您可以设置一个属性,允许从过滤中排除所有类型的文件。

我的例子:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
      <includeEmptyDirs>true</includeEmptyDirs>
      <nonFilteredFileExtensions>
        <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
        <nonFilteredFileExtension>eot</nonFilteredFileExtension>
        <nonFilteredFileExtension>woff</nonFilteredFileExtension>
        <nonFilteredFileExtension>svg</nonFilteredFileExtension>
        <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
      </nonFilteredFileExtensions>
    </configuration>
  </plugin>

如果您不想全局排除,可以选择此方法。这与我在第二个例子中尝试做的非常相似,但我的例子有点倒退。可在此处找到更好的示例:页面底部的http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

表格maven.apache.org

<project>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <excludes>
          <exclude>**/*.xml</exclude>
        </excludes>
      </resource>
      ...
    </resources>
    ...
  </build>
  ...
</project>