`
jicu7766240
  • 浏览: 17355 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

j2ee maven 结合gulp构建工具构建 war 自动刷新浏览器缓存

 
阅读更多

 前几年大多数时间,都是在做PC版的j2ee项目。

但随着移动互联的崛起,随即也转战到了微信公众号,移动端的开发。

 

网页缓存,以前一直知道,却没有去尝试解决的问题。觉得在PC端用户刷刷页面就能解决的事情,我们就没必要去瞎折腾(此处已安装防喷防火墙)。然后现在到了移动互联,比如移动端的各个浏览器,没有了强制刷新功能,也不可能要求用户卸载微信,清理数据。让用户做了这些,不知道早已损失了多少用户。所以才有了现在这篇文章。在网上搜集这零散的资料,然后来解决这个问题。对于不正确或有更好的做法,请各位大神指正!非常感谢!

 

解决了那些问题?举例说明吧。比如项目中有一个文件 /js/jquery.js .当我们修改了以后,客户端再次访问不会刷新jquery.js的已修改的内容,而使用的旧版的代码。解决方案原理:构建时,生成一个md5码,并追加在jquery.js上,构建后的jquery.js名称变更为jquery-E87J39.js 类似这样。每次修改后,MD5码都不一样。同时,插件还会替换jsp里面的 /js/jquery.js 路径为 /js/jquery-E87J39.js.保证用户下次请求到的文件是新的。CSS文件、图片等静态资源文件处理原理一致。

 

标题也提到了。j2ee,maven结构。因为目前很多项目都是这样,java代码与前端代码混合开发,java程序猿要懂得html并编写jsp.这也是一种流行编码方式。其他更多的不再赘述。

 

 

1.构建用到的maven插件,frontend-maven-plugin,antrun

2. 前端构建工具 gulp

 

更多资料也可以搜索上面的关键词并查看相关资料。

 

下面是我这次构建的相关代码.

 

 

pom.xml增加构建插件

 

<properties>
        <project.build.frontend.version>1.0</project.build.frontend.version>
        <project.build.node.version>v0.12.4</project.build.node.version>
        <project.build.npm.version>1.4.9</project.build.npm.version>
    </properties>

<plugin>
                <groupId>com.github.eirslett</groupId>
                <artifactId>frontend-maven-plugin</artifactId>
                <version>${project.build.frontend.version}</version>
                <executions>
                     <execution>
                        <id>install node and npm</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>install-node-and-npm</goal>
                        </goals>
                        <configuration>
                            <nodeVersion>${project.build.node.version}</nodeVersion>
                            <npmVersion>${project.build.npm.version}</npmVersion>
                            <installDirectory></installDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>npm install</id> 
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>npm</goal>
                        </goals>
                        <configuration>
                            <arguments>install</arguments>
                        </configuration>
                    </execution>
                    <execution>
					    <id>gulp build</id>
					    <goals>
					        <goal>gulp</goal> 
					    </goals>
					
					    <phase>prepare-package</phase>
					
					    <configuration>
					    </configuration>
					</execution>
                </executions>
            </plugin>

 

 

项目根目录增加,package.json,gulpfile.js.

 

package.json内容:

 

{
  "name": "example",
  "version": "0.0.1",
  "dependencies": {
    "gulp": "^3.9.0",
    "gulp-rev": "7.1.2",
    "gulp-rev-collector": "1.0.5",
    "run-sequence": "1.2.2",
    "gulp-clean": "0.3.2",
    "gulp-clean-css": "2.0.12",
    "gulp-uglify":"2.0.0",
    "pump" : "1.0.1",
    "gulp-htmlclean":"2.7.6"
  },
  "jspm": {
    "dependencies": {
      "jquery": "github:jquery/jquery@^2.1.3"
    },
    "devDependencies": {
      "traceur": "github:jmcriffey/bower-traceur@0.0.88",
      "traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.88"
    }
  },
  "scripts": {
    "prebuild": "npm install",
    "build": "gulp"
  },
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-clean": "^0.3.2",
    "gulp-rev": "^7.1.2",
    "gulp-rev-collector": "^1.0.5",
    "run-sequence": "^1.2.2"
  }
}

 

 

 

 

gulpfile.js文件内容:

 

 

var gulp = require('gulp'),
	rev = require('gulp-rev'),
	revCollector = require('gulp-rev-collector'),
	runSequence = require('run-sequence'),
	clean = require('gulp-clean'),
	cleanCSS = require('gulp-clean-css'),
	uglify = require('gulp-uglify'),
	pump = require('pump'),
	htmlclean = require('gulp-htmlclean');;

gulp.task('clean',function(){
	return gulp.src('dist',{read:false}).pipe(clean());
});

gulp.task('clean_tmp',function(){
	return gulp.src('dist_tmp',{read:false}).pipe(clean());
});

gulp.task('minify-css', function() {
	  return gulp.src('src/main/webapp/**/*.css')
	    .pipe(cleanCSS({compatibility: 'ie8'}))
	    .pipe(gulp.dest('dist_tmp/'));
});
gulp.task('css',['minify-css'], function (cb) {
    return gulp.src('dist_tmp/**/*.css')
        .pipe(rev())
        .pipe(gulp.dest('dist/'))
        .pipe( rev.manifest() )
        .pipe( gulp.dest( 'dist/rev/css' ) );
});

gulp.task('compress', function (cb) {
	  pump([
	        gulp.src('src/main/webapp/**/*.js'),
	        uglify(),
	        gulp.dest('dist_tmp/')
	    ],
	    cb
	  );
	});
gulp.task('scripts',['compress'], function () {
    return gulp.src(['dist_tmp/**/jquery.js'])
        .pipe(rev())
        .pipe(gulp.dest('dist/'))
        .pipe( rev.manifest() )
        .pipe( gulp.dest( 'dist/rev/js' ) );
});

gulp.task('rev',function(){
	return gulp.src(['dist/rev/**/*.json','src/main/webapp/WEB-INF/views/**/*.jsp'])
		.pipe(revCollector({
			replaceReved: true
		}))
		.pipe(gulp.dest('dist/WEB-INF/views/'));
});
gulp.task('minify', function() {
	  return gulp.src('dist/WEB-INF/views/**/*.jsp')
	    .pipe(htmlclean())
	    .pipe(gulp.dest('dist/WEB-INF/views/'));
	});

gulp.task('default',function(){
	runSequence('clean','clean_tmp','css','scripts','rev','minify');
});

 

 

 

增加了这些文件,install的时候,就会进行前端构建,但这还不够,目前这里仅仅是把对应的css,js,html构件号了,并没有通过maven-war-plugin 构建到war中。所以还需要增加war包配置

 

 

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugin</artifactId>
	<version>2.3</version>
	<configuration>
	<warName>xxx</warName>
	<webResources>
	<resource>
	<!-- this is relative to the pom.xml directory -->
	<directory>dist</directory>
	<includes>
	<include>**/*.css</include>
	<include>**/*.js</include>
	<include>**/*.jsp</include>
	<include>**/*.jpg</include>
	<include>**/*.png</include>
	<include>**/*.gif</include>
	<include>**/*.jpeg</include>
	</includes>
	</resource>
	<resource>
	<!-- this is relative to the pom.xml directory -->
	<directory>dist_tmp</directory>
	<includes>
	<include>**/*.js</include>
	</includes>
	</resource>
	</webResources>
	<packagingExcludes></packagingExcludes>
	<!-- 过滤静态资源文件和jsp,这些文件来自已处理过的dist文件夹 -->
	<!-- <warSourceExcludes>**/*.css,**/*.js,**/*.jsp,**/*.jpg,**/*.png,**/*.gif,**/*.jpeg</warSourceExcludes> -->
	<warSourceExcludes>**/*.css,**/*.js,**/*.jsp</warSourceExcludes>
	</configuration>
</plugin>

 

 

 

目前做完这些,一个可用的war包就出来了。

 

 

其他问题:

1. 每次构建都会下载构建资源,所以,我的做法是第一次构建我完成后,我把相关的资源打了个包。然后在构建前,用antrun插件,将其解压出来到项目下面就可以不用下载啦。

<plugin>
		      <artifactId>maven-antrun-plugin</artifactId>
		      <version>1.8</version>
		      <executions>
		         <execution>
		            <phase>validate</phase>
		            <configuration>
		               <tasks>
		                  <echo message="unzipping file" />
		                  <unzip src="D:/gulp/gulp.zip" dest="./" />
		               </tasks>
		            </configuration>
		            <goals>
		               <goal>run</goal>
		            </goals>
		         </execution>
		      </executions>
		   </plugin>

 gulp.zip 这个文件我就放上来了,因为第一次成功构建以后,在项目下面会有,主要是根目录下node和node_modules这两个目录打包了成gulp.zip

 

 

2.无法替换jsp中已转换过的js文件。在大多数情况下,我们的路径是${ctx}/js/jquery.js或${ctx}/css/style.css这样。但前端构建似乎不是这样。错误原因是匹配路径与我们想要的有一点出入。所以,我们就需要修改下面插件的代码。

需要修改的插件是:gulp-rev-collector里面的Index.js。这个文件我放附件吧。

 

3.js文件没有增加md5串或替换,请看看您的配置是否正确。请检查下gulpfile.js中"scripts"是否包含你的js。因为我们这边是有固定有些才替换,所以才有这个配置,如果你期望是全部的js都参与加密替换,可以考虑配置成dist_tmp/**/*.js

 

 

 

 

分享到:
评论
1 楼 cymo 2018-03-21  
非常非常好的教程,清晰明了好用,谢谢博主

相关推荐

    Java项目包 Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    在本项目中,我们利用Jenkins、Maven、Gitlab和Tomcat这四个工具实现了一个完整的自动化工作流。 首先,让我们来详细了解这些工具及其在自动化过程中的作用: 1. **Jenkins**:Jenkins 是一个开源的持续集成(CI)...

    Apache Maven项目构建工具 v3.9.6.zip

    Apache Maven是Java开发领域广泛应用的一款项目管理工具,它基于项目对象模型(Project Object Model, POM)的概念,能够自动化构建、依赖管理和项目信息管理。在本文中,我们将深入探讨Maven 3.9.6这一版本,以及它...

    尚硅谷自动化构建工具Maven视频源码课件

    《尚硅谷自动化构建工具Maven视频源码课件》是一份深入学习Maven的宝贵资源,旨在帮助开发者全面掌握这个强大的Java项目管理工具。Maven是Apache软件基金会开发的一个项目管理和综合工具,它通过一个标准化的构建...

    构建工具:maven简介

    Maven是一个广泛使用的Java项目管理和构建自动化工具,它基于项目对象模型(POM)的概念,能够管理项目的生命周期,包括编译、测试、打包、发布等。Maven使得开发者可以更加专注于代码的编写,而不是繁琐的构建过程...

    java视频教程之SVN Maven搭建自动化构建教程 Eclipse中使用Maven

    java视频教程之SVN Maven搭建自动化构建教程 Eclipse中使用Maven视频教程云盘下载链接

    Maven依赖管理项目构建工具.pdf

    3. 可视化方式项目构建 IDEA提供了图形化的Maven工具窗口,可以直观地查看和运行Maven构建目标。 4. 构建插件、命令、生命周期命令之间关系 Maven的构建过程由插件执行,插件绑定了生命周期的不同阶段。例如,maven...

    hudson svn maven 自动构建

    【标题】"Hudson SVN Maven 自动构建"指的是在持续集成环境中使用Hudson(现在称为Jenkins)作为工具,结合Subversion(SVN)作为版本控制系统,Maven作为项目管理和构建工具,实现代码的自动构建过程。这个流程的...

    Maven自动化构建工具.md

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

    使用Maven构建多模块项目

    Maven作为Java领域广泛使用的构建工具,提供了强大的支持来管理多模块项目。本文将深入探讨如何利用Maven构建多模块项目,以及在实际操作中需要注意的关键点。 1. Maven多模块项目结构: Maven多模块项目通常遵循...

    Maven构建的分布式demo

    Maven可以与Jenkins、GitLab CI/CD等工具结合,实现自动化构建、测试和部署,确保快速反馈和稳定运行。 8. **分布式配置管理**:在大型分布式系统中,配置管理是个挑战。Spring Cloud Config或HashiCorp Consul等...

    Java大神默认推荐使用Maven项目构建工具

    在Java开发领域,Maven是被广泛推荐的项目构建工具,尤其受到许多Java大神的推崇。Maven通过提供一个标准化的项目结构和自动化构建流程,极大地简化了项目的管理与维护,同时也使得团队协作变得更加高效。 Maven的...

    Maven3.5.4:构建管理领域的自动化工具,集成Java生态技术,优化项目内容与发布流程

    Maven是Java开发领域的项目管理和构建自动化工具,它基于项目对象模型(POM)的概念,通过配置文件(pom.xml)来管理项目的构建、报告和文档。Maven能够处理项目的依赖关系,自动下载所需的库和插件,并提供了一套...

    Apache Maven项目构建工具.rar

    Maven是Java项目中最流行的事实上的构建和管理工具。Maven 基于项目对象模型 (POM) 的概念,它有助于从中心信息自动管理项目的生成、文档和报告。 多年来,Maven变得非常流行,它定义了用于构建软件的通用接口。...

    how to create a j2ee with maven

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition...同时,Maven的插件体系也使得集成各种工具和自动化任务变得轻松,进一步提升了开发体验。结合源码管理和版本控制工具,如Git,一个完整的开发流程得以形成。

    Maven 构建 Kettle 时所需的部分jar包

    在IT行业中,构建工具是开发过程中的重要环节,它们帮助我们自动化处理编译、测试、打包等任务。本文将深入探讨Maven如何用于构建Kettle项目,并解析与之相关的jar包的重要性。 首先,Maven是一个广泛使用的Java...

    自动化构建工具maven安装指南

    Maven是一个基于项目对象模型(POM)的项目管理和自动化构建工具,主要服务于Java平台的项目。它对项目的构建过程进行了抽象,为开发者提供了一套完整的构建生命周期框架。Maven不仅能够执行编译、测试、打包等基本...

    maven+j2ee+nexus的搭建

    通过结合Maven、Nexus和Eclipse,开发者能够构建高效且可复用的J2EE项目,实现标准化的开发流程,提高代码质量,并确保依赖管理的稳定性。学习并掌握这些工具的使用,对于任何J2EE开发者来说都是极其重要的技能。

    Jmeter+maven+Jenkins构建云性能测试平台

    Jmeter+maven+Jenkins构建云性能测试平台 标题分析: 本文标题“Jmeter+maven+Jenkins构建云性能测试平台”表明了本文的主题,即使用Jmeter、Maven和Jenkins来构建一个云性能测试平台。这个标题涵盖了三个关键技术...

    Apache Maven项目构建工具 v3.6.3-源码.zip

    Apache Maven是Java开发领域广泛应用的项目管理和综合工具,它的核心理念是通过项目对象模型(Project Object Model,POM)来管理项目的构建、报告和依赖关系。Maven v3.6.3是该工具的一个稳定版本,它包含了众多的...

Global site tag (gtag.js) - Google Analytics