Maven 将作为一个普通的构建系统,被人们重新认识,并且它将超越 Java™ 技术。本文不打算成为一篇 Maven 教程,而是将 Maven 与其他技术进行比较,让您洞察 Maven 与 Eclipse 相适应的地方,以及如何使这些工具相互协作。
在过去几年中,Maven 已经不仅仅是 Java 世界的一个时髦话题。自 2001 年起,Maven 已经成为构建工具领域的先驱。最近几年,人们常拿它与 Ant 比较。因为 Maven 与 Ant 有一些显而易见的相似之处,所以拿它们俩作比较似乎是很自然的事。比如说,在两种情况下,XML 脚本都是可用的;两种工具都可以生产工件;它们还可以共享相同的分类法和概念,比如 项目(project)、目标(target)与 目标(goal),以及 依赖关系(depends) 和 先决条件(prereqs)。但它们实质上有很大的差别。Ant 只是一个 XML 脚本工具,而 Maven 是一个普通的构建工具,它关注的重点是一个叫做项目对象模型(POM)的概念。POM 暴露的是粗粒度的、面向构建的任务,这些任务被称为目标,它们提供了一些准则,帮助您开发构建方法和实现最佳实践。
在某些方面,Maven 属于软件工厂 工具家族(参阅 参考资料),尽管目前它仍在外围。更确切地说,诸如 Maven 之类的构建工具是软件工厂领域中必不可少的。
软件工厂
通过显著提高自动开发的级别,软件工厂提供了一个花费更少、更灵活的应用程序开发方法。根据 Software Factories Web 站点的说法,“软件工厂是一个软件产品线,它根据构建特殊种类的应用程序的方法,配置一些可扩展的开发工具……提供打包的内容……以及指导”(参阅 参考资料)。软件工厂涉及三个主要概念:
- 模式,提供了一些元数据,描述组成应用程序的不同工件的结构,以及它们是如何交互的。
- 一个或多个模板,提供了启动程序工具箱,以及构建应用程序所需的其他任何东西。
- 可扩展的开发环境,用于配置、定制和装配组件。
如今,这类工具已经逐渐引起了认识到它们的价值的那些工具制造人员、工具开发人员和软件编辑的注意。这些工具促进了软件开发过程的工业化,降低了投入市场的成本和时间,同时还提高了生产率,加快了对进化需求的反应。
仔细查看一下 Maven 的主要特性,您就会认识到 Maven 与软件工厂之间的相似之处:Maven 使用 POM 作为元数据来描述项目结构,并通过通用应用程序插件来获得可扩展的项目模板。因为 Maven 非常灵活并且是开放源码的,所以很容易推断和设想 Maven 是软件工厂平台中的一个核心组件。但是,还有另一种说法。上述类比并不完全,因为目前的 Maven 缺乏专用的开发环境,而这类环境有助于创建特定于域或特定于企业的插件和模板,并允许您轻松地配置项目或定制行为。
不过,Maven 的主要目标是标准化构建过程,并保证代码构建-测试-部署(CBTD)循环中的质量和易再现性(easy reproducibility)。它还可以制定度量标准,帮助您了解开发状态。CBTD 本体论在软件工程领域已经不再新鲜,但 Maven 可以使您标准化这种本体论,并通过抽象这种理论,将它想像成一个完整的实体。考虑到不断增长的项目的复杂性,标准化成为一种迫切需要。扩建 的概念,我们称之为元构建,因为其无可估量的价值以及保证下一级质量的特性,正逐渐被人们认识。持续集成(continuous integration)就是建立在这个概念的基础之上,但它也应用了在 IDE 上下文之外的地方进行构建的能力。
模糊的界限
使用过 Java 技术的人应该都听说过 Eclipse。2001 年年中的时候,Eclipse 推出了它的第一个版本,标志其成熟的是它为集成开发环境(IDE)提供了一个机会,特别是为 Java 开发人员(不严谨地说)提供了一个机会。Eclipse 是一种开放的、以语言为中心的平台,也可以将它用作教育性项目和研究项目的基础平台,其中一些平台捐赠给了 Eclipse 团体( 请参阅 参考资料)。就像 Microsoft® 已经采用软件工厂方法一样,Eclipse 也开始转向模型驱动开发(MDD)方向,并且最近已经公布了一个新的项目提议 —— 模型驱动的开发集成(MDDi)。根据该提议,“Eclipse MDDi 项目专用于平台的实现……其设计目标是支持各种建模语言(统一建模语言或特定于域的语言)和模型驱动的技术。”
渐渐地,一些工具开始假定某些特性可以完全并且顺利地集成在一起,Maven 和 Eclipse(即使作为一个简单的 IDE)也不例外。因此,从构建的角度来看,二者似乎出现了重叠,如图 1 所示。
图 1. 扩建的概念

