场景:
业务相关的js使用seajs基础库,项目打包部署时需要使用seajs的spm命令将业务js逐个进行打包。
为了避免新打包js文件的浏览器缓存,每次打包需要设置一个版本号文件夹,打包时将js文件打到版本号文件夹下。
项目使用maven构建。
因此,在使用maven命令打包执行,需要在配置文件中设置版本号和批量执行spm命令。
附:需要替换版本号seajs打包的bat脚本文件(package-corejs.bat) 和 portable-config-maven-plugin配置(profiles/product.xml)如下。其中portable-config-maven-plugin插件能够在mvn package执行完之后替换war包中指定properties文件的内容。
package-corejs.bat
@echo off cd %~dp0 cd .. set tmodDir="src\main\webapp\resources\js" %需要设置的版本号% set version=0.0.17 cd %tmodDir% %改变系统编码方式,否则spm命令执行失败% chcp 850 %清理需要生成的打包目录% rd /q /s %version% %create core folder% md %version%\core %copy core to target folder% xcopy core %version%\core /e /y %create template folder% md %version%\template %copy template to target folder% xcopy template %version%\template /e /y %跳转到core目录下% cd core %针对js文件,逐个执行打包命令% for /D %%s in (*) do ( echo package : %%s spm build -I %%s -O ../../%version% --idleading core/%%s ) pause
profiles/product.xml文件
<?xml version="1.0" encoding="utf-8" ?> <portable-config> <config-file path="WEB-INF/classes/application.properties"> <!--需要配置的版本号--> <replace key='web.param.resource_version'>0.0.17</replace> </config-file> </portable-config>
解决:
1. 使用maven的antrun插件,在maven生命周期中的process-resources阶段,读取控制台输入的版本号,并替换配置文件中的版本号信息。
2. 使用maven的antrun插件,在maven生命周期中的process-resources阶段,执行package-corejs.bat脚本,完成seajs文件的生成。
maven-antrun-plugin插件配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>prepare-package-antrun</id> <phase>process-resources</phase> <configuration> <!--在控制台提示输入静态文件当前的版本号信息,并根据输入的版本号替换相应的静态文件设置--> <target name="get new version"> <input addproperty="resource.version" defaultvalue="0.0.1">please input the resource new version : </input> <!-- 创建临时文件存储输入的版本号信息 --> <propertyfile file="${project.build.directory}\resource_version.properties"> <entry key="resource.version" value="${resource.version}"/> </propertyfile> <!-- 替换掉整个项目中打包命令的版本号 --> <replaceregexp match="set version=(\d{1,}.){0,}\d{1,}" replace="set version=${resource.version}" flags="g" encoding="utf-8"> <fileset dir="${basedir}" includes="**/bin/package-corejs.bat"/> </replaceregexp> <!-- 替换掉整个项目中profile中xml配置的版本号 --> <replaceregexp match=".web.param.resource_version..(\d{1,}.){0,}\d{1,}" replace="'web.param.resource_version'>${resource.version}" flags="g" encoding="utf-8"> <fileset dir="${basedir}" includes="**/profiles/*.xml"/> </replaceregexp> <!--执行core目录下js文件的打包命令--> <echo>start execute package-corejs.bat</echo> <exec executable="${basedir}/bin/package-corejs.bat"></exec> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin>
注:使用spm打包会将打包js文件中相对依赖的js文件都打进来,并且不会根据逻辑解析require的依赖,所以可能会导致在初始化父模块的时候,将所有子模块的依赖都加载进来。而如果使用require.async会实时加载静态文件。最终是否使用spm打包,需要结合实际情况配置。不使用package.json,spm就不会打包。
附:maven构建的主要生命周期,它有以下23个阶段。
validate | Validates whether project is correct and all necessary information is available to complete the build process. |
initialize | Initializes build state, for example set properties |
generate-sources | Generate any source code to be included in compilation phase. |
process-sources | Process the source code, for example, filter any value. |
generate-resources | Generate resources to be included in the package. |
process-resources | Copy and process the resources into the destination directory, ready for packaging phase. |
compile | Compile the source code of the project. |
process-classes | Post-process the generated files from compilation, for example to do bytecode enhancement/optimization on Java classes. |
generate-test-sources | Generate any test source code to be included in compilation phase. |
process-test-sources | Process the test source code, for example, filter any values. |
test-compile | Compile the test source code into the test destination directory. |
process-test-classes | Process the generated files from test code file compilation. |
test | Run tests using a suitable unit testing framework(Junit is one). |
prepare-package | Perform any operations necessary to prepare a package before the actual packaging. |
package | Take the compiled code and package it in its distributable format, such as a JAR, WAR, or EAR file. |
pre-integration-test | Perform actions required before integration tests are executed. For example, setting up the required environment. |
integration-test | Process and deploy the package if necessary into an environment where integration tests can be run. |
pre-integration-test | Perform actions required after integration tests have been executed. For example, cleaning up the environment. |
verify | Run any check-ups to verify the package is valid and meets quality criterias. |
install | Install the package into the local repository, which can be used as a dependency in other projects locally. |
deploy | Copies the final package to the remote repository for sharing with other developers and projects. |
There are few important concepts related to Maven Lifecycles which are wroth to mention:
-
When a phase is called via Maven command, for example mvn compile, only phases upto and including that phase will execute.
-
Different maven goals will be bound to different phases of Maven lifecycle depending upon the type of packaging (JAR / WAR / EAR).
相关推荐
【标题】:“基于Maven+SVN自动打包” 在软件开发过程中,自动化构建与版本控制是提高效率的关键步骤。本文将深入探讨如何结合Maven和SVN实现项目的自动打包流程,帮助开发者更有效地管理和部署代码。 【Maven】:...
本文将详细讲解如何使用Maven来打包一个Java项目,并创建JAR文件。 首先,Maven有三个主要生命周期阶段:`clean`、`default`(也称为`compile`)和`install`。每个阶段包含一系列的阶段(或者称为目标,如`compile`...
本教程将详细介绍如何在IntelliJ IDEA(IDEA)中利用Maven进行混淆打包的步骤,确保整个过程顺利且有效。 首先,我们需要了解Maven,它是一个强大的项目管理和依赖管理工具。通过在`pom.xml`文件中配置,我们可以...
maven提供了一种标准化的方式来构建、打包和部署项目,它可以帮助开发者简化项目的构建、测试和部署过程。 在本文中,我们将基于maven创建一个web项目,首先我们需要搭建maven环境,包括安装Myeclipse2013、Tomcat...
本教程将详细讲解如何在IntelliJ IDEA(IDEA)中利用Maven进行混淆打包,确保代码的安全性并提高可维护性。 首先,让我们了解一下涉及的工具和技术: 1. **Java**: 一种广泛使用的面向对象的编程语言,用于构建跨...
"构建基于Maven的SSH原型项目"这个主题,旨在帮助初学者理解和掌握如何使用这些技术搭建一个基础的Web应用。 首先,Maven是Apache开发的一个项目管理工具,它通过一个项目对象模型(Project Object Model,POM)来...
基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多...
idea新建maven web项目.zip Jetbrains IntelliJ IDEA创建基于maven打包工具的WEB网站项目 本项目使用的是SSM框架spring mvc,spring, mybatis.用maven打包成jar
以上就是关于"Maven打包,指定classes路径"的知识点,主要涉及到Maven的资源配置和插件定制。理解并掌握这些配置可以帮助开发者更高效地管理和构建Java Web应用。同时,记得在实际项目中根据实际情况调整`pom.xml`,...
基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip...
基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+...
Maven 是一个基于项目对象模型(Project Object Model,POM)的概念,通过POM文件来管理和构建项目。它负责编译、测试、打包、部署等任务,通过统一的命令行接口执行各种构建生命周期阶段。 ### Maven 打包过程 1. ...
然而,有时候在使用Maven进行打包操作时,可能会遇到各种问题。本篇文章将详细阐述如何解决Maven打包出错的问题,并分享一些关于搭建Maven私服的知识。 一、Maven打包出错常见原因及解决办法 1. **依赖冲突**:当...
毕设项目:基于maven+SSM框架实现的云端汽修后台管理系统 毕设项目:基于maven+SSM框架实现的云端汽修后台管理系统 毕设项目:基于maven+SSM框架实现的云端汽修后台管理系统 毕设项目:基于maven+SSM框架实现的云端...
"maven 过滤文件夹打包"这个主题涉及到的是如何利用Maven的资源过滤功能来实现针对不同运行环境的配置文件打包。下面将详细解释这一过程。 在开发环境中,我们通常会有多种配置文件,比如`application-dev....
Maven是一个基于项目对象模型(Project Object Model,POM)的项目管理工具。它能够管理项目的构建、报告和文档,通过使用一组预定义的生命周期和构建阶段,简化了Java项目的构建过程。Maven通过读取项目配置文件pom...
本压缩包文件“Maven打包实战.zip”提供了关于Maven打包的实战教程,配合文章《Maven打包实战》(链接已提供)学习,将有助于深入理解Maven的打包流程。 首先,我们需要理解Maven的生命周期。Maven生命周期包括三个...
** Maven 3.5.4 打包工具详解 ** Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它通过使用一种标准的项目对象模型(Project Object Model, POM),自动化构建过程,管理依赖关系,并执行各种生命周期...
在SSM项目中,Maven通过pom.xml文件来定义项目的依赖关系,使得我们可以方便地引入Spring、MyBatis等库,同时提供了一套标准化的构建流程,如编译、测试、打包和部署。 2. **Spring**:Spring是一个全面的Java企业...