Java Maven构建一些未包含的类
当在两台不同的机器上使用Java Maven构建一些未包含的类,java,maven,compilation,war,Java,Maven,Compilation,War,当在两台不同的机器上使用mvn install或mvn compile war:war构建maven webapp时,产生的war文件有20MB的差异,它们的构建时间相隔1.5分钟(30s vs 2min) 通过使用WinRAR检查war文件,我注意到较小的war不包含WEB-INF\classes\WEB-INF和WEB-INF\classes\resource文件夹 整个代码库是相同的。POM.xml包含maven编译器插件,webapp和单元测试在这两个应用程序上运行良好,不同之处在于较小
mvn install
或mvn compile war:war
构建maven webapp时,产生的war文件有20MB的差异,它们的构建时间相隔1.5分钟(30s vs 2min)
通过使用WinRAR检查war文件,我注意到较小的war不包含WEB-INF\classes\WEB-INF和WEB-INF\classes\resource文件夹
整个代码库是相同的。POM.xml包含
maven编译器插件
,webapp和单元测试在这两个应用程序上运行良好,不同之处在于较小的WAR似乎没有包含语言位置的属性文件。最有可能的是其中一台机器将损坏的工件存储在本地maven存储库中,或者指向带有损坏工件的镜像服务器。当工件具有无效的pom.xml
或无法解析父项的pom.xml
时,您将收到警告:
的POM无效,可传递依赖项(如果有)将不可用
检查控制台输出并确认没有此类警告。看
它也可能是Maven版本,在两台机器上使用的版本不同。这可能导致Maven War插件在不同版本中运行,其中一个可能会受到bug的影响。确保两个版本使用相同的Maven版本和配置,例如使用
还有一种可能性是,您有一个非标准构建,其中模块被手动绑定到各个阶段,例如绑定到test
阶段的Maven Assembly插件。确保两台机器使用完全相同的命令构建工件
上面一般说明了为什么应该使用CI服务器来获得可复制的版本。这两台机器之间的差异可能是位于~/.m2/settings.xml中的maven设置 考虑将maven包装器添加到项目中
@请参阅:两个控制台输出相同。如何处理损坏的工件?@Cirko确保在内置控制台输出期间没有警告。没有警告,控制台输出是相同的。我已经对它们进行了并排检查。比较
mvn-X安装
output。它非常冗长,所以请使用diff
。查找maven war插件的输出并比较所有插件执行ID。我已经删除了.m2文件夹,让项目再次构建maven依赖项,这就解决了问题!谢谢请坚持一致使用mvn clean install
或mvn clean package
(在您的本地回购中不安装WAR)。使用mvn compile war:war
非常不同,无法正确构建war文件。简单地说,不……而且包装器将无助于解决ssettings.xml
中可能存在的差异。。。