图 1 描述的实际上是以前讨论的扩建概念。正如以前定义的那样,整个扩建过程包括几个任务,同时还表示了一个元构建实例。任务可以是以下两种类型之一:原子任务是细粒度的,并且是上下文不明确的,这种任务的两个实例几乎是相同的;宏观任务是复合任务,它充当微观任务的容器。
构建,从扩展的意义上说,只处理宏观任务;原子任务的触发取决于配置。这意味着用户对系统有着较高层次的看法,这使得系统更易于维护和发展。
此外,Maven 和 Eclipse 都是开放的,并且很容易通过插件扩展它们,使其满足您的需要。但是,因为它们针对的受众不同,所以它们之间的相似性也到此为止:多数 Eclipse 最终用户是一些开发人员;而 Maven 主要针对的是一些构建管理人员。尽管如此,Maven 仍然是一个命令行工具。虽然图形用户界面(GUI)是按照 Jason Van Zyl(Maven 的制造者和架构师)指示的方向开发的,但 Maven 目前仍然没有帮助用户执行特殊任务的特定 GUI,比如创建或更新配置,或者只用一个鼠标单击发起构建。
上面描述的典型构建顺序在 Eclipse 中不像在 Maven 中那么顺利。Eclipse 的特性之一是开发 环境造成构建过程不连续,这要归因于一些人为因素:并不是每次成功编译之后都进行测试、所有测试没必要一次运行、可以跳过一些微观任务,等等。各种因素都会导致产生差异,这就是为什么开发人员每天至少必须运行一次完整的构建过程,以确信他们没有破坏什么的原因。
不过,因为 Eclipse 是一个可扩展平台,所以它受到许多用户社区的支持,这使它成为驻留 Maven 驱动的开发、允许开发人员和构建管理人员以某种简单的方式进行协作的理想之地。
将 Maven 集成到 Eclipse 中
Mevenide 是 Codehaus 主办的一个项目,旨在通过将 Maven 集成到 IDE 中,简化 Maven 的使用(参阅 参考资料)。现在,Borland Software 的 JBuilder、NetBeans 和 Eclipse 都受到支持。其他一些项目也部分地将 Maven 集成到 Eclipse 中,这样,就可以与 Mevenide(如 Maven Workshop)共享一些特性。除了增加 Maven 的易用性之外,为什么需要这种插件?
通过提供一些工具和视图,让您了解 Maven 隐藏的复杂性并改进团队环境中的协作,Mevenide for Eclipse 提高了生产率。从协作的角度来看,假如构建已经被 Maven 化了,那么最有用的特性就是 Eclipse 项目元数据与 Maven 元数据之间的双向同步。如果开发人员忘记在向 Eclipse 中添加一个依赖关系之后更新 POM,那么该怎么办?如果重构无法传播到 Maven,该怎么办?构建可能会中断,或者一些单元测试可能被拒绝,因此,真的需要使 Eclipse 元数据和 Maven 元数据保持同步。Mevenide 监听元数据的变化,并使您能够很容易地确定元数据不匹配的地方,这可以防止进行被严重破坏的构建。
但 POM 并不只是关于依赖关系和项目布局的。它还包含一些不用于结构上的项目管理信息,比如版本号、名称、ID 和源储存库的位置。Eclipse 元数据并不总是反映所有这些信息。因此,需要另一个编辑这些信息的方法。为此,Mevenide 提供了一个图形编辑器,该编辑器使 POM 的维护变得更容易,并允许您避开一些烦琐的、容易出错的原始 XML 手工编辑。每个 POM 语义部分都被表示为一个编辑器页,这增强了模型的整体可靠性。此外,为了最大限度地减少创建 POM 的无聊过程,Mevenide 提供了一个相当简单的、可扩展的 POM 模板机制。
阻止 Maven 在 Eclipse 之外的地方运行的能力是从类似 Mevenide 的插件中最容易获得的一项功能。您可以选择某些执行任务(用 Maven 的术语来讲是 目标),这些任务可以是通过 Maven 插件全局定义的任务,也可以是依赖于项目的任务,或者,您可以通过定义构建敏感的变量来定制构建。Eclipse 控制台上只显示了一些相关的选项(即在 IDE 的上下文中相关),对于其他任何插件,控制台上只输出构建日志。这一特性非常重要,因为它避免了在控制台与 Eclipse 之间不停地来回奔波。
Mevenide 还集成了其他许多帮助方法特性,但它们不是很重要。例如,您可以定义给定目标与文件模式之间的关系,这样,就可以根据工作空间增加的增量来激活那些任务。您还可以浏览工件储存库,或者根据名称搜索某个给定的工件(一个工件 就是一个构建结果,它可以是 JAR 文件、可执行文件或者是一个完整的 Web 站点)。然后,可以重定向到 Mevenide 站点,获得完整的特性列表。
不过,仍然还有一个问题:即使 Mevenide 增强了生产率和易用性,但您仍然必须认识到哪些工具可以在特殊环境中满足您的需要。通过 Maven Console 运行 Maven 会话可能非常耗时,所以,为了获得较高的生产率,在对会话进行编码期间,应该改为使用 JUnit 集成的 Eclipse 支持来运行测试,并依赖于 Eclipse 的内部编译器来生成可执行的文件。但在向源代码储存库提交任何东西之前,应该确保 POM 是同步的,并回滚所有不需要的 .classpath 或 .project 修改 —— 也就是说,假设这些文件都是在源代码控制之下,这可能是有争议的。这个话题在 Martin Van den Bemt 的 blog 中讨论过(参阅 参考资料)。
结束语
尽管 Maven 和 Eclipse 具有不同的特性,但从构建的角度看,它们在某些地方可能出现重叠。它们之间存在的对立似乎也相当多,但我们很容易克服这些,通过努力最终使它们相互协作,共创一片沃土。诸如 Mevenide 之类的工具可以使 Maven 和 Eclipse 顺利合作,并使它们保持同步,但您必须认识到,在某一个给定的开发阶段,哪种工具最能满足您的需要。
尽管 Maven 作为质量保证过程中的一个重要因素,正逐渐被人们所认可,但在将它集成到开发环境(尤其是 Eclipse)中,使 Maven 成为一等 IDE 公民这一点上,还有待提高。到那时,我们就可以考虑其他的 Maven 用例,比如说,更进一步地将它集成到全局开发过程中,以及像 Eclipse 这样的可扩展环境如何帮助实现这些集成。
本系列的下一部分将更详细地查看 Mevenide 的能力,以及如何使用该工具实现最佳实践,并从 Maven 和 Eclipse 中获得最大好处。
参考资料

