【问题标题】:Maven build war some classes not includedMaven 构建战争某些类不包括在内
【发布时间】:2018-12-05 22:51:08
【问题描述】:

在两台不同的机器上使用 mvn installmvn compile war:war 构建 maven webapp 时,导致 WAR 文件有 20MB 的差异,它们的构建时间相隔 1 分半钟(30 秒对 2 分钟)

通过使用 WinRAR 检查战争文件,我注意到较小的 WAR 不包含 WEB-INF\classes\WEB-INF 和 WEB-INF\classes\resource 文件夹。

整个代码库是相同的。 POM.xml 包含maven-compiler-plugin,webapp 和单元测试在这两个应用程序上运行良好,不同之处在于较小的 WAR 似乎没有包含语言位置的属性文件。

【问题讨论】:

  • 请坚持使用mvn clean installmvn clean package(不会在您的本地仓库中安装WAR)。使用 mvn compile war:war 非常不同,并且不会正确构建您的 WAR 文件。

标签: java maven compilation war


【解决方案1】:

很可能其中一台机器将损坏的工件存储在本地 maven 存储库中,或者指向带有损坏工件的镜像服务器。当工件具有无效的pom.xml 或父级的pom.xml 无法解析时,您将收到警告:

POM 无效,传递依赖(如果有)将不可用

检查控制台输出并确认没有此类警告。见this answer for further reading

也可能是两台机器上使用的 Maven 版本不同。这可能会导致 Maven War Plugin 在不同版本中运行,其中一个可能会受到错误的影响。确保两个构建使用相同的 Maven 版本和配置,例如Maven Wrapper

您也有可能有一个非标准构建,其中模块被手动绑定到阶段,例如Maven 程序集插件绑定到test 阶段。确保两台机器使用完全相同的命令构建工件。

上面概括地说明了为什么应该有一个 CI 服务器来获得可重现的构建。

【讨论】:

  • 两个控制台输出相同。我能对损坏的工件做些什么?
  • @Cirko 确保在构建控制台输出期间没有警告。
  • 没有警告,控制台输出是一样的。我已经并排检查了它们。
  • 比较mvn -X install 输出。它非常冗长,所以使用diff。查找 maven war 插件的输出并比较所有插件执行 id。
  • 我已经删除了 .m2 文件夹,让项目再次构建 maven 依赖项,从而解决了问题!谢谢!
【解决方案2】:

两台机器的不同可能是位于~/.m2/settings.xml中的maven设置

考虑为您的项目添加一个 maven 包装器 @见:https://www.baeldung.com/maven-wrapper

【讨论】:

  • 根本不...并且包装器无助于解决 ssettings.xml...中可能存在的差异...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多