当前位置: 首页 > news >正文

跟著Qcadoo MES系统学习产品设计001

背景

制造执行系统(Manufacturing Execution System,MES)是工业4.0的核心系统,智能制造的大脑。

一、Purdue Model普渡模型

普渡模型是工业行业采用的基础概念模型。主要用于ICS系统网络分段,它将ICS架构分成四个主要区域和六个不同级别。它只是你当前工业系统架构的最低的安全标准

Level 4/5:企业区域(Enterprise Zone)

这个区域是典型的IT网络,主要的业务功能都发生在这里,包括制造业务的协调、企业资源规划(ERP)系统在这里驱动工厂的生产计划、材料使用、运输和库存水平。此处的中断可能会导致长时间停机,并可能造成经济损失、关键基础架构故障或收入损失。

Level 3.5:非军事区(DMZ)

此区域包概括防火墙和代理等安全系统,用于防止IT和OT之间的横向移动威胁。

Level 3:制造运营系统区域(Manufacturing Operations Systems Zone)

此区域包含自定义OT设备,用于管理车间的生产工作流程:

  • 制造运营管理系统:管理生产运营;

  • 制造执行系统(MES):收集实时数据以帮助优化生产;

  • 数据历史库:存储流程数据,并执行上下文分析;

与Level 4/5一样,这里中断可能造成经济损失、关键基础架构故障或收入损失。

Level 2:控制系统区域(Control Systems Zone)

这个区域包含监督、监测和控制物理过程的系统:

  • 监控和数据采取(SCADA)软件:在本地或远程监督和控制物理过程,并汇总数据以发送给相关专拣;

  • 分布式控制系统(DCS):执行SCADA功能,但通常部署在本地,用于监视特定区域的系统;

  • 人机界面(HMI):连接到DCS和PLC,以实现基本控制和监视;

Level 1:智能设备区域(Intelligent Devices Zone)

此区域包含向Level 0的设备发送命令的仪器:

  • 可编程逻辑控制器(PLC):监控工业过程中的自动或人工输入,并相应地进行输出调整;

  • 远程终端单元(RTU):将Level 0中地硬件连接到Level 2中的系统;

Level 0:物理过程区域(Physical Process Zone)

该区域包含传感器、执行器和其他负责装配、润滑和其他物理过程的机械。许多现代化传感器通过蜂窝网络直接与云中的监控软件进行通信。

  • 生产网络(Production Network):在该区域包含RTU、PLC和工业无线网络,采集相关数据发送至监管网络。

  • 监管网络(Supervision Network/SCADA):监管网络存在SCADA用于将数据分析并送气企业网络。

企业网络(Corporate Network):企业网络可以理解为普渡模型的Level 4/5。

二、产品工厂管理建模

产品与方法模型,物理工厂模型,管理组织模型,各模型的详细结构及关系总结:

2.1 产品与方法模型(左侧)

核心功能:展示产品从设计到生产的全过程。
层级结构(自顶向下):

  1. 产品系列(顶层,包含多个产品)
  2. 产品(由产品系列细分而来,每个产品对应一个生产方案)
  3. 生产方案(每个产品有一个或多个,进一步细分为)
    ├─ 装配清单(列出生产所需的组件,组件通过投料步骤进入生产流程)
    └─ 工艺路线(定义生产步骤,每个步骤对应一个工艺)
    ├─ 步骤(具体生产操作,关联工艺)
    │ ↓
    │ 工艺(详细操作指南)
    │ ↓
    │ 工作单元(WKC)(分配用的通用工作单元)
    └─ 组件(生产所需的零部件)

2.2 物理工厂模型(中间)

核心功能:展示工厂的物理布局和资源配置。
层级结构(自顶向下):

  1. 企业(顶层,包含多个工厂/站点)
  2. 工厂(站点)(由企业细分而来,每个工厂包含多个车间/区域)
  3. 车间(区域)(由工厂细分而来,每个车间包含多条产线)
  4. 产线(由车间细分而来,每条产线包含多个工作单元/WKC)
  5. 工作单元(WKC)(物理工厂中的基本工作单元,与通用工作单元对应)
  6. 设备(产线中的生产设备,重复列出强调重要性)
  7. 库位(存储原材料和成品的位置)

2.3 管理组织模型(右侧)

核心功能:展示企业的管理层次和组织结构。
层级结构(自顶向下):

  1. 公司(顶层,包含多个工厂)
  2. 工厂(由公司细分而来,每个工厂包含多个车间和部门)
    ├─ 车间(由工厂细分而来,每个车间包含多个班组)
    │ ↓
    │ 班组(车间的基本工作单元,由人员组成)
    │ ↓
    │ 人员(最底层,执行具体任务)
    └─ 部门(由工厂细分而来,每个部门包含多个科室)

    科室(部门的组成部分,由人员组成)

    人员(最底层,执行具体任务)

2.4 模型间关系

  • 产品与方法模型:聚焦“生产流程”,从产品设计(产品系列→产品)到生产执行(生产方案→装配清单/工艺路线→步骤/工艺→工作单元)。
  • 物理工厂模型:聚焦“物理布局”,从企业架构(企业→工厂→车间→产线)到现场资源(工作单元→设备/库位)。
  • 管理组织模型:聚焦“组织架构”,从公司管理层级(公司→工厂→车间/部门)到执行层(班组/科室→人员)。

三者共同构成企业生产、物理布局与管理的完整视图,帮助明确各环节的职责与协作关系。

三、金字塔分层架构

回到经典的金字塔模型,它清晰展示了工业自动化或企业管理系统的分层架构,各层级从底层到顶层逐级抽象,体现了“数据采集-控制执行-过程管理-战略决策”的递进关系。

3.1 层级结构与核心功能

通过四种颜色区分四个层级(从下到上),各层级功能定位明确,形成“设备-控制-执行-战略”的完整闭环:

(1)最底层:MACHINES(机器设备层)- 绿色
  • 角色:系统的基础物理层,是所有生产活动的物理载体。
  • 内容:涵盖工厂中的各类实际生产设备(如机床、生产线、机器人等),直接参与产品制造。
  • 作用:产生原始生产数据(如设备运行状态、产量、能耗等),为上层系统提供数据输入。
(2)第二层:PLC AND SCADA(可编程逻辑控制器与监控系统)- 蓝色
  • 角色:连接设备层与上层系统的“控制中枢”。
  • 内容
    • PLC(可编程逻辑控制器):负责设备的自动化控制(如启停、参数调节),是设备的“大脑”。
    • SCADA(数据采集与监视控制系统):实时采集设备运行数据(如温度、压力、转速),并通过可视化界面监控设备状态。
  • 作用:将底层设备的“原始信号”转化为可处理的“结构化数据”,同时实现对设备的远程控制。
(3)第三层:MES(制造执行系统)- 橙色
  • 角色:生产过程的“协调者”与“管理者”。
  • 内容:接收SCADA传递的设备数据,对生产流程进行实时监控(如在制品跟踪、质量检测)、异常预警(如设备停机、产能不足),并与上层系统(ERP)交互需求(如物料需求、生产计划)。
  • 作用:填补ERP的“宏观规划”与设备层的“微观执行”之间的鸿沟,确保生产计划落地,提升生产效率。
(4)最顶层:ERP(企业资源计划)- 红色
  • 角色:企业运营的“战略决策中心”。
  • 内容:整合企业全链条资源(财务、采购、销售、人力资源等),基于MES传递的生产数据(如订单完成率、成本消耗)制定长期规划(如产能扩张、供应链优化)。
  • 作用:从全局视角优化资源配置,支撑企业高层决策(如市场拓展、成本控制)。

3.2 层级间的逻辑关系

图表的金字塔结构隐含了“自底向上”的信息流动与“自顶向下”的指令传递:

  • 数据流动:设备层产生的原始数据→PLC/SCADA采集处理→MES分析监控→ERP整合决策。
  • 指令传递:ERP的生产计划→MES分解为具体任务→PLC/SCADA控制设备执行→设备层完成生产。

这种分层设计确保了系统的灵活性与可扩展性:底层设备变更(如更换生产线)仅需调整PLC/SCADA接口;上层管理需求变化(如新增考核指标)仅需优化ERP与MES的交互逻辑。


3.3 贯穿各层的“EVENTS”的潜在含义

结合工业系统特性,“EVENTS”(事件)通常指各层级的关键状态变更或异常通知,可能包括:

  • 设备层:设备故障、停机、参数超限等事件。
  • PLC/SCADA层:控制指令失败、数据采集中断等事件。
  • MES层:生产延迟、质量缺陷、物料短缺等事件。
  • ERP层:订单变更、资源不足、预算超支等事件。

事件系统贯穿各层级,用于实时监控系统运行状态,触发预警或自动响应(如设备故障时MES自动调整生产排程)。

四、ISA-95 MESA模型

ISA-95 MESA模型背后的意图是更好地认识到生产信息在直接部门和监督角色中的重要性和使用,以及与企业和行政应用程序,如企业资源规划ERP、客户关系管理CRM、产品生命周期管理PLM和供应链管理SCM。利用工厂信息支持企业战略举措背后的思想,如精益制造、实时企业、产品生命周期管理等。

制造业运营与战略举措的分层流程图,通过自下而上的架构清晰展示了从生产执行战略决策的全链路关联,强调数据流动与层级协同对制造业运营的支撑作用。以下是具体解读:


4.1 分层结构与核心功能

图表分为四层(从下到上),每层聚焦不同维度的职能,形成“生产执行→运营管控→业务协同→战略驱动”的完整闭环。

(1)底层:制造/生产(MANUFACTURING/PRODUCTION)- 红色
  • 定位:整个体系的最基础层,是所有制造活动的物理与执行核心。
  • 功能:直接负责产品的物理生产(如加工、装配、质检),是实时生产数据的源头(如设备状态、产量、能耗等)。
  • 作用:为上层提供最原始的生产事实,是一切运营分析与战略决策的基础。
