最近,Apache Maven似乎遇到了缓存问题。使用Windows Vista或Windows 7在我们的项目上执行干净安装,有时会产生具有与以前构建相同数据的工件,即使较新的工件的文件应该已经更新。
有没有办法清除这个缓存,迫使maven总是触发应该构建的本地工件的干净构建?
特别是,我们在使用war插件构建web应用程序时遇到了问题。Maven版本是3.0.3。War插件版本为2.1.1。
最近,Apache Maven似乎遇到了缓存问题。使用Windows Vista或Windows 7在我们的项目上执行干净安装,有时会产生具有与以前构建相同数据的工件,即使较新的工件的文件应该已经更新。
有没有办法清除这个缓存,迫使maven总是触发应该构建的本地工件的干净构建?
特别是,我们在使用war插件构建web应用程序时遇到了问题。Maven版本是3.0.3。War插件版本为2.1.1。
当前回答
删除c:\Users\<username>\。M2 \资源库的手。
其他回答
使用mvn dependency:purge-local-repository - dacttransitive =false -Dskip=true如果你有maven插件作为模块之一。否则,Maven将尝试重新编译它们,从而再次下载依赖项。
删除c:\Users\<username>\。M2 \资源库的手。
我会做以下几点:
mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end
标志告诉maven不要尝试解析依赖项或攻击网络。删除您在本地看到的内容。
为了更好地衡量,忽略错误(——fail-at-end)直到最后。这有时对于依赖项集有点混乱或依赖于有点混乱的内部存储库(这种情况时有发生)的项目很有用。
您是否检查/更改了settings.xml中存储库的updatePolicy设置。
此元素指定更新应该尝试发生的频率。 Maven将比较本地POM的时间戳(存储在存储库中) maven-元数据文件)到远程。选择是:总是,每天 (默认值),间隔:X(其中X为整数,单位为分钟)或从不。
试着把它设置为always。
正如一些回答所指出的,有时您确实想要完全删除本地存储库,例如,可能有一些工件不能被清除,因为它们不再被pom引用。
如果你想把这个删除嵌入到maven阶段,比如clean,你可以使用maven-clean-plugin并通过设置访问存储库,例如:
<plugin>
<inherited>false</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Base clean is attached to deleting local maven cache</echo>
<echo>${settings.localRepository}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<inherited>false</inherited>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<filesets>
<fileset>
<directory>${settings.localRepository}</directory>
</fileset>
</filesets>
</configuration>
</plugin>