将标准的EclipseWTP项目转化成具有Gradle功能的EclipseWTP项目

标准的EclipseWTP项目的目录结构是:

  • src:存放源代码文件,包括Java和资源(非Java文件,例如:xml、properties等)文件

  • WebContent:存放web文件

Gradle的Web项目的目录结构是:

  • src/main/java:存放源代码的Java文件

  • src/main/resources:存放源代码的资源文件

  • src/main/webapp:存放web文件

因为这两种项目结构存在差异,所以如果想为标准EclipseWTP项目添加Gradle功能必须修改目录结构。如果勤快一点可以通过操作Eclipse拖拖拽拽完成,或者通过Gradle的自定义task来完成,当然本文说的是第二种方式。

Gradle的一个非常灵活的功能是,运行在脚本中使用Groovy代码,甚至定义class也可以,所以我们定义两个class,分别代表上面的两种项目结构:

标准的EclipseWTP项目(EclipseWtpProject.groovy)

package com.bstek.gradle;

class EclipseWtpProject {
	def rootDirName;
	def rootDir;
	def srcDirName;
	def srcDir;
	def webDirName;
	def webDir;
	def project;

	EclipseWtpProject(def project, rootDirName = 'oldSrc', srcDirName = 'src', webDirName = 'WebContent') {
		this.project = project;
		this.rootDirName = rootDirName
		rootDir = project.file(rootDirName);
		this.srcDirName = srcDirName
		srcDir = project.file(rootDirName + '/' + srcDirName)
		this.webDirName = webDirName
		webDir = project.file(rootDirName + '/' + webDirName)
	}

	def check() {
		def dirs = [srcDir, webDir];
		dirs.each { dir ->
			if (!dir.exists()) {
				throw new FileNotFoundException(dir.toString());
			}
		}
	}

}

Gradle的Web项目(GradleWtpProject.groovy)

package com.bstek.gradle;

class GradleWtpProject {
	def javaDir
	def resourceDir
	def webappDir
	def project

	def GradleWtpProject(def project) {
		this.project = project;

		javaDir = project.file('src/main/java')
		resourceDir = project.file('src/main/resources')
		webappDir = project.file('src/main/webapp')
	}

	def create() {
		def fs = [javaDir, resourceDir, webappDir]
		fs.each { f ->
			if (!f.exists()) {
				f.mkdirs();
			}
		}
	}

	def delete() {
		def fs = [javaDir, resourceDir, webappDir]
		fs.each { f ->
			if (f.exists()) {
				f.delete();
			}
		}
	}

	def recreate() {
		delete();
		create();
	}
}

将上面的两个文件存放在buildSrc/src/main/groovy目录下,当然必须遵守package的目录结构。

接下来build.gradle的代码就很简单了,

build.gradle

import com.bstek.gradle.*;

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'

buildDir = file('gradle-build')

now = new Date()
version = now.format('yyMMddHHmm')

task createGradleWebProject(dependsOn: 'eclipse') {
	description = 'Convert a eclipse-wtp projeto to a eclipse-wtp with gradle support.' 

	wtpProject = new GradleWtpProject(project);
	wtpProject.recreate();

	def oldProject = new EclipseWtpProject(project)
	oldProject.check();

	//Copy Java
	project.copy {
		into(wtpProject.javaDir)
		from oldProject.srcDir
		include '**/*.java'
	}

	//Copy Resources
	project.copy {
		into wtpProject.resourceDir
		from oldProject.srcDir
		exclude '**/*.java'
		exclude '**/.svn/**'
	}

	//Copy Webapp
	project.copy {
		into wtpProject.webappDir
		from oldProject.webDir
		exclude ('**/.svn/**', 'WEB-INF/classes/**', 'WEB-INF/lib/**')
	}
}

 

使用方法:

  1. 在gradle项目下创建oldSrc目录

  2. 将EclipseWTP项目文件复制到oldSrc中

  3. 在控制台中执行:gradle createGradleWebProject

  4. oldSrc目录已经完成了使命,可以删除了(当然谨慎的你可能不会立即这么做)

使用效果:

  1. 生成src/main/java目录,并且已经包含所有的java代码

  2. 生成src/main/resources目录,并且已经包含所有的资源文件

  3. 生成src/main/webapp目录,并且已经包含全部的web文件

  4. 生成.project文件

  5. 生成.classpath文件

  6. 生成.setting文件夹,包含org.eclipse.jdt.core.prefs、org.eclipse.wst.common.component、org.eclipse.wst.common.project.facet.core.xml文件

  7. 通过Eclipse的Import Existing Projects into Workspace功能将新的项目添加到Eclipse中进行开发


你可能感兴趣的:(gradle)