(2)第二层:制造/生产运营(MANUFACTURING/PRODUCTION OPERATIONS)- 浅蓝色
  • 定位:连接“生产执行”与“业务运营”的枢纽层,负责将底层生产活动转化为可管理的运营指标。
  • 核心环节(共10项):
    • 产品跟踪与谱系:记录产品全生命周期的生产路径(如原材料来源、工序流转),用于质量追溯与问题定位。
    • 资源分配与状态:管理设备、人力等资源的实时分配(如设备是否空闲、人员排班),确保生产高效运行。
    • 性能分析:通过生产数据计算OEE(设备综合效率)、良品率等关键指标,评估生产效能。
    • 流程管理:优化生产流程(如工序衔接、异常处理流程),减少浪费。
    • 数据采集:从设备、传感器等底层系统实时收集生产数据(如温度、压力、运行时间)。
    • 质量管理:监控生产过程中的质量参数(如尺寸公差、缺陷率),触发质量预警或返工。
    • 劳动力管理:管理员工技能、出勤、绩效,确保人力与生产需求匹配。
    • 调度:根据订单、设备状态动态调整生产计划(如订单优先级、交期协调)。
    • 物流:管理原材料、在制品、成品的运输与仓储(如车间内物料流转、成品入库)。
    • 控制:通过PLC、SCADA等系统对生产设备进行实时控制(如启停、参数调节)。
  • 交互关系
    • 向下通过“EVENTS”(事件)箭头与底层生产活动联动(如设备故障触发停机事件,需立即响应)。
    • 向上通过“QUERY”(查询)和“DATA”(数据)箭头向业务运营层提供处理后的运营数据(如当日产量、质量合格率)。
(3)第三层:业务运营(BUSINESS OPERATIONS)- 浅蓝色
  • 定位:将生产运营数据与企业级业务职能结合,实现跨领域的协同与资源优化。
  • 核心职能(共6项):
    • 以客户为中心:通过CRM(客户关系管理)、服务管理系统,将客户需求(如订单交期、定制化要求)与生产计划对齐。
    • 财务与绩效:利用ERP(企业资源计划)、BI(商业智能)分析生产数据(如成本、利润),评估业务绩效并优化资源分配。
    • 产品聚焦:通过CAD(计算机辅助设计)、CAM(计算机辅助制造)、PLM(产品生命周期管理),将产品设计数据与生产数据打通(如BOM同步、工艺优化)。
    • 合规聚焦:通过文档管理(如技术文档、合规证书)、EHS(环境健康安全)系统,确保生产符合法规(如环保、安全标准)。
    • 供应链聚焦:通过采购、SGP(供应商协同平台)管理原材料供应(如库存预警、供应商交货准时率),避免生产中断。
    • 资产可靠性:通过EAM(企业资产管理)、CMMS(计算机化维护管理系统),监控设备健康状态(如预测性维护),降低停机风险。
  • 交互关系
    • 向下通过“DATA”箭头接收生产运营层的数据(如质量缺陷率、设备OEE),用于业务职能分析(如成本核算、供应商考核)。
    • 向上通过“RESULTS”(结果)箭头向战略举措层传递业务成果(如成本降低率、客户满意度),驱动战略调整。
(4)第四层:战略举措(STRATEGIC INITIATIVES)- 浅蓝色
  • 定位:企业长期发展的方向性目标,由业务运营的结果驱动落地。
  • 核心举措(共6项):
    • 精益制造:通过消除浪费(如过量生产、等待时间)提升效率,依赖生产运营层的流程优化数据(如工序等待时间)。
    • 质量和法规合规:确保产品符合质量标准(如ISO 9001)与法规(如FDA认证),依赖质量管理环节的缺陷率数据。
    • 产品生命周期管理:从设计到退市全周期管理产品,依赖PLM系统与生产数据的协同(如设计变更对生产效率的影响)。
    • 实时企业:通过实时数据处理(如生产、库存、销售数据同步)实现快速决策,依赖各层数据聚合的及时性。
    • 资产绩效管理:最大化设备利用率与寿命,依赖EAM系统与生产运营层的设备状态数据(如故障频率)。
    • 其他举措:根据企业需求动态调整的战略方向(如数字化转型、绿色制造)。
  • 交互关系
    • 通过“OBJECTIVES”(目标)箭头与业务运营层连接,表明战略举措的实施需基于业务运营的实际结果(如成本控制目标需参考财务与绩效数据)。

