我遇到的最常见和烦人的问题之一是构建过程失败/通过,具体取决于谁,何时以及在哪台机器上执行该过程。
更正式 - 在理想世界我希望构建过程可重复。作为程序员,我会说我希望构建过程就像pure function源代码和资源构建输入和“环境” - 我希望它能随时随地返回相同的结果“评估“它使用”固定环境“,我希望(而非希望)团队中的每个人都拥有相同的”固定环境“。
在现实世界中“一个环境”随着时间的推移会发生变化,或者在开发者计算机之间发生变化,可能是因为它包含了一些既不期望也没有实现的依赖关系。
我想要实现的问题是找到/定义一个算法/程序或检查列表,以便排除故障,而不是可重复的Maven构建过程。假设我们有两台独立的机器A和B相同的操作系统,我们正在构建完全相同的应用程序版本,但它们会产生不同的结果(例如,一个成功,一个失败)。在哪里/如何应该寻找这两个“环境”之间的差异。
这些是我经常使用的一些步骤:
mvn help:effective-pom
set
命令在Windows下获得)settings.xml
个文件mvn dependency:build-classpath
还有什么想法可以提供有价值的信息吗?也许有一种更好的方式我只是想念......
答案 0 :(得分:4)
让我们为美式风格做点什么:你烧,我会刮。 --W。爱德华兹戴明。
不是寻找一个算法来解决你的不可重复的构建,修复根本原因,通过遵循良好的做法使它们可重复(如果你正确使用它,Maven构建是100%可重复的):< / p>
~/.m2/settings.xml
我在拥有数百名开发人员的组织中使用了Maven,而没有遇到您所描述的问题。实际上,我很遗憾地说,你面临的问题不是Maven的错,它们只是糟糕的开发实践的结果(我不是故意粗鲁但是这是真的)。
答案 1 :(得分:1)
不是本身的答案,但我们每周都会删除构建计算机上的整个本地存储库。
构建机器也仅限于开发人员无法编辑的一小组本地和代理回购。
起初我们有很多构建只在删除repo后停止工作。现在是一个月度问题。它趋向于每隔一个月的问题。
这促进了许多关于锁定版本号,插件版本,使用本地构建的配置文件,在需要时使用排除以及将第三方jar添加到正确位置的良好实践。
答案 2 :(得分:0)
由于Maven或Java的不同版本以及相关的错误或功能,我看到很多Maven构建在不同的机器上滑落。我甚至看到构建失败并在例如同一台机器上传递建立在命令行上而不是内置在IDE中。
如果调用命令行工具,您可能会发现这些工具依赖于平台或机器。我最常见的是在Windows上的Mac或.msi上创建.dmg文件的打包任务,并且必须在这些操作系统上运行打包以创建特定文件。
资源和源文件的文件编码在过去引起了我的问题。检查project.build.sourceEncoding属性是否设置似乎是有用的信息。反直觉地说,这似乎在复制或过滤资源时使用,但在处理源文件IIRC时被忽略。
答案 3 :(得分:0)
跟踪您的工作并能够跟踪开发人员的工作: