Maven 2 “故障排除算法”;Maven没有';“不为我工作”;问题
我在Maven中遇到的最常见和最烦人的问题之一是构建过程失败/通过,具体取决于谁、何时以及在哪台机器上执行该过程 更正式地说-在理想世界中我希望构建过程是可重复的。作为一名程序员,我会说,我希望构建过程就像一个源代码和资源的构建输入和“环境”——我希望它在任何时间和任何地方都能返回相同的结果,我使用“固定环境”对它进行“评估”,我希望(更希望)团队中的每个人都有相同的“固定环境” 在现实世界中要么“环境”随着时间的推移而变化,要么在开发人员机器之间变化,可能是因为它包含一些既不期望也不实现的依赖关系 我想问这个问题的目的是找到/定义一个算法/过程或检查表,用于对不可重复的Maven构建过程进行故障排除。假设我们有两台具有相同操作系统的独立机器A和B,并且我们在它们上构建完全相同版本的应用程序,但它们给出了不同的结果(例如一个成功,一个失败)。应在何处/如何查找这两个“环境”之间的差异 以下是我通常使用的一些步骤:Maven 2 “故障排除算法”;Maven没有';“不为我工作”;问题,maven-2,Maven 2,我在Maven中遇到的最常见和最烦人的问题之一是构建过程失败/通过,具体取决于谁、何时以及在哪台机器上执行该过程 更正式地说-在理想世界中我希望构建过程是可重复的。作为一名程序员,我会说,我希望构建过程就像一个源代码和资源的构建输入和“环境”——我希望它在任何时间和任何地方都能返回相同的结果,我使用“固定环境”对它进行“评估”,我希望(更希望)团队中的每个人都有相同的“固定环境” 在现实世界中要么“环境”随着时间的推移而变化,要么在开发人员机器之间变化,可能是因为它包含一些既不期望也不实现的依赖
set
命令获得)settings.xml
文件还有什么想法可以提供有价值的信息?也许有一个更好的方法我只是错过了…我已经看到很多Maven构建在不同的机器上出错,因为Maven或Java的不同版本以及相关的bug或特性。我甚至见过在同一台机器上构建失败并通过的情况,例如,在命令行上构建与在IDE中构建 如果调用命令行工具,您可能会发现这些工具依赖于平台或机器。我在包任务中看到了这一点,包任务在Mac上创建.dmg文件,在Windows机器上创建.msi文件,包必须在这些操作系统上运行,才能创建特定的文件
过去,资源和源文件的文件编码都给我带来了问题。检查project.build.sourceEncoding属性是否已设置似乎是有用的信息。与直觉相反,这似乎是在复制或筛选资源时使用的,但在处理源文件IIRC时被忽略。跟踪您的工作,并能够跟踪开发人员的工作:
- 在给定项目的所有计算机上使用相同版本的Maven(分发打包版本)
- 使用相同版本的JDK(至少对给定项目使用相同版本)
- 锁定POM中的插件版本以实现构建的可复制性
- 使用
- 使用公司存储库(并且仅使用公司存储库)
- 通过在
~/.m2/settings.xml
- 将所有内容置于版本控制之下(所有机器上的有效pom应相同)
- 在生成计算机上运行干净的生成(参考)
这促进了在锁定版本号、插件版本、为本地构建使用配置文件、在需要时使用排除以及将第三方JAR添加到正确位置方面的许多良好实践 实际上,我要问的是如何区分这些软件和配置。你知道怎么做吗?对不起,我以为你在寻找过程,而不是如何区分。这取决于你如何跟踪信息。您可以在文本文件中跟踪它们并运行“diff”。。。您可以在数据库中跟踪它们,并将每个更改作为不同的数据库条目。。。您可以将一个文件置于源代码管理下,并使用源代码管理的diff机制。。。你可以使用tripwire…也许问题的标题应该是“Maven不适合我”,或者你真的认为Maven适合人是个问题吗?:)哎呀,我把t字打错了