4.2 关键元素:数据流动与聚合

  • AGGREGATE(聚合):右侧标注强调数据从底层向上层流动时,会经过汇总、清洗、分析等处理(如底层设备的秒级数据→生产运营的小时级指标→业务运营的日/周报表→战略举措的月度/季度趋势)。这种聚合确保上层决策基于可理解、可行动的信息,而非原始噪音。
  • 版本信息(VERSION #2.1):表明该流程图经过迭代优化,可能纳入了最新业务实践(如新增“资产可靠性”职能)或技术升级(如实时数据处理能力提升)。

4.3 整体意义

该图表通过分层架构清晰展示了制造业“生产-运营-业务-战略”的协同逻辑,核心价值在于:

  • 数据驱动:底层生产数据经多层级处理后,为战略决策提供依据(如通过质量数据优化精益制造目标)。
  • 协同高效:各层级通过明确的交互箭头(EVENTS、DATA、RESULTS)实现信息贯通,避免“信息孤岛”(如供应链职能可直接获取生产需求数据调整采购计划)。
  • 目标对齐:战略举措与业务运营结果强关联,确保企业长期目标与短期执行一致(如实时企业举措需依赖生产与业务数据的实时同步)。

简言之,这张图表是制造业数字化转型的“路线图”,通过结构化的分层与数据流动,帮助企业实现从“被动执行”到“主动决策”的升级。

五、数字化转型全景舵

制造业数字化转型的“全景地图”,以生产为核心,通过四大价值链的协同与数据驱动,推动企业从“传统制造”向“智能工厂”转型。

以“生产”为核心,通过四条顺时针延伸的价值链(业务履约、资产运营、产品生命周期、生产后流程)及细分环节,构建了制造业数字化转型的全景框架,强调各环节围绕生产的协同联动与数据贯通。


5.1 核心定位:生产是数字化转型的中枢

“生产”是整个轮舵的核心,所有价值链均围绕其展开并最终回归于它。这一设计表明:

  • 生产是价值创造的起点与终点:无论是订单履约、资产准备,还是产品生命周期管理,最终均需通过生产环节落地;生产的状态、效率与质量直接影响全链路的协同效果。
  • 数字化转型需以生产为锚点:数字化技术(如设备监控、数据采集)需深度融入生产环节,才能支撑其他环节的高效运作(如供应链协同、产品生命周期优化)。

5.2 四条核心价值链:覆盖全业务场景的闭环

四条价值链从“生产”中心向外延伸,分别对应制造业的核心业务场景,形成“需求-准备-执行-交付-升级”的完整闭环。

(1)业务履约价值链(左下方,顺时针)
  • 路径:订单获取 → 订单管理 → 供应链管理 → 生产计划管理 → 生产
  • 功能:聚焦“客户需求到生产执行”的端到端流程,确保订单需求被准确传递并转化为生产任务。
  • 关键节点
    • 订单获取:市场需求入口(如客户下单、合同签订),是生产计划的原始输入。
    • 供应链管理:协调原材料、零部件的采购与供应,直接影响生产连续性(如缺料可能导致停产)。
    • 生产计划管理:根据订单交期、设备产能、人员配置等,制定具体生产排程(如批次、工序优先级),是连接“需求”与“执行”的桥梁。
(2)资产运营价值链(左上方,顺时针)
  • 路径:生产准备 → 工厂规划 → 产品设计 → 工艺设计 → 工程建设 → 产品验证 → 生产
  • 功能:解决“如何高效组织生产资源”的问题,覆盖从生产前的资产准备到产品验证的全周期。
  • 关键节点
    • 工厂规划/工程建设:物理生产环境的搭建(如产线布局、设备安装),需与未来生产需求(如产能、产品类型)匹配。
    • 产品设计/工艺设计:决定产品的可制造性(如BOM合理性、工艺路线复杂度),直接影响生产效率与质量(如设计缺陷可能导致返工)。
    • 产品验证:确保产品符合设计要求(如性能测试、可靠性验证),是量产前的最后一道质量关卡。
(3)产品生命周期价值链(右上方,顺时针)
  • 路径:产品规划 → 产品设计 → 工艺设计 → 产品验证 → 产品运营 → 产品服务 → 产品升级 → 生产
  • 功能:关注产品从“规划到退市”的全生命周期管理,强调数据驱动的持续优化。
  • 关键节点
    • 产品规划:基于市场需求与技术趋势,定义产品方向(如功能、定位),是后续设计与生产的依据。
    • 产品运营:量产阶段的市场反馈收集(如客户评价、销售数据),为产品迭代提供输入。
    • 产品服务:售后支持(如维修、培训),直接影响客户满意度与品牌口碑。
    • 产品升级:根据市场反馈或技术进步,对产品功能/性能进行迭代(如软件升级、硬件改进),需同步更新设计与生产工艺。
(4)生产后流程价值链(右侧,单向延伸)
  • 路径:生产 → 生产状态监控分析 → 仓储 → 产品运输与交付
  • 功能:覆盖生产完成后的“产品交付”环节,确保产品高效、准确地到达客户。
  • 关键节点
    • 生产状态监控分析:实时采集生产数据(如设备OEE、良品率、能耗),通过数字化工具(如IoT、BI)实现透明化,支撑生产优化(如异常预警、产能提升)。
    • 设备监控分析/设备维修(子链条):生产状态监控的细化,通过设备运行数据(如温度、振动)预测故障风险,提前安排维修,减少停机损失。
    • 仓储/产品运输与交付:物流环节的数字化(如WMS仓储管理系统、TMS运输管理系统),优化库存周转(如按需领料)与交付时效(如路线规划)。

5.3 协同逻辑:数据贯通与闭环优化

图表通过“箭头”与“节点重叠”隐含了各价值链的协同关系:

  • 数据流动:各环节产生的数据(如订单需求、设备状态、产品反馈)通过数字化系统(如ERP、MES、PLM)实时共享,支撑前端决策(如生产排程调整、产品设计优化)。
  • 闭环优化
    • 业务履约的“订单管理”数据可反向指导资产运营的“工厂规划”(如根据订单量调整产线产能)。
    • 产品生命周期的“产品服务”反馈可用于优化生产状态的“设备维修”策略(如高频故障设备需优先升级)。
    • 生产后流程的“仓储/运输”数据(如库存周转率、交付准时率)可驱动业务履约的“供应链管理”改进(如调整安全库存阈值)。

5.4 数字化转型的核心价值

“dTAT 数字化转型轮舵”的本质是通过全链路数字化,实现从“被动执行”到“主动优化”的升级:

  • 效率提升:通过数据贯通减少信息孤岛(如订单需求直接同步至生产计划),缩短交付周期。
  • 质量优化:通过生产状态监控与设备预测性维护,降低缺陷率与停机损失。
  • 灵活性增强:通过产品生命周期的快速迭代(如产品升级)与业务履约的动态排程,响应市场需求变化。

六、Qcadoo MES POM工程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.qcadoo.maven</groupId><artifactId>qcadoo-super-pom</artifactId><packaging>pom</packaging><version>0.0.1</version><name>Qcadoo Maven Super POM - Open</name><properties><maven.version>3.2.1</maven.version><spring.version>3.2.11.RELEASE</spring.version><spring.security.version>3.2.5.RELEASE</spring.security.version><slf4j.version>1.6.1</slf4j.version><hibernate.version>3.6.9.Final</hibernate.version><aspectj.version>1.8.13</aspectj.version><postgres.version>42.3.3</postgres.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.eclipse.plugin.version>2.6</maven.eclipse.plugin.version><maven.javadoc.plugin.version>2.10.3</maven.javadoc.plugin.version><maven.antrun.plugin.version>1.5</maven.antrun.plugin.version><wagon.ssh.version>3.5.3</wagon.ssh.version><wagon.maven.plugin.version>1.0-beta-4</wagon.maven.plugin.version><maven.assembly.plugin.version>2.2.1</maven.assembly.plugin.version><aspectj.maven.plugin.version>1.7</aspectj.maven.plugin.version><additionalparam>-Xdoclint:none</additionalparam></properties><prerequisites><maven>3.2.1</maven></prerequisites><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.jdom</groupId><artifactId>jdom</artifactId><version>1.1</version></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>17.0</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-all</artifactId><version>1.10.8</version><scope>test</scope></dependency><dependency><groupId>org.powermock</groupId><artifactId>powermock-module-junit4</artifactId><version>1.5.6</version><scope>test</scope></dependency><dependency><groupId>org.powermock</groupId><artifactId>powermock-api-mockito</artifactId><version>1.5.6</version><scope>test</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.6.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.6.3</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.6.2</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>1.2</version><executions><execution><id>enforce-versions</id><goals><goal>enforce</goal></goals><configuration><rules><requireMavenVersion><version>[${maven.version},)</version><message>Check for Maven version &gt;=${maven.version} failed.Update your Maven install.</message></requireMavenVersion><requireJavaVersion><version>1.8</version></requireJavaVersion></rules></configuration></execution></executions></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>versions-maven-plugin</artifactId><version>2.0</version></plugin><plugin><artifactId>maven-release-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-eclipse-plugin</artifactId><version>${maven.eclipse.plugin.version}</version><configuration><downloadSources>true</downloadSources><downloadJavadocs>true</downloadJavadocs></configuration></plugin><plugin><groupId>com.mycila.maven-license-plugin</groupId><artifactId>maven-license-plugin</artifactId><version>1.9.0</version><configuration><header>licence.txt</header><strictCheck>true</strictCheck><aggregate>true</aggregate><keywords><keyword>copyright</keyword><keyword>qcadoo</keyword></keywords><includes><include>src/**</include></includes><excludes><exclude>**/lib/**</exclude><exclude>mes-tomcat/**</exclude><exclude>src/main/resource/tomcat/**</exclude><exclude>src/test/resources/**</exclude></excludes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.1.2</version><executions><execution><id>deploy-sources</id><phase>deploy</phase><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>2.5</version><executions><execution><id>deploy-javadocs</id><phase>deploy</phase><goals><goal>deploy</goal></goals></execution></executions></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>buildnumber-maven-plugin</artifactId><version>1.2</version><executions><execution><phase>validate</phase><goals><goal>create</goal></goals></execution></executions><configuration><getRevisionOnlyOnce /><revisionOnScmFailure /><timestampFormat>{0,date,yyyy_MM_dd_HH_mm}</timestampFormat><timestampPropertyName>buildNumber</timestampPropertyName><buildNumberPropertyName>buildRevision</buildNumberPropertyName><format>{1}</format><items><item>timestamp</item><item>scmVersion</item></items></configuration></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.17</version><executions><execution><id>default-test</id><phase>test</phase><goals><goal>test</goal></goals></execution></executions><configuration><forkCount>1</forkCount><reuseForks>true</reuseForks></configuration></plugin></plugins><resources><resource><directory>${basedir}/src/main/resources</directory><filtering>true</filtering><includes><include>qcadoo-plugin.xml</include><include>**/*.jsp</include></includes></resource><resource><directory>${basedir}/src/main/resources</directory><filtering>false</filtering><excludes><exclude>qcadoo-plugin.xml</exclude><exclude>**/*.jsp</exclude></excludes></resource></resources></build><profiles><profile><id>fast</id><properties><maven.test.skip>true</maven.test.skip><maven.javadoc.skip>true</maven.javadoc.skip></properties></profile><profile><id>cobertura</id><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>cobertura-maven-plugin</artifactId><version>2.7</version><configuration><instrumentation><ignores><ignore>org.aspectj.*</ignore></ignores><excludes><exclude>**/*$AjcClosure*</exclude><exclude>com/qcadoo/mes/beans/**/*.class</exclude><exclude>**/*Advice.class</exclude><exclude>**/*Aspect*.class</exclude></excludes></instrumentation></configuration><executions><execution><phase>test-compile</phase><goals><goal>cobertura</goal></goals></execution></executions></plugin></plugins></build></profile></profiles><reporting><plugins><plugin><artifactId>maven-javadoc-plugin</artifactId><version>${maven.javadoc.plugin.version}</version><configuration><additionalparam>-Xdoclint:none</additionalparam><doclet>org.jboss.apiviz.APIviz</doclet><docletArtifact><groupId>org.jboss.apiviz</groupId><artifactId>apiviz</artifactId><version>1.3.1.GA</version></docletArtifact><useStandardDocletOptions>true</useStandardDocletOptions><charset>UTF-8</charset><encoding>UTF-8</encoding><docencoding>UTF-8</docencoding><breakiterator>true</breakiterator><version>false</version><author>false</author><failOnError>false</failOnError><nodeprecated>true</nodeprecated><nodeprecatedlist>true</nodeprecatedlist><nosince>true</nosince><nohelp>true</nohelp><use>false</use><notree>true</notree><groups><group><title>API Packages</title><packages>com.qcadoo.mes.api</packages></group><group><title>Model Management Packages</title><packages>com.qcadoo.mes.model:com.qcadoo.mes.model.*</packages></group><group><title>View Management Packages</title><packages>com.qcadoo.mes.view:com.qcadoo.mes.view.*</packages></group></groups><excludePackageNames>*.internal.*:com.qcadoo.mes.application:com.qcadoo.mes.controller:com.qcadoo.mes.beans:com.qcadoo.mes.menu:com.qcadoo.mes.crud:com.qcadoo.mes.plugins:com.qcadoo.mes.products:com.qcadoo.mes.users</excludePackageNames><reportSets><reportSet><id>aggregate</id><reports><report>aggregate</report></reports></reportSet></reportSets></configuration></plugin></plugins></reporting><repositories><repository><id>qcadoo-releases-repository</id><url>https://nexus.qcadoo.org/content/repositories/releases</url><releases><enabled>true</enabled><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></repository><repository><id>maven-central</id><url>http://repo1.maven.org/maven2/</url><releases><enabled>true</enabled><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></repository><repository><id>jboss-repository</id><url>https://repository.jboss.org/nexus/content/groups/public/</url><layout>default</layout><releases><enabled>true</enabled><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></repository><repository><id>codehaus-repository</id><url>http://repository.codehaus.org/</url><releases><enabled>true</enabled><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></repository><repository><id>mc-release</id><name>Local Maven repository of releases</name><url>http://mc-repo.googlecode.com/svn/maven2/releases</url><releases><enabled>true</enabled><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></repository><repository><id>springsource-repo</id><name>SpringSource Repository</name><url>https://repo.spring.io/release</url></repository></repositories><pluginRepositories><pluginRepository><id>qcadoo-releases-plugin-repository</id><url>https://nexus.qcadoo.org/content/repositories/releases</url><releases><enabled>true</enabled><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></pluginRepository></pluginRepositories><scm><connection>scm:git:ssh://github.com/qcadoo/qcadoo-super-pom-open.git</connection><developerConnection>scm:git:ssh://git@github.com/qcadoo/qcadoo-super-pom-open.git</developerConnection><url>http://github.com/qcadoo/qcadoo-super-pom-open</url></scm><distributionManagement><repository><id>qcadoo-releases-repository</id><url>https://nexus.qcadoo.org/content/repositories/releases</url></repository></distributionManagement>
</project>

pom.xml 是一个典型的模块化企业级应用配置,通过 Maven 实现:

  • 组件化开发:通过插件划分功能边界。
  • 环境适配:支持多环境部署(开发、测试、生产)。
  • 自动化流程:集成构建、打包、部署全链路。

开发者需注意依赖管理和版本控制,以确保系统稳定性和可维护性。

qcadoo-super-pom-open 是 Qcadoo MES 系统中用于管理 Maven 构建的核心父工程配置文件(POM),其作用类似于 Maven 的 Super POM,负责统一管理依赖版本、插件配置和构建规范。

6.1 Maven POM 文件总结(qcadoo-super-pom

该文件是一个 Maven 父 POM(packaging: pom),用于为子项目提供统一的依赖管理、构建配置、插件设置及仓库等公共配置。以下是核心内容总结:


1. 项目基本信息
  • 坐标groupId: com.qcadoo.mavenartifactId: qcadoo-super-pomversion: 0.0.1
  • 名称:Qcadoo Maven Super POM - Open(开源版)
  • 打包类型pom(父 POM,不生成实际构件)

2. 属性(Properties)

定义了全局变量,统一管理依赖版本、插件版本及编码等:

  • 环境要求:Maven 最低版本 3.2.1,Java 版本 1.8
  • 依赖版本:Spring(3.2.11.RELEASE)、Spring Security(3.2.5.RELEASE)、SLF4J(1.6.1)、Hibernate(3.6.9.Final)、PostgreSQL 驱动(42.3.3)等。
  • 插件版本:Maven 编译器插件(3.1)、Eclipse 插件(2.6)、Javadoc 插件(2.10.3)等。
  • 编码:源码和报告编码均为 UTF-8

3. 依赖管理(Dependencies)

声明了子项目常用的依赖,覆盖框架、工具、测试等场景:

  • 核心框架:Spring Core、SLF4J(API、Log4j12 绑定、JCL 适配器)、Hibernate(未直接声明,但版本属性存在)。
  • 工具类:JDOM(1.1)、Joda-Time(2.3)、Guava(17.0)、ZXing(3.3.0,二维码处理)。
  • 序列化:Jackson(core 2.6.3、databind 2.6.3)、Gson(2.6.2)。
  • 测试:JUnit 4.9(test 范围)、Mockito-All(1.10.8)、PowerMock(模块测试)。
  • Web 容器:Servlet API 2.5(provided 范围,由容器提供)。

4. 构建配置(Build)

配置了 Maven 构建的关键插件和资源处理:

  • 插件
    • maven-enforcer-plugin:强制检查 Maven 版本(≥3.2.1)和 Java 版本(≥1.8)。
    • maven-compiler-plugin:指定 Java 源码和目标版本为 1.8。
    • maven-eclipse-plugin:集成 Eclipse,自动下载源码和 Javadoc。
    • license-plugin:检查代码许可证(licence.txt),严格模式,排除 lib/mes-tomcat/ 等目录。
    • buildnumber-maven-plugin:生成构建号(基于 SCM 时间戳和版本)。
    • maven-surefire-plugin:测试配置(单 Fork,复用 Fork)。
  • 资源过滤
    • 过滤 src/main/resources 下的 qcadoo-plugin.xml 和 JSP 文件。
    • 非过滤资源排除上述文件。

5. 构建配置文件(Profiles)

定义两种构建环境:

  • fast:跳过测试(maven.test.skip=true)和 Javadoc 生成(maven.javadoc.skip=true),加速构建。
  • cobertura:集成 Cobertura 进行代码覆盖率分析,排除 AspectJ 相关类和内部实现。

6. 报告配置(Reporting)

配置 Javadoc 报告生成:

  • 使用 org.jboss.apiviz.APIviz 生成 API 文档。
  • 排除内部包(如 *.internal.*com.qcadoo.mes.application 等)。
  • 支持聚合报告(aggregate 报告集)。

7. 仓库与分发(Repositories & Distribution)
  • 依赖仓库:包括 QCadoo 内部发布仓库、Maven 中央仓库、JBoss 仓库、SpringSource 仓库等。
  • 插件仓库:QCadoo 内部插件仓库(仅发布版本)。
  • 分发管理:发布的构件上传至 QCadoo 内部发布仓库(qcadoo-releases-repository)。

8. 源代码管理(SCM)
  • Git 仓库:连接地址 scm:git:ssh://github.com/qcadoo/qcadoo-super-pom-open.git,开发者连接 scm:git:ssh://git@github.com/qcadoo/qcadoo-super-pom-open.git,项目 URL 为 http://github.com/qcadoo/qcadoo-super-pom-open

6.2 Maven POM 文件总结(qcadoo-maven-plugin

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.qcadoo.maven</groupId><artifactId>qcadoo-super-pom</artifactId><version>0.0.1</version></parent><groupId>com.qcadoo</groupId><artifactId>qcadoo-maven-plugin</artifactId><version>1.5-SNAPSHOT</version><packaging>maven-plugin</packaging><name>Qcadoo Framework :: Maven Plugin</name><description /><url>https://github.com/qcadoo/qcadoo-maven-plugin</url><organization><name>Qcadoo Limited</name><url>http://www.qcadoo.com/</url></organization><inceptionYear>2010</inceptionYear><licenses><license><name>GNU Affero General Public License</name><url>https://github.com/qcadoo/qcadoo/raw/master/licence.txt</url></license></licenses><dependencies><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-eclipse-plugin</artifactId><version>${maven.eclipse.plugin.version}</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>${maven.javadoc.plugin.version}</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-project</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.codehaus.plexus</groupId><artifactId>plexus-archiver</artifactId><version>1.2</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-archiver</artifactId><version>2.4.1</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-descriptor</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>${maven.assembly.plugin.version}</version></dependency><dependency><groupId>org.codehaus.plexus</groupId><artifactId>plexus-utils</artifactId><version>2.0.7</version></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources></build><distributionManagement><repository><id>qcadoo-releases-repository</id><url>https://nexus.qcadoo.org/content/repositories/releases</url></repository><snapshotRepository><id>qcadoo-snapshots-repository</id><url>https://nexus.qcadoo.org/content/repositories/snapshots</url><uniqueVersion>false</uniqueVersion></snapshotRepository><site><id>local-site-repository</id><url>file:///${basedir}/target</url></site></distributionManagement><scm><connection>scm:git:git://github.com/qcadoo/qcadoo-maven-plugin.git</connection><developerConnection>scm:git:ssh://git@github.com/qcadoo/qcadoo-maven-plugin.git</developerConnection> <url>https://github.com/qcadoo/qcadoo-maven-plugin</url><tag>HEAD</tag></scm></project>

qcadoo-maven-plugin 是一个基于 Maven 的插件项目,其核心信息可通过提供的 pom.xml 文件总结如下:


项目基本信息

  • 坐标groupId=com.qcadooartifactId=qcadoo-maven-pluginversion=1.5-SNAPSHOT(开发快照版本);打包类型为 maven-plugin(Maven 插件)。
  • 父项目:继承自 com.qcadoo.maven:qcadoo-super-pom:0.0.1,复用父项目的通用配置。
  • 名称与描述:名称为 "Qcadoo Framework :: Maven Plugin",无具体描述。
  • 项目地址:GitHub 仓库地址为 https://github.com/qcadoo/qcadoo-maven-plugin
  • 组织信息:归属公司 "Qcadoo Limited",官网为 http://www.qcadoo.com/
  • 创建时间:2010 年(inceptionYear=2010)。
  • 许可证:采用 GNU Affero 通用公共许可证(AGPL),许可文件地址为 https://github.com/qcadoo/qcadoo/raw/master/licence.txt

依赖项

项目依赖多个 Maven 相关插件及工具库,主要包括:

  • Maven 插件工具maven-eclipse-plugin(版本由属性 ${maven.eclipse.plugin.version} 控制)、maven-javadoc-plugin(版本由 ${maven.javadoc.plugin.version} 控制)、maven-assembly-plugin(版本由 ${maven.assembly.plugin.version} 控制)。
  • Maven 核心 APImaven-plugin-api:2.2.1(插件开发基础接口)、maven-project:2.2.1(Maven 项目模型)、maven-plugin-descriptor:2.2.1(插件描述符生成工具)。
  • 归档与工具库plexus-archiver:1.2(归档工具)、maven-archiver:2.4.1(Maven 归档工具)、plexus-utils:2.0.7(Plexus 工具类库)。

构建配置

  • 资源处理:指定 src/main/resources 为资源目录,并启用过滤(filtering=true),支持资源文件中的变量替换。

发布管理(Distribution Management)

  • 正式版本仓库:发布至 qcadoo-releases-repository(地址: https://nexus.qcadoo.org/content/repositories/releases)。
  • 快照版本仓库:开发快照发布至 qcadoo-snapshots-repository(地址: https://nexus.qcadoo.org/content/repositories/snapshots),且不生成唯一版本号(uniqueVersion=false)。
  • 站点部署:项目文档站点部署到本地目标目录(file:///${basedir}/target)。

源代码管理(SCM)

  • 代码仓库:基于 Git,连接地址为 git://github.com/qcadoo/qcadoo-maven-plugin.git;开发者通过 SSH 协议连接(ssh://git@github.com/qcadoo/qcadoo-maven-plugin.git);公开 URL 为 https://github.com/qcadoo/qcadoo-maven-plugin
  • 当前标签:标记为 HEAD(指向最新提交)。

6.3 Maven POM 文件总结(qcadoo

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.qcadoo.maven</groupId><artifactId>qcadoo-super-pom</artifactId><version>0.0.1</version></parent><groupId>com.qcadoo</groupId><artifactId>qcadoo</artifactId><version>1.5-SNAPSHOT</version><packaging>pom</packaging><modules><module>qcadoo-tenant</module><module>qcadoo-plugin</module><module>qcadoo-localization</module><module>qcadoo-security</module><module>qcadoo-model</module><module>qcadoo-view</module><module>qcadoo-report</module><module>qcadoo-plugin-archetype</module><module>qcadoo-schema</module><module>qcadoo-javadoc</module><module>qcadoo-plugins-plugin-management</module><module>qcadoo-plugins-user-management</module><module>qcadoo-plugins-dictionary-management</module><module>qcadoo-plugins-menu-management</module><module>qcadoo-plugins-export</module><module>qcadoo-mail</module><module>qcadoo-custom-translation</module><module>qcadoo-plugins-custom-translation-management</module><module>qcadoo-plugins-unit-conversion-management</module><module>qcadoo-commons</module><module>qcadoo-testing</module><module>qcadoo-swagger</module></modules><name>Qcadoo Framework</name><description /><url>https://github.com/qcadoo/qcadoo</url><organization><name>Qcadoo Limited</name><url>http://www.qcadoo.com/</url></organization><inceptionYear>2010</inceptionYear><licenses><license><name>GNU Affero General Public License</name><url>https://github.com/qcadoo/qcadoo/raw/master/licence.txt</url></license></licenses><properties><qcadoo.plugin.version>1.5</qcadoo.plugin.version><qcadoo.maven.plugin.version>1.5-SNAPSHOT</qcadoo.maven.plugin.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version><exclusions><exclusion><groupId>rome</groupId><artifactId>rome</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-crypto</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-aspects</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version><exclusions><exclusion><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.1</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.9</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-validator</groupId><artifactId>commons-validator</artifactId><version>1.5.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>hsqldb</groupId><artifactId>hsqldb</artifactId><version>1.8.0.10</version><scope>test</scope></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version><scope>test</scope></dependency><dependency><groupId>xmlunit</groupId><artifactId>xmlunit</artifactId><version>1.3</version><scope>test</scope></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.18.1-GA</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>1.8.5</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.8.13</version></dependency><dependency><groupId>org.owasp.esapi</groupId><artifactId>esapi</artifactId><version>2.5.1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>aspectj-maven-plugin</artifactId><version>1.7</version><configuration><complianceLevel>1.8</complianceLevel><source>1.8</source><target>1.8</target><aspectLibraries><aspectLibrary><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId></aspectLibrary><aspectLibrary><groupId>org.springframework.security</groupId><artifactId>spring-security-aspects</artifactId></aspectLibrary></aspectLibraries><showWeaveInfo>true</showWeaveInfo></configuration><dependencies><dependency><groupId>org.aspectj</groupId><artifactId>aspectjtools</artifactId><version>1.8.13</version></dependency></dependencies><executions><execution><goals><goal>compile</goal><goal>test-compile</goal></goals></execution></executions></plugin></plugins></build><distributionManagement><repository><id>qcadoo-releases-repository</id><url>https://nexus.qcadoo.org/content/repositories/releases</url></repository><snapshotRepository><id>qcadoo-snapshots-repository</id><url>https://nexus.qcadoo.org/content/repositories/snapshots</url><uniqueVersion>false</uniqueVersion></snapshotRepository></distributionManagement><scm><connection>scm:git:ssh://github.com/qcadoo/qcadoo.git</connection><developerConnection>scm:git:ssh://git@github.com/qcadoo/qcadoo.git</developerConnection><url>http://github.com/qcadoo/qcadoo</url><tag>HEAD</tag></scm></project>

qcadoo POM文件的关键信息总结:

项目基本信息

  • 坐标groupId=com.qcadooartifactId=qcadooversion=1.5-SNAPSHOT,打包类型为pom(父模块)。
  • 名称:Qcadoo Framework(Qcadoo框架)。
  • 组织:Qcadoo Limited,官网为 http://www.qcadoo.com/
  • 成立时间:2010年。
  • 许可证:GNU Affero General Public License(AGPL),协议文件地址为 https://github.com/qcadoo/qcadoo/raw/master/licence.txt
  • 代码托管:GitHub仓库地址为 https://github.com/qcadoo/qcadoo,当前标签为HEAD

子模块

项目包含26个子模块,覆盖框架的核心功能,例如:

  • 基础模块:qcadoo-tenant(租户管理)、qcadoo-plugin(插件)、qcadoo-localization(本地化)、qcadoo-security(安全)。
  • 核心服务:qcadoo-model(模型)、qcadoo-view(视图)、qcadoo-report(报表)。
  • 工具与扩展:qcadoo-commons(公共组件)、qcadoo-testing(测试)、qcadoo-swagger(Swagger文档)。
  • 管理插件:qcadoo-plugins-*系列(如用户管理、字典管理、菜单管理、导出等)。

依赖与技术栈

项目依赖Spring生态、Hibernate、Apache Commons等主流框架和工具:

  • Spring框架:包含spring-aopspring-beansspring-contextspring-security-*(安全相关)、spring-test(测试)等模块。
  • ORMhibernate-core(Hibernate核心)。
  • 工具库commons-lang3(通用工具)、commons-beanutils(Bean工具)、commons-io(IO工具)、commons-validator(验证工具)等。
  • 测试支持hsqldb(内存数据库)、commons-dbcp(连接池)、xmlunit(XML测试)。
  • AOPaspectjweaver(AspectJ织入器)、spring-aspects(Spring AOP)、spring-security-aspects(Spring Security AOP)。

构建配置

  • AspectJ插件:使用aspectj-maven-plugin(版本1.7)处理AOP编译,配置合规级别、源/目标版本为1.8,并集成Spring Aspects和Spring Security Aspects。
  • 依赖管理:部分依赖版本通过属性(如${spring.version}${spring.security.version})统一管理。

分发管理

  • 发布仓库qcadoo-releases-repository,地址为 https://nexus.qcadoo.org/content/repositories/releases
  • 快照仓库qcadoo-snapshots-repository,地址为 https://nexus.qcadoo.org/content/repositories/snapshots,关闭唯一版本(uniqueVersion=false)。

综上,“qcadoo”是一个基于Maven的Java框架父项目(pom类型),提供企业级应用开发的核心功能模块,依赖Spring生态和Hibernate等技术,适用于构建复杂的企业应用系统。

6.4 Maven POM 文件总结(mes

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.qcadoo.maven</groupId><artifactId>qcadoo-super-pom</artifactId><version>0.0.1</version></parent><groupId>com.qcadoo.mes</groupId><artifactId>mes</artifactId><version>1.5-SNAPSHOT</version><packaging>pom</packaging><name>Qcadoo MES</name><description/><url>https://github.com/qcadoo/mes</url><organization><name>Qcadoo Limited</name><url>http://www.qcadoo.com/</url></organization><inceptionYear>2010</inceptionYear><licenses><license><name>GNU Affero General Public License</name><url>https://github.com/qcadoo/qcadoo/raw/master/licence.txt</url></license></licenses><modules><module>mes-plugins</module><module>mes-application</module></modules><properties><qcadoo.buildVersionForUser>3.0.14</qcadoo.buildVersionForUser><qcadoo.version>${project.version}</qcadoo.version><qcadoo.plugin.version>1.5</qcadoo.plugin.version><qcadoo.maven.plugin.version>1.5-SNAPSHOT</qcadoo.maven.plugin.version><profile.name>tomcat</profile.name></properties><dependencies><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugin</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-localization</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-security</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-view</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-report</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugins-menu-management</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugins-user-management</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugins-dictionary-management</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-custom-translation</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugins-custom-translation-management</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugins-export</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-commons</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-testing</artifactId><version>${qcadoo.version}</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>aspectj-maven-plugin</artifactId><version>${aspectj.maven.plugin.version}</version><configuration><source>1.8</source><target>1.8</target><complianceLevel>1.8</complianceLevel><aspectLibraries><aspectLibrary><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId></aspectLibrary><aspectLibrary><groupId>org.springframework.security</groupId><artifactId>spring-security-aspects</artifactId></aspectLibrary></aspectLibraries><showWeaveInfo>true</showWeaveInfo></configuration><dependencies><dependency><groupId>org.aspectj</groupId><artifactId>aspectjtools</artifactId><version>${aspectj.version}</version></dependency></dependencies><executions><execution><goals><goal>compile</goal><goal>test-compile</goal></goals></execution></executions></plugin></plugins></build><repositories><repository><id>qcadoo-releases-repository</id><url>https://nexus.qcadoo.org/content/repositories/releases</url><releases><enabled>true</enabled><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></repository></repositories><scm><connection>scm:git:ssh://github.com/qcadoo/mes.git</connection><developerConnection>scm:git:ssh://git@github.com/qcadoo/mes.git</developerConnection><url>http://github.com/qcadoo/mes</url><tag>HEAD</tag></scm><distributionManagement><repository><id>qcadoo-releases-repository</id><url>https://nexus.qcadoo.org/content/repositories/releases</url></repository><snapshotRepository><id>qcadoo-snapshots-repository</id><url>https://nexus.qcadoo.org/content/repositories/snapshots</url><uniqueVersion>false</uniqueVersion></snapshotRepository></distributionManagement><profiles><profile><id>profile</id><activation><property><name>profile</name></property></activation><properties><profile.name>${profile}</profile.name></properties></profile></profiles></project>

mes项目pom.xml深度解析

该pom.xml是Qcadoo MES项目的父级POM(packaging=pom),用于管理多模块项目的公共配置、依赖及构建逻辑。以下从核心模块逐一解析:


1. 基础信息与父POM
  • XML声明与Schema:声明了XML版本和Maven POM的Schema( http://maven.apache.org/POM/4.0.0),确保POM符合Maven 4.0.0规范。
  • 父POM:继承自com.qcadoo.maven:qcadoo-super-pom:0.0.1,通过父POM复用公共配置(如插件、依赖管理、属性等),减少重复代码,保持项目一致性。

2. 项目坐标与基本信息
  • 坐标(GAV)
    • groupId: com.qcadoo.mes:组织/项目组标识。
    • artifactId: mes:项目唯一标识。
    • version: 1.5-SNAPSHOT:当前版本(快照版,开发中)。
    • packaging: pom:声明为聚合项目(多模块),非具体构建产物(如JAR/WAR)。
  • 元数据
    • name: Qcadoo MES:项目名称。
    • url: https://github.com/qcadoo/mes:项目主页(GitHub仓库)。
    • organization:所属公司(Qcadoo Limited)及官网。
    • inceptionYear: 2010:项目起始年份。
    • licenses:声明许可证为GNU Affero General Public License(AGPL),并附许可证文件链接。

3. 子模块管理(modules)
  • 定义了两个子模块:
    • mes-plugins:插件模块(可能包含功能扩展插件)。
    • mes-application:核心应用模块(可能包含业务逻辑与启动配置)。
  • Maven构建时会依次编译、打包这两个子模块。

4. 属性(properties)
  • 自定义属性
    • qcadoo.buildVersionForUser: 3.0.14:用户可见的版本号(可能与内部快照版本区分)。
    • qcadoo.version: ${project.version}:引用当前项目版本(1.5-SNAPSHOT),用于统一管理依赖版本。
    • qcadoo.plugin.version: 1.5:插件模块版本。
    • qcadoo.maven.plugin.version: 1.5-SNAPSHOT:Maven插件版本(与项目同版本)。
    • profile.name: tomcat(重复声明两次,冗余):可能用于环境配置(如Tomcat容器)。
  • 注意profile.name重复声明无实际意义,建议保留一个;qcadoo.version通过${project.version}动态引用,确保依赖版本与项目版本同步。

5. 依赖管理(dependencies)
  • 核心依赖:几乎所有依赖均为Qcadoo平台内部模块(groupId: com.qcadoo),版本统一使用${qcadoo.version},避免版本冲突。
    • 关键依赖示例:
      • qcadoo-plugin:Qcadoo插件核心库。
      • qcadoo-security:安全认证模块。
      • qcadoo-view:视图渲染模块(注意version重复声明,冗余)。
      • qcadoo-testing:测试工具库(scope=test,仅测试时生效)。
  • 作用:通过父POM或当前POM统一管理依赖版本,确保各模块间依赖兼容。

6. 构建配置(build)
  • 插件管理(plugins)
    • aspectj-maven-plugin:用于AspectJ编译时织入(AOP增强)。
      • 配置Java版本:source/target/complianceLevel=1.8(Java 8)。
      • 切面库(aspectLibraries):引入Spring核心切面(spring-aspects)和安全切面(spring-security-aspects,重复声明一次)。
      • 依赖:aspectjtools(AspectJ工具库),版本由${aspectj.version}指定(需父POM或外部定义,否则构建失败)。
      • 执行目标:编译期和测试编译期织入切面(compiletest-compile)。
    • 注意aspectj.version未在当前POM中定义,需检查父POM是否提供,否则会导致构建错误。

7. 仓库配置(repositories)
  • qcadoo-releases-repository:指向Qcadoo内部发布仓库( https://nexus.qcadoo.org/content/repositories/releases)。
    • 仅启用发布版本(releases.enabled=true),且不更新快照(updatePolicy=never)。
    • XML格式问题:存在多余的</repository>闭合标签(原文件中<repository>闭合两次),会导致XML解析失败,需修正。

8. 源代码管理(scm)
  • 配置Git仓库信息:
    • connection:SSH协议的Git连接地址(ssh://github.com/qcadoo/mes.git)。
    • developerConnection:开发者SSH连接地址(ssh://git@github.com/qcadoo/mes.git)。
    • url:GitHub网页地址( http://github.com/qcadoo/mes)。
    • tag: HEAD:默认打标签指向最新提交。

9. 制品分发(distributionManagement)
  • 发布仓库(releaseRepository):使用qcadoo-releases-repository存储正式发布包。
  • 快照仓库(snapshotRepository):使用qcadoo-snapshots-repository https://nexus.qcadoo.org/content/repositories/snapshots)存储快照包,且uniqueVersion=false(关闭快照版本唯一后缀,简化管理)。

10. 环境配置(profiles)
  • 定义了一个名为profile的环境配置:
    • 激活条件:当系统属性profile存在时触发(<property><name>profile</name></property>)。
    • 作用:设置profile.name属性为${profile}(动态传递环境参数,如dev/test/prod),可能用于差异化配置(如数据源、日志级别)。
    • 注意:原文件中<activation>标签存在多余的</activation>闭合标签(共三个),导致XML结构错误,需修正为单层闭合。

总结与问题

  • 核心价值:作为多模块父POM,统一管理子模块坐标、依赖版本、构建插件及环境配置,确保项目一致性和可维护性。

6.5 Maven POM 文件总结(mes

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.qcadoo.mes</groupId><artifactId>mes</artifactId><version>1.5-SNAPSHOT</version></parent><artifactId>mes-application</artifactId><packaging>war</packaging><name>Qcadoo MES :: Application</name><properties><maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format></properties><dependencies><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-deliveries</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-production-scheduling</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-orders</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-basic</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-states</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-material-requirements</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-work-plans</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-technologies</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-stoppage</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-gantt-for-shifts</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-gantt-for-operation</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-material-flow</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-material-flow-resources</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-time-norms-for-operations</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cost-norms-for-product</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cost-norms-for-operation</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cost-calculation</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-production-counting</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-basic-production-counting</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cost-norms-for-materials</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-production-lines</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-operation-time-calculations</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-operation-cost-calculations</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-production-per-shift</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-deviation-causes-reporting</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-line-changeover-norms</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-line-changeover-norms-for-orders</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-wage-groups</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-assignment-to-shift</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cost-norms-for-operation-in-order</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-avg-labor-cost-calc-for-order</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-column-extension</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-deliveries-to-material-flow</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cat-numbers-in-deliveries</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-master-orders</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cmms-machine-parts</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-warehouse-minimal-state</artifactId><version>1.5-SNAPSHOT</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugins-unit-conversion-management</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-commons</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>com.qcadoo</groupId><artifactId>qcadoo-plugins-plugin-management</artifactId><version>${qcadoo.version}</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2</version></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.3.1</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-jsp</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-core</artifactId><version>2.2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>com.yahoo.platform.yui</groupId><artifactId>yuicompressor</artifactId><version>2.3.6</version></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>${postgres.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-product-catalog-numbers</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-tech-subcontracting</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-tech-subcontr-for-oper-tasks</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-tech-subcontr-for-deliveries</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-tech-subcontr-for-production-counting</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-deliveries-min-state</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-advanced-genealogy</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-supply-negotiations</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-cat-numbers-in-negot</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-product-flow-thru-division</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-material-requirement-coverage-for-order</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-tech-subcontr-for-negot</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-tech-subcontr-for-order-supplies</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-order-supplies</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-orders-for-subproducts-generation</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-time-gaps-preview</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-technologies-generator</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-email-notifications</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-deliveries-min-state</artifactId><version>${project.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>${maven.antrun.plugin.version}</version><executions><execution><phase>generate-resources</phase><configuration><target><mkdir dir="${basedir}/target/classes"/><echo file="${basedir}/target/classes/build.properties">buildApplicationName = Qcadoo MESbuildApplicationVersion = ${project.version}buildFrameworkVersion = ${qcadoo.version}buildVersionForUser = ${qcadoo.buildVersionForUser}buildTime = ${maven.build.timestamp}${buildNumber}buildRevision = ${buildRevision}</echo></target></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build><profiles><profile><id>tomcat</id><build><plugins><plugin><groupId>com.qcadoo</groupId><artifactId>qcadoo-maven-plugin</artifactId><version>${qcadoo.maven.plugin.version}</version><configuration><jdbcDriver>${basedir}/target/tomcat-archiver/${project.artifactId}/webapps/ROOT/WEB-INF/lib/postgresql-${postgres.version}.jar</jdbcDriver><aspectJWeaver>${basedir}/target/tomcat-archiver/${project.artifactId}/webapps/ROOT/WEB-INF/lib/aspectjweaver-${aspectj.version}.jar</aspectJWeaver><configuration>${basedir}/conf/${profile.name}/</configuration><rootFilesDirectory>${basedir}/root/</rootFilesDirectory></configuration><executions><execution><id>prepare-tomcat-package</id><phase>package</phase><goals><goal>tomcat</goal></goals></execution></executions></plugin></plugins></build></profile><profile><id>qcadoodev</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>${maven.antrun.plugin.version}</version><executions><execution><id>deploy-to-qcadoodev</id><phase>deploy</phase><configuration><target><copy file="${basedir}/target/${project.artifactId}.zip"tofile="/home/${shell.user}/deploy/${shell.user}.zip"/></target></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build><distributionManagement><repository><id>qcadoo-releases-repository</id><url>file://target</url></repository><snapshotRepository><id>qcadoo-snapshots-repository</id><url>file://target</url><uniqueVersion>false</uniqueVersion></snapshotRepository></distributionManagement></profile><profile><id>package</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>${maven.antrun.plugin.version}</version><executions><execution><id>package-to-qcadoodev</id><phase>deploy</phase><configuration><target><copy file="${basedir}/target/${project.artifactId}.zip"tofile="/home/packages/qcdmes_bin_daily_build/${package.filename}.zip"/></target></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build><distributionManagement><repository><id>qcadoo-releases-repository</id><url>file://target</url></repository><snapshotRepository><id>qcadoo-snapshots-repository</id><url>file://target</url><uniqueVersion>false</uniqueVersion></snapshotRepository></distributionManagement></profile><profile><id>deployApplication</id><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>wagon-maven-plugin</artifactId><version>${wagon.maven.plugin.version}</version><executions><execution><id>deployApplication</id><phase>deploy</phase><goals><goal>upload-single</goal></goals><configuration><serverId>qcadoo-public</serverId><fromFile>${basedir}/target/${project.artifactId}.zip</fromFile><toFile>${destination.file.name}.zip</toFile><url>${wagon.url}</url></configuration></execution></executions><dependencies><dependency><groupId>org.apache.maven.wagon</groupId><artifactId>wagon-ssh</artifactId><version>${wagon.ssh.version}</version></dependency></dependencies></plugin></plugins></build></profile></profiles></project>

深度解析,重点围绕 MES 应用程序的构建配置 展开:


6.5.1 基础信息

  1. 项目标识

    • Group IDcom.qcadoo.mes
      表明项目属于 QCADOO MES 模块化生产管理系统 的组件。
    • Artifact IDmes-application
      核心模块,表示 MES 系统的应用程序主体。
    • Version1.5-SNAPSHOT
      开发中的快照版本,非正式发布。
  2. 打包类型war
    打包为 Web 应用程序归档文件,部署于 Servlet 容器(如 Tomcat)。


6.5.2 依赖管理

1. 核心依赖
  • 插件化架构
    项目依赖了大量 mes-plugins-* 插件(如 deliveriesproduction-schedulingorders),体现了 模块化设计思想。每个插件负责特定业务功能(如订单管理、生产排程、物料需求计算)。
  • 关键依赖示例
    <dependency><groupId>com.qcadoo.mes</groupId><artifactId>mes-plugins-orders</artifactId><version>1.5-SNAPSHOT</version>
    </dependency>
    
    此类插件通过统一版本号 (1.5-SNAPSHOT) 实现协同开发。
2. 第三方库
  • 持久层: PostgreSQL 驱动 (postgresql),版本由 ${postgres.version} 动态控制。
  • 缓存: Ehcache (ehcache-core) 用于性能优化。
  • Web 组件: Apache Tiles (tiles-jsp) 和 JSTL (jstl) 支持视图渲染。
  • 工具类: Commons FileUpload (commons-fileupload) 处理文件上传。
3. 潜在问题
  • 重复依赖:部分插件(如 mes-plugins-stoppage)被重复声明,需清理。
  • 版本冲突风险:多个插件依赖同一库时,需确保版本兼容性。

6.5.3 构建与插件配置

1. 资源处理
  • maven-antrun-plugin
    在 generate-resources 阶段生成 build.properties 文件,记录构建元数据(如版本号、时间戳)。例如:
     

    properties

    buildApplicationVersion = 1.5-SNAPSHOT
    buildTime = 2025-07-23 14:30
    
2. 环境适配
  • Tomcat 部署 Profile (tomcat)
    配置 JDBC 驱动和 AspectJ Weaver 路径,支持 Tomcat 环境部署。
  • QCADOO 开发环境 Profile (qcadoodev)
    将构建产物直接部署到指定目录(如 /home/${shell.user}/deploy/)。
  • 分发 Profile (package)
    将 ZIP 包分发至每日构建目录(如 /home/packages/qcdmes_bin_daily_build/)。
3. 远程部署
  • Wagon 插件 (deployApplication)
    通过 SSH 协议将 WAR 文件上传至远程仓库(URL 由 ${wagon.url} 指定),实现自动化部署。

6.5.4 版本管理

  • 变量引用
    使用 ${qcadoo.version} 和 ${postgres.version} 统一管理依赖版本,降低维护成本。
  • 快照版本
    所有插件均使用 -SNAPSHOT 后缀,表明处于开发阶段,需关注依赖同步问题。

6.6 Maven POM 文件总结(mes-plugin

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.qcadoo.mes</groupId><artifactId>mes</artifactId><version>1.5-SNAPSHOT</version></parent><artifactId>mes-plugins</artifactId><packaging>pom</packaging><name>Qcadoo MES :: Plugins</name><modules><module>mes-plugins-orders</module><module>mes-plugins-basic</module><module>mes-plugins-material-requirements</module><module>mes-plugins-work-plans</module><module>mes-plugins-technologies</module><module>mes-plugins-production-scheduling</module><module>mes-plugins-stoppage</module><module>mes-plugins-gantt-for-operation</module><module>mes-plugins-gantt-for-shifts</module><module>mes-plugins-material-flow</module><module>mes-plugins-material-flow-resources</module><module>mes-plugins-time-norms-for-operations</module><module>mes-plugins-cost-norms-for-operation</module><module>mes-plugins-cost-norms-for-product</module><module>mes-plugins-cost-calculation</module><module>mes-plugins-production-counting</module><module>mes-plugins-basic-production-counting</module><module>mes-plugins-cost-norms-for-materials</module><module>mes-plugins-production-lines</module><module>mes-plugins-operation-time-calculations</module><module>mes-plugins-operation-cost-calculations</module><module>mes-plugins-deviation-causes-reporting</module><module>mes-plugins-production-per-shift</module><module>mes-plugins-line-changeover-norms</module><module>mes-plugins-line-changeover-norms-for-orders</module><module>mes-plugins-states</module><module>mes-plugins-wage-groups</module><module>mes-plugins-assignment-to-shift</module><module>mes-plugins-cost-norms-for-operation-in-order</module><module>mes-plugins-avg-labor-cost-calc-for-order</module><module>mes-plugins-product-catalog-numbers</module><module>mes-plugins-tech-subcontracting</module><module>mes-plugins-tech-subcontr-for-oper-tasks</module><module>mes-plugins-deliveries</module><module>mes-plugins-tech-subcontr-for-deliveries</module><module>mes-plugins-column-extension</module><module>mes-plugins-deliveries-to-material-flow</module><module>mes-plugins-tech-subcontr-for-production-counting</module><module>mes-plugins-cat-numbers-in-deliveries</module><module>mes-plugins-master-orders</module><module>mes-plugins-cmms-machine-parts</module><module>mes-plugins-warehouse-minimal-state</module><module>mes-plugins-advanced-genealogy</module><module>mes-plugins-supply-negotiations</module><module>mes-plugins-cat-numbers-in-negot</module><module>mes-plugins-product-flow-thru-division</module><module>mes-plugins-material-requirement-coverage-for-order</module><module>mes-plugins-tech-subcontr-for-negot</module><module>mes-plugins-tech-subcontr-for-order-supplies</module><module>mes-plugins-order-supplies</module><module>mes-plugins-orders-for-subproducts-generation</module><module>mes-plugins-time-gaps-preview</module><module>mes-plugins-technologies-generator</module><module>mes-plugins-email-notifications</module><module>mes-plugins-deliveries-min-state</module></modules></project>

Maven聚合模块(packaging=pom)的pom.xml文件,属于Qcadoo MES系统插件层的核心配置。以下从模块结构、功能定位、设计逻辑潜在问题四个维度进行深度解析:

6.6.1 模块结构与功能划分

该POM通过<modules>标签聚合了59个子模块(实际统计去重后为57个,存在重复项),所有子模块均以mes-plugins-开头,命名直接映射MES系统的核心业务场景,体现了高度的功能模块化设计。典型模块及其功能推测如下:

模块名称推测功能
mes-plugins-orders订单管理(如订单创建、状态跟踪、生命周期管理)
mes-plugins-material-requirements物料需求计算(基于BOM、生产计划的需求展开)
mes-plugins-production-scheduling生产排程(设备、人员、时间的资源调度)
mes-plugins-material-flow物料流动管理(车间内物料流转路径规划、在制品追踪)
mes-plugins-cost-norms-*成本标准定义(操作、产品、物料等维度的成本基准)
mes-plugins-production-counting生产计数(实际产量统计、良品率计算)
mes-plugins-tech-subcontracting技术外包管理(外协工序的定义、供应商协同)
mes-plugins-deliveries交付管理(客户订单交付状态、物流协调)
MES - Advanced GenealogyadvancedGenealogygenealogyQcadoo Limited1.5.0有效AGPL
1MES - Assignment to shiftassignmentToShiftplanningQcadoo Limited1.5.0有效AGPL
2MES - Average labor hourly calculator for orderavgLaborCostCalcForOrderplanningQcadoo Limited1.5.0有效AGPL
3MES - BasicbasicbasicQcadoo Limited1.5.0有效AGPL
4MES - Basic Production CountingbasicProductionCountingtrackingQcadoo Limited1.5.0有效AGPL
5MES - Catalog numbers in deliveriescatNumbersInDeliveriessuppliesQcadoo Limited1.5.0有效AGPL
6MES - Catalog numbers in negotiationscatNumbersInNegotsuppliesQcadoo Limited1.5.0有效AGPL
7MES - CMMS Machine PartscmmsMachinePartsotherQcadoo Limited1.5.0有效AGPL
8MES - Column ExtensioncolumnExtensionsuppliesQcadoo Limited1.5.0有效AGPL
9MES - Cost calculationcostCalculationcalculationsQcadoo Limited1.5.0有效AGPL
10MES - Cost norms for materialscostNormsForMaterialsbasicQcadoo Limited1.5.0有效AGPL
11MES - Cost Norms for OperationcostNormsForOperationtechnologiesQcadoo Limited1.5.0有效AGPL
12MES - Cost Norms for Operation in ordercostNormsForOperationInOrderplanningQcadoo Limited1.5.0有效AGPL
13MES - Cost Norms for ProductcostNormsForProductbasicQcadoo Limited1.5.0有效AGPL
14MES - DeliveriesdeliveriessuppliesQcadoo Limited1.5.0有效AGPL
15MES - Deliveries Min StatedeliveriesMinStatedeliveriesQcadoo Limited1.5.0有效AGPL
16MES - Deliveries to material flowdeliveriesToMaterialFlowsuppliesQcadoo Limited1.5.0有效AGPL
17MES - Deviation causes reportingdeviationCausesReportingplanningQcadoo Limited1.5.0有效AGPL
18MES - Email notificationsemailNotificationsbasicQcadoo Limited1.5.0有效AGPL
19MES - Gantt for operationsganttForOperationsplanningQcadoo Limited1.5.0有效AGPL
20MES - Gantt for shiftsganttForShiftsbasicQcadoo Limited1.5.0有效AGPL
21MES - Line changeover normslineChangeoverNormstechnologiesQcadoo Limited1.5.0有效AGPL
22MES - Line changeover normslineChangeoverNormsForOrdersplanningQcadoo Limited1.5.0有效AGPL
23Qcadoo MES :: Plugins :: Sales ordersmasterOrdersplanningQcadoo Limited1.5.0有效AGPL
24MES - Material Flow ModulematerialFlowflowQcadoo Limited1.5.0有效AGPL
25MES - Material Flow Resources ModulematerialFlowResourcesflowQcadoo Limited1.5.0有效AGPL
26MES - Material Requirement Coverage For OrdermaterialRequirementCoverageForOrderotherQcadoo Limited1.5.0有效AGPL
27MES - Material RequirementsmaterialRequirementscalculationsQcadoo Limited1.5.0有效AGPL
28MES - Operation cost calculationsoperationCostCalculationscalculationsQcadoo Limited1.5.0有效AGPL
29MES - Operation time calculationsoperationTimeCalculationscalculationsQcadoo Limited1.5.0有效AGPL
30MES - OrdersordersplanningQcadoo Limited1.5.0有效AGPL
31MES - Orders For Subproducts GenerationordersForSubproductsGenerationotherQcadoo Limited1.5.0有效AGPL
32MES - Order suppliesorderSuppliessuppliesQcadoo Limited1.5.0有效AGPL
33MES - Product catalog numbersproductCatalogNumbersbasicQcadoo Limited1.5.0有效AGPL
34MES - Product Flow Thru DivisionproductFlowThruDivisionotherQcadoo Limited1.5.0有效AGPL
35MES - Production Counting and BalanceproductionCountingtrackingQcadoo Limited1.5.0有效AGPL
36MES - Production linesproductionLinesbasicQcadoo Limited1.5.0有效AGPL
37MES - Production per shiftproductionPerShiftplanningQcadoo Limited1.5.0有效AGPL
38MES - Production SchedulingproductionSchedulingplanningQcadoo Limited1.5.0有效AGPL
39Qcadoo Custom TranslationqcadooCustomTranslationframeworkQcadoo Limited1.5.0有效AGPL
40Qcadoo Custom Translation ManagementqcadooCustomTranslationsframeworkQcadoo Limited1.5.0有效AGPL
41Qcadoo Dictionaries ManagementqcadooDictionariesframeworkQcadoo Limited1.5.0有效AGPL
42Qcadoo ExportqcadooExportframeworkQcadoo Limited1.5.0有效AGPL
43Qcadoo Framework LocalizationqcadooLocalizationframeworkQcadoo Limited1.5.0有效AGPL
44Qcadoo Menu ManagementqcadooMenuframeworkQcadoo Limited1.5.0有效AGPL
45Qcadoo Framework ModelqcadooModelframeworkQcadoo Limited1.5.0有效AGPL
46Qcadoo Framework PluginqcadooPluginframeworkQcadoo Limited1.5.0有效AGPL
47Qcadoo Plugin ManagementqcadooPluginsframeworkQcadoo Limited1.5.0有效AGPL
48Qcadoo Framework ReportqcadooReportframeworkQcadoo Limited1.5.0有效AGPL
49Qcadoo Framework SecurityqcadooSecurityframeworkQcadoo Limited1.5.0有效AGPL
50Qcadoo Unit Conversion ManagementqcadooUnitConversionsframeworkQcadoo Limited1.5.0有效AGPL
51Qcadoo User ManagementqcadooUsersframeworkQcadoo Limited1.5.0有效AGPL
52Qcadoo Framework ViewqcadooViewframeworkQcadoo Limited1.5.0有效AGPL
53MES - StatesstatesotherQcadoo Limited1.5.0有效AGPL
54MES - StoppagestoppageotherQcadoo Limited1.5.0有效AGPL
55MES - Supply negotiationssupplyNegotiationssuppliesQcadoo Limited1.5.0有效AGPL
56MES - TechnologiestechnologiestechnologiesQcadoo Limited1.5.0有效AGPL
57MES - Technologies GeneratortechnologiesGeneratorotherQcadoo Limited1.5.0有效AGPL
58MES - Technology subcontractingtechSubcontractingtechnologiesQcadoo Limited1.5.0有效AGPL
59MES - Technology subcontracting for deliveriestechSubcontrForDeliveriessuppliesQcadoo Limited1.5.0有效AGPL
60MES - Technology subcontracting for negotiationstechSubcontrForNegotsuppliesQcadoo Limited1.5.0有效AGPL
61MES - Technology subcontracting for operational taskstechSubcontrForOperTasksplanningQcadoo Limited1.5.0有效AGPL
62MES - Technology subcontracting for order suppliestechSubcontrForOrderSuppliessuppliesQcadoo Limited1.5.0有效AGPL
63MES - Technology subcontracting for production countingtechSubcontrForProductionCountingtrackingQcadoo Limited1.5.0有效AGPL
64MES - Time Gaps PreviewtimeGapsPreviewotherQcadoo Limited1.5.0有效AGPL
65MES - Time norms for operationstimeNormsForOperationstechnologiesQcadoo Limited1.5.0有效AGPL
66MES - Wage groupswageGroupsbasicQcadoo Limited1.5.0有效AGPL
67MES - Warehouse minimal statewarehouseMinimalStateotherQcadoo Limited1.5.0有效AGPL
68MES - Work PlansworkPlansplanningQcadoo Limited1.5.0有效AGPL

6.6.2 项目定位:MES插件层的聚合与扩展

该模块是Qcadoo MES系统(父模块com.qcadoo.mes:mes:1.5-SNAPSHOT)的子模块,定位为插件层的核心聚合器,主要作用包括:

  1. 模块化管理:通过Maven聚合模块机制,将分散的功能插件(如订单、物料、生产等)统一管理,降低系统耦合度。
  2. 依赖统一控制:父模块可定义公共依赖(如Spring、Hibernate、Qcadoo框架库等),子模块继承后避免重复声明,确保依赖版本一致性。
  3. 构建与发布协调:通过一次Maven构建命令(如mvn install)即可编译、测试并打包所有插件模块,简化持续集成流程。

6.6.3 设计逻辑分析

  1. 业务驱动的模块拆分:子模块命名严格对齐MES核心业务流程(如生产、物料、质量、成本),体现“按业务功能划分插件”的设计原则,便于后续功能扩展或裁剪。
  2. 可复用性优先:每个插件模块理论上可独立部署(需结合Qcadoo框架规范),支持不同客户按需组合功能(如仅需物料管理插件时,可单独引入mes-plugins-material-flow)。
  3. 版本一致性:所有插件继承父模块版本1.5-SNAPSHOT,确保同一版本的MES系统中各插件兼容,避免因版本冲突导致的功能异常。

6.6.4 潜在问题与建议

  1. 重复模块项:文档中存在重复的子模块声明(如mes-plugins-cost-norms-for-materialsmes-plugins-supply-negotiations各出现2次)。这可能是文档编写错误,实际项目中需检查是否为:
    • 笔误:删除重复项;
    • 真实重复:若为不同子模块但命名相同,需调整模块名(如添加后缀区分),避免Maven构建时冲突。
  2. 插件间依赖未显式声明:当前POM仅聚合模块,未体现子模块间的依赖关系(如mes-plugins-production-scheduling可能依赖mes-plugins-material-requirements)。建议在子模块的pom.xml中通过<dependencies>显式声明内部依赖,确保构建顺序正确。
  3. 快照版本风险:父模块版本为1.5-SNAPSHOT(快照版),表示系统仍处于开发阶段。生产环境中需升级为正式版本(如1.5.0.RELEASE),并确保所有插件的API稳定性。

总结

该POM文件清晰展示了Qcadoo MES系统插件层的模块化架构,通过Maven聚合机制实现了功能解耦与统一管理,符合MES系统“灵活扩展、按需部署”的核心需求。后续优化需重点解决重复模块声明问题,并完善插件间依赖管理,以提升系统的可维护性和稳定性。

参见:

System MES. Program do zarządzania produkcją dla małych i średnich firm | qcadoo MES

智能制造之路-西门子数字孪生最佳实践-上海尔萨信息科技有限公司

http://www.dtcms.com/a/295025.html

相关文章:

  • 从订单簿到AMM:一场去中心化交易所的技术革命
  • 彻底掌握双列集合——Map接口以及实现类和常用API及其底层原理
  • 1688商品数据采集的应用行业与接入方式
  • 人工智能之数学基础:事件间的运算
  • JVM、Dalvik、ART垃圾回收机制
  • OpenLayers 快速入门(八)事件系统
  • java基础(the 15th day)
  • freelancer是什么用工模式?有什么好处和坏处呢?
  • Log4j2漏洞vul-hub通关教程
  • 根据图片的r值来进行透明剔除
  • SpringBoot RESTful API设计指南
  • C++day1
  • #Linux内存管理# 在一个播放系统中同时打开几十个不同的高清视频文件,发现播放有些卡顿,打开视频文件是用mmap函数,请简单分析原因。
  • SQL难点突破之复杂业务逻辑的SQL查询实战
  • pcb碳油板工艺流程
  • zabbix基于GNS3监控部署
  • 学校电子钟系统时间为何不同步?如何解决
  • 面试实战,问题六,被问数据库索引,怎么回答
  • 期权遇到股票分红会调整价格吗?
  • 使用JMeter进行压力测试(以黑马点评为例、详细图解)
  • 定义损失函数并以此训练和评估模型
  • 力扣面试150题--搜索旋转排序数组
  • RT_thread的工作原理及应用
  • java有哪些字符需要转译
  • 2026 拼多多秋招内推码(提前批)
  • 前端学习之JavaScript事件监听解析
  • Bonk发币教学全流程
  • 欧盟网络安全标准草案EN 18031详解
  • JDialong弹窗
  • 计算机网络学习----Https协议