【问题标题】:maven-clean-plugin is not removing all given directoriesmaven-clean-plugin 没有删除所有给定的目录
【发布时间】:2015-11-26 13:03:47
【问题描述】:

在我的项目.pom 中,我像这样设置maven-clean-plugin

<plugin>
  <artifactId>maven-clean-plugin</artifactId>
  <version>2.6.1</version>
  <configuration>
    <filesets>
      <fileset>
        <directory>src/main/webapp/bower_components</directory>
      </fileset>
      <fileset>
        <directory>node_modules</directory>
      </fileset>
      <fileset>
        <directory>node</directory>
      </fileset>
    </filesets>
  </configuration>
 </plugin>

插件的目的是删除由frontend-maven-plugin 创建的目录。无论如何,最后一个工作正常。


问题

现在的问题是,上述文件夹之一永远不会被删除。它始终是“中间”的那个。我添加了 3 个 filesets 并且始终没有删除第二个,请参阅日志:

[INFO] Deleting /src/main/webapp/bower_components (includes = [], excludes = [])
[INFO] Deleting /node_modules (includes = [.bindings], excludes = [])
[INFO] Deleting /node (includes = [], excludes = [])

如果我更改文件夹的顺序:

[INFO] Deleting /src/main/webapp/bower_components (includes = [], excludes = [])
[INFO] Deleting /node (includes = [.bindings], excludes = [])
[INFO] Deleting /node_modules (includes = [], excludes = [])

而且第二个选项总是包含这部分: includes = [.bindings] 我相信这会导致文件夹不被删除。

为什么会发生这种情况,如何解决?


编辑、调试日志

mvn -X clean 结果,我认为这就是它崩溃的地方:

http://pastebin.com/ep1i2Bjk

解析pom.xml 后,它会读取带有此参数的配置。 但是,我没有把它放在那里。

【问题讨论】:

  • 运行带有-X 选项的mvn 命令以查看完整日志。
  • @FranMontero 查看更新
  • 您尚未定义要包含的内容或排除的内容...请参阅example in the documentation。顺便说一句:试试mvn -D clean.verbose=true package 除此之外,输出显示所有配置部分,包括插件的默认配置部分。
  • @khmarbaise 因为我想删除目录,而不是内容。为什么一个文件夹可以删除而另一个文件夹不行?
  • 对不起...您不想删除目录而不删除其内容?我想我误解了一件事,但从我的角度来看,尝试删除目录而不删除其内容是没有意义的。

标签: java maven maven-3 maven-plugin maven-clean-plugin


【解决方案1】:

好的,我找到了问题!这实际上是插件中的一个错误,并且已经被报告。它会影响maven-clean-plugin 2.6.1

这是我这边的配置错误,请继续阅读解决方案。

情况

你有一个父项目和一个子项目,都必须使用插件。

现在;

  • 在父项目中指定一些文件集。
  • 在子项目中指定一些文件集。

我认为是预期的:

插件读取父文件集和子文件集并清除它们。

会发生什么:

插件用子文件集覆盖父文件集。文件集按顺序被覆盖。但是文件集的父配置没有被清除!


我的情况: 父.pom:

<filesets>
   <fileset>
      <directory>test-output</directory>
   </fileset>
   <fileset>
     <directory>${basedir}/</directory>
     <includes>
        <include>.bindings</include>
     </includes> 
   </fileset>
</filesets>

孩子们 pom:

<filesets>
    <fileset>
        <directory>node</directory>
    </fileset>
    <fileset>
        <directory>node_modules</directory>
    </fileset>
    <fileset>
        <directory>src/main/webapp/bower_components</directory>
    </fileset>
</filesets>

并结合以上信息;插件读取的配置是:

<filesets>
    <fileset>
        <directory>node</directory>
    </fileset>
    <fileset>
        <directory>node_modules</directory>
        <includes>
            <include>.bindings</include>
        </includes>
    </fileset>
    <fileset>
        <directory>src/main/webapp/bower_components</directory>
    </fileset>
</filesets>

而不是具有 5 个文件集的配置。

错误报告https://issues.apache.org/jira/browse/MCLEAN-64

已解决

对于配置,有一些神奇的属性可以指示如何组合 xml 元素。在这种情况下,将 combine.children="append" 添加到文件集标记。有关这方面的更多详细信息,请参阅 POM 参考页面。 http://maven.apache.org/pom.html

值得一提的是,在孩子的项目.pom中设置combine.children="append"就足够了。

【讨论】:

  • 在同一张纸条上,我在父级上有一个空插件定义。我从父母那里删除了maven-clean-plugin,我的孩子清理工作了。
猜你喜欢
  • 2018-05-28
  • 2017-04-22
  • 2015-04-23
  • 2023-03-19
  • 2017-06-08
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多