- 大小: 17 KB
分享到:
相关推荐
基于 OpenCV 的魔兽世界钓鱼机器人
供应链管理中信息共享问题的研究
青春文学中的爱情观呈现
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
XLSReadWriteII6.02.01.7z
图解系统-小林coding-v1.0
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
漫画作品与乌托邦理想追求
江苏建筑消防设施维护保养规程.rar
内容概要:论文介绍了一款名为DODRIO的交互式可视化工具,帮助自然语言处理(NLP)研究人员和从业者解析基于转换器架构的语言模型内部工作机理。DODRIO整合了概述图与详尽视图,支持用户比较注意力权重与其输入文本的句法结构和语义特征。具体而言,它包含了依赖关系视图(Dependency View)、语义关注图(Semantic Attention Graph)以及注意力头概览(Attention Head Overview),并利用不同的图形展示方法使复杂的多层多头转换器模型中的注意力模式更容易理解和研究。 适用人群:适用于从事深度学习、自然语言处理的研究人员和技术从业者;尤其适合对基于变换器架构的大规模预训练语言模型感兴趣的开发者们。 使用场景及目标:DODRIO用于探索转换器模型各层级之间的联系、验证已有研究成果,同时激发新假设形成。具体使用时可以选择特定数据集中的句子作为样本输入,观察不同注意力机制如何响应文本内容的变化。此外,还可以用来对比精简版本DistilBERT的表现,评估其相对全量模型BERT的优势与不足。 其他说明:DODRIO为开源项目,提供web端实施方式,使得
该代码使用scikit-learn的乳腺癌数据集,完成分类模型训练与评估全流程。主要功能包括:数据标准化、三类模型(逻辑回归、随机森林、SVM)的训练、模型性能评估(分类报告、混淆矩阵、ROC曲线)、随机森林特征重要性分析及学习曲线可视化。通过`train_test_split`划分数据集,`StandardScaler`标准化特征,循环遍历模型进行统一训练和评估。关键实现细节包含:利用`classification_report`输出精确度/召回率等指标,绘制混淆矩阵和ROC曲线量化模型效果,随机森林的特征重要性通过柱状图展示,学习曲线分析模型随训练样本变化的拟合趋势。最终将原始数据和预测结果保存为CSV文件,便于后续分析,并通过matplotlib进行多维度可视化比较。代码结构清晰,实现了数据处理、模型训练、评估与可视化的整合,适用于乳腺癌分类任务的多模型对比分析。
在智慧城市建设的大潮中,智慧园区作为其中的璀璨明珠,正以其独特的魅力引领着产业园区的新一轮变革。想象一下,一个集绿色、高端、智能、创新于一体的未来园区,它不仅融合了科技研发、商业居住、办公文创等多种功能,更通过深度应用信息技术,实现了从传统到智慧的华丽转身。 智慧园区通过“四化”建设——即园区运营精细化、园区体验智能化、园区服务专业化和园区设施信息化,彻底颠覆了传统园区的管理模式。在这里,基础设施的数据收集与分析让管理变得更加主动和高效,从温湿度监控到烟雾报警,从消防水箱液位监测到消防栓防盗水装置,每一处细节都彰显着智能的力量。而远程抄表、空调和变配电的智能化管控,更是在节能降耗的同时,极大地提升了园区的运维效率。更令人兴奋的是,通过智慧监控、人流统计和自动访客系统等高科技手段,园区的安全防范能力得到了质的飞跃,让每一位入驻企业和个人都能享受到“拎包入住”般的便捷与安心。 更令人瞩目的是,智慧园区还构建了集信息服务、企业服务、物业服务于一体的综合服务体系。无论是通过园区门户进行信息查询、投诉反馈,还是享受便捷的电商服务、法律咨询和融资支持,亦或是利用云ERP和云OA系统提升企业的管理水平和运营效率,智慧园区都以其全面、专业、高效的服务,为企业的发展插上了腾飞的翅膀。而这一切的背后,是大数据、云计算、人工智能等前沿技术的深度融合与应用,它们如同智慧的大脑,让园区的管理和服务变得更加聪明、更加贴心。走进智慧园区,就像踏入了一个充满无限可能的未来世界,这里不仅有科技的魅力,更有生活的温度,让人不禁对未来充满了无限的憧憬与期待。
内容概要:本文档介绍了基于MATLAB实现的贝叶斯优化(BO)、Transformer和GRU相结合的多特征分类预测项目实例,涵盖了详细的程序设计思路和具体代码实现。项目旨在应对数据的多样性与复杂性,提供一种更高效的多特征数据分类解决方案。文档主要内容包括:项目背景与意义,技术难点与解决方案,具体的实施流程如数据处理、模型构建与优化、超参数调优、性能评估以及精美的GUI设计;详细说明了Transformer和GRU在多特征数据分类中的应用及其与贝叶斯优化的有效结合,强调了其理论与实际应用中的价值。 适合人群:具备一定机器学习和MATLAB编程基础的研发人员,特别是从事多维数据处理与预测工作的专业人士和技术爱好者。 使用场景及目标:① 适用于金融、医疗、交通等行业,进行复杂的多维数据处理和预测任务;② 提升现有分类任务中复杂数据处理的准确度和效率,为各行业提供智能预测工具,如金融市场预测、患者病情发展跟踪、交通流量管理等。 其他说明:本文档包含了丰富的实战案例和技术细节,不仅限于模型设计本身,还涉及到数据清洗、模型优化等方面的知识,帮助使用者深入理解每一步骤背后的原理与实现方法。通过完整的代码样例和GUI界面设计指导,读者可以从头到尾跟随文档搭建起一套成熟的分类预测系统。
大数据的sql练习题,初级中级高级
内容概要:论文介绍了名为Transformer的新网络架构,它完全基于自注意力机制,在不使用递归或卷积神经网络的情况下建模输入与输出之间的全局依赖关系,尤其适用于长文本处理。通过多头自注意力层和平行化的全连接前馈网络,使得在机器翻译任务上的表现优于当时最佳模型。具体地,作者用此方法实现了对英语-德语和英语-法语翻译、句法解析等任务的高度并行化计算,并取得显著效果。在实验方面,Transformer在较短训练时间内获得了高质量的翻译结果以及新的单一模型基准。除此之外,研究人员还探索了模型变体的效果及其对于不同参数变化时性能的变化。 适用人群:从事自然语言处理领域的研究者、工程师、学生,熟悉深度学习概念尤其是编码器-解码器模型以及关注模型创新的人士。 使用场景及目标:主要适用于序列到序列(seq2seq)转换任务如机器翻译、语法分析、阅读理解和总结等任务的研究和技术开发;目标在于提高计算效率、缩短训练时间的同时确保模型性能达到或超过现有技术。 其他说明:本文不仅提出了一个新的模型思路,更重要的是展示了自注意力机制相较于传统LSTM或其他方式所拥有的优势,例如更好地捕捉远距离上下文关系的能力
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
自己写的远控木马,欢迎各位大佬改善