前端项目的构建流程无缝集成到 Maven 生态系统(一)


在阅读 nexus-public 过程中,发现 ui 无缝集成到 maven 中,这个插件在国外用的还是比较多的。当前后端一体化的工具性应用,一来省去了前后端来回沟通的成本,二来大大降低了协作时间,最终达成软件工具开发的低成本。正文如下

extjs-maven-plugin 的作用详解

extjs-maven-plugin 是专为 Ext JS 前端框架设计的 Maven 插件,主要用于将 Ext JS 项目的构建流程无缝集成到 Maven 生态系统中,仅作了解,不推荐使用,目前己有新的插件使用现代 前端工具集成的插件。它帮助开发者通过 Maven 管理 Ext JS 的依赖、构建、优化和部署,尤其适用于前后端分离项目中需要与 Java 后端(如 Spring Boot)协同构建的场景。


核心功能

1. Ext JS 依赖管理
  • 自动下载 Ext JS SDK
    通过 Maven 仓库获取指定版本的 Ext JS 框架(如 ext-7.4.0),无需手动下载并解压到项目目录。
  • 依赖声明示例
    <dependency><groupId>com.sencha.extjs</groupId><artifactId>ext</artifactId><version>7.4.0</version><type>zip</type>
    </dependency>
    
2. 构建流程自动化
  • 集成 Sencha Cmd
    封装 Sencha Cmd 命令(如 sencha app build),通过 Maven 生命周期自动执行 Ext JS 代码的编译、压缩和优化。
  • 关键构建阶段
    • 开发模式:生成未压缩的调试代码(便于调试)。
    • 生产模式:压缩 JavaScript/CSS、合并资源、Tree Shaking 移除未使用代码。
3. 资源优化与打包
  • 代码压缩:使用 UglifyJS 或 Closure Compiler 压缩 JavaScript。
  • 主题编译:将 SASS/SCSS 编译为 CSS,并生成主题资源。
  • 资源嵌入:将构建后的静态资源(JS/CSS/图片)打包到 Java Web 项目(如 WAR 包)的 src/main/webapp 目录。
4. 与 Maven 生命周期集成
  • 绑定到 Maven Phase
    常用绑定阶段:
    • generate-resources:生成 Ext JS 构建所需的临时文件。
    • compile:执行 Ext JS 代码编译。
    • package:将最终资源打包到 WAR/JAR 中。
  • 示例配置
    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>extjs-maven-plugin</artifactId><version>1.0.0</version><executions><execution><phase>generate-resources</phase><goals><goal>build</goal></goals></execution></executions>
    </plugin>
    
5. 多环境支持
  • Profile 区分环境
    通过 Maven Profile 配置不同环境(如 dev/prod)的构建参数:
    <profiles><profile><id>prod</id><properties><build.environment>production</build.environment></properties></profile>
    </profiles>
    

典型使用场景

1. 前后端统一构建
  • 场景:Java 后端(如 Spring Boot)与 Ext JS 前端共用一个 Maven 项目。
  • 流程
    mvn clean install
    → 编译 Java 代码
    → 触发 extjs-maven-plugin 编译 Ext JS
    → 将生成的 JS/CSS 复制到 `src/main/webapp`
    → 打包为 WAR 文件(包含前后端代码)
    
2. 持续集成(CI/CD)
  • 自动化流水线:在 Jenkins/GitLab CI 中通过一条命令完成全栈构建,无需手动执行 Sencha Cmd。
3. 依赖版本控制
  • 精确控制 Ext JS 版本:通过 Maven 的 <dependencyManagement> 统一管理版本,避免团队协作时的版本冲突。

配置参数示例

