Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 移动到Maven_Java_Maven_Build - Fatal编程技术网

Java 移动到Maven

Java 移动到Maven,java,maven,build,Java,Maven,Build,我继承了一个基于java、基于web、已有7年历史的产品,大约有750K行代码。正如所料,考虑到它的年龄,它不是基于Maven的结构。Maven用于构建和发布应用程序。然而,Maven在项目中是bastardized的,通常用于调用Ant脚本 我想转到Maven,因为在当前的设置中,任何新的(er)工具,如Sonar、Hudson等都很麻烦 我正在对该小组进行民意调查,问他们什么是做出这一改变的好策略?假设我能够以某种方式获得时间和金钱来移动代码并将其mavenization,那么什么是一种有效

我继承了一个基于java、基于web、已有7年历史的产品,大约有750K行代码。正如所料,考虑到它的年龄,它不是基于Maven的结构。Maven用于构建和发布应用程序。然而,Maven在项目中是bastardized的,通常用于调用Ant脚本

我想转到Maven,因为在当前的设置中,任何新的(er)工具,如Sonar、Hudson等都很麻烦

我正在对该小组进行民意调查,问他们什么是做出这一改变的好策略?假设我能够以某种方式获得时间和金钱来移动代码并将其mavenization,那么什么是一种有效的方法来测试所有功能都不会因为mavenization而被破坏呢。不用说,我们不能依赖单元/集成测试,因为代码覆盖率低于10%

如果我将现有设置所创建的战争与mavenization后创建的战争区别开来,那么这两场战争是否应该相同(在规模和内容上)?如果是,这是保证功能不被破坏的必要和充分条件吗


谢谢

首先,我可能会推荐格拉德尔,它看起来比马文酷多了。除此之外,我认为您运行新旧版本并比较其结果的计划是一个好主意

话虽如此,为了能够继续前进,您需要运行某种集成测试,即使用selenium或jweb单元进行自动点击测试

所以,我可能会先在jenkins/hudson/Bambor上运行旧的构建,然后开始编写点击测试,然后开始使用构建

我还推荐它,因为它将为您提供许多重构代码的好工具

在测试不同的构建是否构建了相同的东西时,我现在执行以下操作:

/opt/gradle/bin/gradle clean war && jar -tf build/libs/new.war  | sort > /tmp/gradle-war.txt && diff /tmp/ant-war.txt /tmp/gradle-war.txt
其中/tmp/ant-war.txt由

jar -tf old.war | sort | uniq > /tmp/ant-war.txt

通过这种方式,我可以很好地输出两个版本中发生的更改。

如果在切换时使用Maven的标准文件夹结构,这两个版本可能不会完全相同。您可以更改super pom来更改文件夹以匹配您所拥有的内容,但这样做会破坏使用Maven的一个优势。我会坚持标准


因此,无论内部结构如何,都需要在代码库外部进行测试以验证功能。Selenium非常适合这样做。

如果没有足够的代码覆盖率,所有的赌注都没有了。与其转向maven,不如先让它进行一次良好的测试自动化。钱花得好,我完全同意。但这些都是IT行业的事实,IT行业的每一位专业人士都必须面对这些事实。我相信你们所有人都从事过代码覆盖率不够的项目。我同意@vivekv。我已经提到,代码大约是750K,它让人们知道,在单元测试上花费时间和金钱(尽管从技术角度来看是非常好的建议)不会减少管理层的工作量。我们不可能在管理层允许的时间内完成那么多的代码单元测试。如果您要将如此庞大的项目移植到Maven,请做好准备。您将遇到的最大问题是将其拆分为多个模块。此外,即使在进行了大量测试之后,您也会遇到许多项目结构和打包问题,您将无法运行测试。谢谢。你用过格拉德尔吗?看起来(如果我错了,请纠正我)大多数工具,如代码覆盖工具、Sonar、Jenkins等都已经准备好与Maven集成,而Gradle还没有真正得到那么多的支持。虽然我不想在技术上落后,但我也不想处于最前沿。但是,这仍然是一个很好的建议。我会详细检查。谢谢你的书。我还没有在制作中使用gradle,但我一直在玩它。我必须承认,你关于maven良好整合的观点是一个很好的观点。我之所以喜欢使用gradle,是因为它在项目布局方面没有maven严格,而且我喜欢用编程语言编程,而不是用XML。看到如此多的关于代码覆盖率和测试重要性等的讨论,以及整个行业中大量的生产代码在基本代码健全性方面如此惨淡地失败,真是太吸引人了。这几乎让人感觉,It专业人士(技术人员)需要有一个更具吸引力的统一战线,推动管理层做需要做的事情,而不仅仅是花钱增加新功能。