1

我想一次清理我所有的 Maven 项目。但我想避免逐步手动浏览所有文件夹并调用mvn clean. 所以我想用 find 命令来做这件事。我尝试了以下调用:

find . -name pom.xml -exec mvn clean {} \;

结果是错误消息:find: missing argument for "-exec"

现在我的问题是:是否可以使用findexec进行这样的调用?我以为我可以将每个命令用作find -exec的参数。

提前感
谢哈迪

4

3 回答 3

8

如果您扩展 exec 将为您运行的内容:

mvn clean dir1/dir2/pom.xml

您会看到您将 pom 文件视为 maven 目标。

您应该使用 -f 标志和撇号(以防止通配符):

find . -name pom.xml -exec mvn clean -f '{}' \;

至于我,我使用这个命令

find . -name 'target' -a -type d -exec rm -rfv '{}' \;

这将删除所有目标文件夹。

于 2013-08-13T07:59:25.427 回答
3

我不确定哪个版本的 mvn 命令支持这样指定 pom 文件,但是对于例如 Maven 3.x 来说,它不起作用。我们需要一点点改变。使用-execdir运行,它会自动将目录更改为找到的 pom 文件的位置(通常比 -exec 更安全):

find . -name pom.xml -execdir mvn clean \;

或使用指定的备用 pom 文件选项-f

find . -name pom.xml -exec mvn clean -f '{}' \;
于 2015-03-12T10:38:57.010 回答
0

如果您像我一样检查了很多 maven 项目,那么建议的方法可能需要几个小时。我目前有 700 个项目已签出。

find . -maxdepth 3 -type f -name pom.xml | 
  sed 's|/pom.xml$|/target|' | 
  xargs -I{} bash -c '[ -d {} ] && echo {}' | 
  xargs -I{} bash -c 'mvn clean -f "$(sed "s|/target$|/pom.xml|" <<< "{}")"'

我在这里所做的是在应用 clean 命令之前测试目标文件夹是否存在。
这样一来,除非有理由,否则我不会激活 maven,然后执行时间与我最近参与的项目成线性关系,而不是项目总数。
您可能还需要调整一下 maxdepth,以防我的号码不符合您的要求。

于 2021-05-10T05:24:17.660 回答