参数说明
<sourceDir>Ext JS 项目源码目录(默认 src/main/extjs
<buildEnvironment>构建环境(developmentproduction
<senchaCmdPath>自定义 Sencha Cmd 的安装路径(若未配置,插件尝试自动查找)
<enableOptimization>是否启用代码优化(默认 true

常见问题与解决

1. Sencha Cmd 未找到
  • 表现:构建失败,提示 sencha: command not found
  • 解决
    • 安装 Sencha Cmd 并配置环境变量。
    • 或在插件中指定路径:
      <configuration><senchaCmdPath>/opt/Sencha/Cmd/sencha</senchaCmdPath>
      </configuration>
      
2. 资源未打包到 WAR 中
  • 表现:构建成功后,WAR 包中缺少 Ext JS 资源。
  • 解决:检查插件配置是否绑定到 package 阶段,并确认资源输出目录与 Web 项目匹配。

与其他工具对比

工具extjs-maven-pluginWebpack/Gulp手动 Sencha Cmd
集成度高(与 Maven 深度集成)中(需独立配置)低(需手动操作)
学习成本低(对 Java 开发者友好)高(需前端构建知识)
适用场景前后端混合项目纯前端项目简单 Ext JS 项目
自动化能力强(全生命周期管理)中(需脚本编写)

总结

extjs-maven-plugin 的核心价值在于 简化 Ext JS 与 Java 后端项目的协同构建,通过 Maven 统一管理依赖、构建和部署,减少上下文切换,尤其适合企业级全栈应用。对于深度依赖 Ext JS 且已有 Maven 技术栈的团队,该插件能显著提升开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34765.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EDAS:投稿经验-word版本-问题解决

1. 字体不对&#xff0c;字体未嵌入问题 问题&#xff1a;word转PDF后&#xff0c;总是显示有字体格式不对&#xff08;忘记截图了&#xff09;。 办法&#xff1a;1. EDAS投稿PDF格式问题-CSDN博客-PDF上修改 IEEE论文检测的字体未嵌入问题Times New Ro…

TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)

TCP/IP协议中三次握手&#xff08;Three-way Handshake&#xff09;与四次挥手&#xff08;Four-way Wave&#xff09; 一、TCP三次握手&#xff08;Three-way Handshake&#xff09;二、TCP四次挥手&#xff08;Four-way Wave&#xff09;三、常见问题解答总结为什么三次握手不…

代码随想录Day16

Day16 二叉树part06 LeetCode 530.二叉搜索树的最小绝对差 题目描述 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 输入&#xff1a;root [4,2,6,1,3] 输出&…

用通义大模型写爬虫程序,汇总各科成绩

需求&#xff1a;根据各科网址&#xff0c;输入学号、姓名查询成绩。 中间反反复复很多次&#xff0c;本文只记下重点的几次和大模型的沟通历史。 输入界面 查询界面 round0&#xff08;最初的问题&#xff09; 请在windows下&#xff0c;使用python的selenium库&#xff0…

Java算法OJ(12)

目录 1.前言 2.正文 2.1Fib数列 2.2单词搜索 2.3杨辉三角 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来分享几道的练习题&#xff0c;欢迎大家在评论区多多交流&#xff0c;废话不多说让我们直接开始吧。 2.正文 2.1Fib数列 题目&#xff1a;斐波那契数列_牛客题霸…

使用傅里叶变换测量声卡的频率失真

文章目录 一、说明二、关于声卡的技术详述三、实验代码获取四、结论 一、说明 假如我希望使用我的声卡来模拟软件无线电&#xff0c;利用声音而不是射频信号。我的声卡能胜任这项任务吗&#xff1f;本文将研究一种技术来找出答案。另外&#xff0c;需要了解音频技术的读者也可…

LeetCode 解题思路 18(Hot 100)

解题思路&#xff1a; 继承 LinkedHashMap&#xff1a; 内置双向链表&#xff0c;自动维护节点的插入顺序和访问顺序。LRU 淘汰逻辑&#xff1a; 覆盖 removeEldestEntry&#xff0c;当元素数量超过 capacity 时&#xff0c;移除最旧条目。removeEldestEntry 方法提供钩子&…

JS基础部分

引入方式 内部脚本 外部脚本 变量 使用let声明变量&#xff0c;弱类型&#xff0c;使用const声明常量 因为箭头函数中this指针有问题&#xff0c;会默认指向父级对象 DOM 文档对象模型&#xff0c;将标记语言的各个部分封装成对应的对象。js通过dom就能够对html进行操作 …

Linux与深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介绍 在上一节已经完成了客户端和服务端基本的HTTP通信&#xff0c;但是前面的传递并没有完全体现出HTTP的序列化和反序列化&#xff0c;为了更好得理解其工作流程&#xff0c;在本节会以更加具体的方式分析到HTTP序列化和反序列化 本节会在介绍…

QT入门笔记2

目录 一、前言 二、串口助手实现 2.1、串口 2.1.1、可用串口信息-QSerialPortInfo 2.1.2、打开串口-QSerialPort 2.1.3、串口发送接收信息 2.2、定时器-QTimer 2.3、常用属性类型转换&#xff08;会更新&#xff09; 2.4、子控件组规则命名优化 一、前言 这个是学习Q…

DeepSeek(3):DeepSeek R1 提示词⼯程

1 提示词⼯程 5W1H&#xff08;What, Who, When, Where, Why, How&#xff09;是⼀种常⽤的信息收集和指令下达的⽅法。以下是根据这个⽅法为DeepSeek R1模型下指令的例⼦&#xff0c;以“学习⼤模型应⽤开发”为例&#xff1a; &#xff08;1&#xff09;What&#xff08;是什…

Linux入门 全面整理终端 Bash、Vim 基础命令速记

Linux入门 2025 超详细全面整理 Bash、Vim 基础命令速记 刚面对高级感满满的 终端窗口是不是有点懵&#xff1f;于是乎&#xff0c;这份手册就是为你准备的高效学习指南&#xff01;我把那些让人头大的系统设置、记不住的命令都整理成了对你更友好的格式&#xff0c;让你快速学…

RBA+minibatch的尝试

目录 还是咬着牙来写 RBA了 JAX JAX->TORCH torch tensor的变形 pytorch怎么把一个【3,3,5】的tensor变成【3,10,5】&#xff0c;多的用0填充 pytorch如何把shape【100】转成【100,1】 把torch shape【100,1】变成【100】 SQUEEZE grad_fn 不能两次反向传播 还…

Jupyter notebook的安装与使用

jupyter notebook的安装需要在已经安装配置好的conda环境下 win r 打开运行窗口 输入cmd回车 在cmd窗口中输入以下命令 conda install jupyter notebook安装完成后启动 jupyter notebook 也是在cmd窗口 输入 : jupyter notebook运行成功后第一次打开的时候需要选择一个浏览…

如何在Ubuntu上构建编译LLVM和ISPC,以及Ubuntu上ISPC的使用方法

之前一直在 Mac 上使用 ISPC&#xff0c;奈何核心/线程太少了。最近想在 Ubuntu 上搞搞&#xff0c;但是 snap 安装的 ISPC不知道为什么只能单核&#xff0c;很奇怪&#xff0c;就想着编译一下&#xff0c;需要 Clang 和 LLVM。但是 Ubuntu 很搞&#xff0c;他的很多软件版本是…

特殊的数字排序

0特殊的数字排序 - 蓝桥云课 问题描述 小明被挑选去参加一个ACM比赛。他的任务是解决一个很特别的问题&#xff1a;给定一个整数数组&#xff0c;但是只能通过交换任意两个数的方式来排序。听起来很简单对吗&#xff1f;但是这个问题的难点在于&#xff0c;只有某些数字是可以…

汽车感性负载-智能高边钳位能量计算

随着汽车电子技术的发展&#xff0c;新的电子电气架构下&#xff0c;越来越多的执行部件在车身出现&#xff0c;比如电磁阀、风机、水泵、油泵、雨刮继电器等常用的执行器&#xff0c; 它们一般都表现为感性特点。驱动这些负载的最简单和最常见的方法是将它们连接到高边侧开关(…

量化交易学习笔记02:双均线策略

双均线策略示例 个股&#xff1a;中国平安 回测日期&#xff1a;2022-5-1至2023-5-1 短均线&#xff1a;5天 长无线&#xff1a;10天 代码&#xff1a; def initialize(context):# 初始化此策略# 设置我们要操作的股票池, 这里我们只操作一支股票# """标的&qu…

利用余弦相似度在大量文章中找出抄袭的文章

我前面的2篇文章分别讲了如果利用余弦相似度来判断2篇文章的相似度&#xff0c;来确定文章是否存在抄袭&#xff0c;和余弦相似度的原理&#xff0c;即余弦相似度到底是怎么来判断文章的相似性高低的等等。这一篇再说下&#xff0c;对于文章字数多和大量文章时&#xff0c;如果…

在 Kaggle 中绘制中文乱码解决

在 Kaggle 中绘制中文时&#xff0c;需要设置 Matplotlib 的字体&#xff0c;否则中文会显示为乱码。可以使用 SimHei&#xff08;黑体&#xff09;或 Microsoft YaHei&#xff08;微软雅黑&#xff09;。 解决方案 使用 matplotlib 设置中文字体在 Kaggle 安装 SimHei 字体 …