最近,Apache Maven似乎出现了缓存问题。使用Windows Vista或Windows7在我们的项目上执行干净安装有时会产生与先前构建相同的数据的工件,即使较新的工件的文件应该已经更新。
有没有办法清除这个缓存,以强制maven始终触发应该构建的本地工件的干净构建?
特别是,我们在构建一个带有war插件的we应用程序时遇到了问题。Maven版本是3.0.3。War插件版本是2.1.1。
发布于 2011-09-14 06:14:27
手动从c:\Users\<username>\.m2\repository
中删除工件(或完整的本地存储库)。
发布于 2020-02-27 00:15:08
如果您将maven插件作为其中一个模块,请使用mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
。否则,Maven将尝试重新编译它们,从而再次下载依赖项。
发布于 2020-03-13 23:57:26
我也遇到过同样的问题,我在shell中编写了一行代码来解决这个问题。
rm -rf $(mvn help:evaluate -Dexpression=settings.localRepository\
-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN -B \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn | grep -vF '[INFO]')/*
我之所以这样做是因为我想让一个Jenkins项目在我需要的时候简单地运行它,这样我就不需要登录东西了,等等。如果你允许自己为它写一个shell脚本,你可以把它写得更干净:
#!/usr/bin/env bash
REPOSITORY=$(mvn help:evaluate \
-Dexpression=settings.localRepository \
-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
--batch-mode \
| grep -vF '[INFO]')
rm -rf $REPOSITORY/*
应该可以工作,但我还没有测试所有的脚本。(我测试了第一个命令,但没有测试整个脚本。)这种方法的缺点是首先运行一个大而复杂的命令。它是幂等的,所以您可以自己测试它。删除是它自己的命令,这让你可以尝试它并检查它是否做了你认为它做的事情,因为你不应该在没有验证的情况下信任删除命令。然而,它是智能的,有一个很好的理由:它是可移植的。它会尊重您的settings.xml文件。如果您正在运行这个命令,并告诉maven使用特定的xml文件( -s或--settings参数),它仍然可以工作。因此,您不必费心确保所有东西在任何地方都是相同的。
这有点笨重,但这是一种很好的业务处理方式,IMO。
https://stackoverflow.com/questions/7408545
复制相似问题