在我的新项目中,我面临着一个复杂的基础架构,其中包含多个模块,这些模块多年来以令人不快,不受控制的方式增长。
直言不讳:构建过程令人恐惧。有40多个不同的复杂Ant文件,它们被多次连接,并且SOA框架还生成了多个动态Ant文件。花了几天的时间才能真正理解所有依赖关系,并最终构建整个项目而没有任何错误。
我的计划是或打算将整个项目从Ant迁移到Maven,因为已经计划了新组件,并且我希望将来也能避免这些问题,因为这与现在的方式太可怕了;-)
由于我不熟悉大型项目的迁移,因此我对最佳工作流程有些困惑。涉及许多XML文件和脚本,它们以非Maven目录结构分布。总体而言,涉及3000多个文件。主要问题之一是,我不知道我是否真的应该尝试迁移已知Maven目录结构中的所有内容,因此冒着无休止地编辑和重构每个文件的风险。还是应该保持文件夹结构不变,并膨胀我的pom.xml文件,并且可能会遇到所有涉及到的不同插件的问题?老实说,这两种方法听起来都不具有建设性。
在这个维度上将项目迁移到Maven甚至有意义吗?尤其是当SOA框架必须使用其自己的Ant文件时-
因此,必须结合使用Ant和Maven。简化此过程的最佳策略是什么?
感谢您的所有建议。
这是Mavenizing Ant项目的简单快速答案:
不要做!
这不是一些反Maven熨平板。我使用Maven,而且我喜欢Maven。它迫使开发人员不要做愚蠢的事情。开发人员在编写构建脚本时很糟糕。他们想以这种方式而不是其他所有人的方式去做事情。Maven使开发人员以每个人都能理解的方式设置他们的项目。
问题在于,Ant允许开发人员执行疯狂而疯狂的事情,而您必须在Maven中完全重做这些事情。它不仅仅是目录结构。Ant允许多个构建工件。Maven每pom.xml
1只允许一个。如果您的Ant项目生成了六个不同的jar文件,而这些jar文件包含许多相同的类怎么办?您只需要为这两个jar创建六个Maven项目,然后再为这两个jar之间创建的文件创建另外六个。
我知道,因为我正是这样做的。系统架构负责人认为,Maven是新的和好的,而Ant必须是坏的和邪恶的。构建工作正常且结构合理无所谓。不,蚂蚁必须走,Maven就是这样。
开发人员不想这样做,所以由我负责,即CM。我花了六个月的时间将所有内容重写为Maven。我们有WSLD,我们有Hibernate,我们有各种框架,以某种方式,我必须重组所有内容才能使其在Maven中工作。我不得不产生新的项目。我不得不四处移动目录。我必须找出新的工作方式,而所有这些都不能阻止开发人员进行大量开发。
这是地狱最内心的一圈。
您的Ant项目如此复杂的原因之一可能与依赖性管理有关。如果您喜欢我们目前的商店,那么一些开发人员决定
一起
开发
自己的依赖管理系统。看完这个依赖关系管理系统之后,我现在知道开发人员永远不要写两件事:他们自己的构建文件和依赖关系管理系统。
幸运的是,已经有一个名为Ivy的
Ant依赖管理系统。关于Ivy的好处是它可以与当前的Maven架构一起使用。您可以使用站点的集中式Maven存储库,Ivy可以将jar作为Maven工件部署到该存储库。
我创建了一个常春藤项目,该项目会自动为开发人员设置所有内容。它包含必要的设置和配置,以及一些可以替换一些标准Ant任务的宏。我曾经svn:externals
将此常春藤项目附加到主项目。
将项目添加到当前的构建系统并不难:
build.xml
以将我们的ivy.dir
项目集成到当前项目中。ivy.xml
为该项目定义一个文件。<jar
,并</jar>
以<jar.macro
和</jar.macro>
。这个宏完成了标准<jar/>
任务的所有工作,但是它也pom.xml
像Maven构建一样将其嵌入到jar中。(Ivy具有将ivy.xml
文件转换为的任务pom.xml
)。build.xml
文件一百行。我还删除了所有用于结帐和提交的内容,或者ftp或scp的内容。所有这些东西都是针对他们的Jenkins构建系统,但是Jenkins可以在没有构建文件任何帮助的情况下进行处理,谢谢。lib
目录中的jar ,然后通过进行下载ivy.xml
。总共可能需要添加或更改十几行代码build.xml
来执行此操作。我想到了可以在几个小时内将Ivy集成到项目中的地步-如果构建过程本身不是很混乱。如果必须从头开始重写build.xml,则可能要花两三天的时间。
使用Ivy清理了我们的Ant构建过程,并为我们提供了在Maven中拥有的许多优势,而无需进行完整的重组。
顺便说一下,此过程中最有用的工具是“
超越比较”。这使我可以快速验证新的构建过程是否与旧的兼容。
有趣的是,一旦您将Ant项目与Ivy集成在一起,将它们变成Maven项目就不那么困难了:
build.xml
。您可能需要从头开始重写它,但是没有大多数依赖管理垃圾,这并不那么困难。build.xml
被清理,开始四处直到它们匹配Maven的结构移动目录。pom.xml
并删除build.xml
。1是的,我知道这并非完全正确。有带有子项目和 super poms的
Maven项目。但是,您将永远不会有一个Maven项目可以构建四个不相关的jar,而这在Ant中很常见。
问题内容: 与“普通” svn目录结构相反,我使用以下结构: 如您所见,对于每个项目,我没有单独的三元组(树干/分支/标签)。 为了进行开发,我对主干进行了检出(有时是稀疏检出),其中包含我需要的所有项目(项目之间存在依赖关系,有些项目只是库)。 我从中看到的好处是: 更新和签入很容易,因为我对所有项目都有一个公共的根目录(trunk)。一个简单或全部完成。 创建标签或分支很简单,因为这只是我要做
问题内容: 由于办公室人员的变动,C#专业知识的水平急剧下降,现在有更多的Java开发人员。至此,高层人士正在考虑将用C#编写的现有.NET项目转移到Java世界中。 除了从头开始完全出现 的明显问题之外,该公司还可以通过哪些可行的方法成功地将项目从.NET C#移植到Java? 问题答案: 这里是要考虑的事情: 这是大项目吗?如果是,请尝试使用C# 这个中型项目是否包含组件?如果否,请尝试使用C
迁移数据库ORM层 迁移模板Blade 迁移分页 迁移验证器 迁移Cache
数据库 模板类 验证器 缓存类
问题内容: 我正在做一个多模块项目。我们正在其他几个模块中的一个模块中使用appCtx.xml。 当前的问题是它们并不总是彼此同步。 当有人修改文件并构建项目时,就会发生这种情况,这样做的人可能会忘记将其复制到另一个模块,从而导致问题。 如何将src / main / resources中的appCtx.xml从项目A复制到项目B中的src / main / resources? 问题答案: 您可
问题内容: 我注意到Node.js项目通常包含以下文件夹: / libs,/ vendor,/ support,/ spec,/ tests 这些到底是什么意思?它们之间有什么区别,我应该在哪里包含引用的代码? 问题答案: 关于您提到的文件夹: 通常用于自定义 或 包含第三方库(使用git作为源代码管理时添加为git子模块) 包含BDD测试规范。 包含应用程序的单元测试(使用测试框架,请参见 此处