`
lp895876294
  • 浏览: 284732 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

基于maven的seajs打包

 
阅读更多

场景:

       业务相关的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个阶段。

Lifecycle Phase 描述
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和SVN实现项目的自动打包流程,帮助开发者更有效地管理和部署代码。 【Maven】:...

    maven打包 maven打jar包详细步骤

    本文将详细讲解如何使用Maven来打包一个Java项目,并创建JAR文件。 首先,Maven有三个主要生命周期阶段:`clean`、`default`(也称为`compile`)和`install`。每个阶段包含一系列的阶段(或者称为目标,如`compile`...

    Java+IDEA+maven混淆打包

    本教程将详细介绍如何在IntelliJ IDEA(IDEA)中利用Maven进行混淆打包的步骤,确保整个过程顺利且有效。 首先,我们需要了解Maven,它是一个强大的项目管理和依赖管理工具。通过在`pom.xml`文件中配置,我们可以...

    基于maven创建web项目

    maven提供了一种标准化的方式来构建、打包和部署项目,它可以帮助开发者简化项目的构建、测试和部署过程。 在本文中,我们将基于maven创建一个web项目,首先我们需要搭建maven环境,包括安装Myeclipse2013、Tomcat...

    Java+IDEA+Maven混淆打包

    本教程将详细讲解如何在IntelliJ IDEA(IDEA)中利用Maven进行混淆打包,确保代码的安全性并提高可维护性。 首先,让我们了解一下涉及的工具和技术: 1. **Java**: 一种广泛使用的面向对象的编程语言,用于构建跨...

    构建基于Maven的SSH原型项目

    "构建基于Maven的SSH原型项目"这个主题,旨在帮助初学者理解和掌握如何使用这些技术搭建一个基础的Web应用。 首先,Maven是Apache开发的一个项目管理工具,它通过一个项目对象模型(Project Object Model,POM)来...

    基于maven的多框架和多视图融合技术.zip

    基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多框架和多视图融合技术.zip基于maven的多...

    如何用IntelliJ IDEA新建web项目,用maven打包成.jar

    idea新建maven web项目.zip Jetbrains IntelliJ IDEA创建基于maven打包工具的WEB网站项目 本项目使用的是SSM框架spring mvc,spring, mybatis.用maven打包成jar

    Maven打包,指定classes路径

    以上就是关于"Maven打包,指定classes路径"的知识点,主要涉及到Maven的资源配置和插件定制。理解并掌握这些配置可以帮助开发者更高效地管理和构建Java Web应用。同时,记得在实际项目中根据实际情况调整`pom.xml`,...

    基于Maven+IDEA的汽车销售管理系统源码.zip

    基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip基于Maven+IDEA的汽车销售管理系统源码.zip...

    基于maven+jsp+servlet+mysql+java的作业管理系统.zip

    基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+jsp+servlet+mysql+java的作业管理系统 基于maven+...

    maven 一键打包

    Maven 是一个基于项目对象模型(Project Object Model,POM)的概念,通过POM文件来管理和构建项目。它负责编译、测试、打包、部署等任务,通过统一的命令行接口执行各种构建生命周期阶段。 ### Maven 打包过程 1. ...

    maven打包出错解决办法,亲测绝对可以!

    然而,有时候在使用Maven进行打包操作时,可能会遇到各种问题。本篇文章将详细阐述如何解决Maven打包出错的问题,并分享一些关于搭建Maven私服的知识。 一、Maven打包出错常见原因及解决办法 1. **依赖冲突**:当...

    毕设项目:基于maven+SSM框架实现的云端汽修后台管理系统.zip

    毕设项目:基于maven+SSM框架实现的云端汽修后台管理系统 毕设项目:基于maven+SSM框架实现的云端汽修后台管理系统 毕设项目:基于maven+SSM框架实现的云端汽修后台管理系统 毕设项目:基于maven+SSM框架实现的云端...

    maven 过滤文件夹打包

    "maven 过滤文件夹打包"这个主题涉及到的是如何利用Maven的资源过滤功能来实现针对不同运行环境的配置文件打包。下面将详细解释这一过程。 在开发环境中,我们通常会有多种配置文件,比如`application-dev....

    maven项目打包

    Maven是一个基于项目对象模型(Project Object Model,POM)的项目管理工具。它能够管理项目的构建、报告和文档,通过使用一组预定义的生命周期和构建阶段,简化了Java项目的构建过程。Maven通过读取项目配置文件pom...

    Maven打包实战.zip

    本压缩包文件“Maven打包实战.zip”提供了关于Maven打包的实战教程,配合文章《Maven打包实战》(链接已提供)学习,将有助于深入理解Maven的打包流程。 首先,我们需要理解Maven的生命周期。Maven生命周期包括三个...

    maven3.5.4打包文件

    ** Maven 3.5.4 打包工具详解 ** Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它通过使用一种标准的项目对象模型(Project Object Model, POM),自动化构建过程,管理依赖关系,并执行各种生命周期...

    基于maven的SSM开发Demo

    在SSM项目中,Maven通过pom.xml文件来定义项目的依赖关系,使得我们可以方便地引入Spring、MyBatis等库,同时提供了一套标准化的构建流程,如编译、测试、打包和部署。 2. **Spring**:Spring是一个全面的Java企业...

Global site tag (gtag.js) - Google Analytics