从零开始,跟我一起做jblog项目(三)从Maven到Gradle
从零开始,跟我一起做jblog项目(三)从Maven到Gradle
上一节讲到项目构建工具Maven,对JAR包的管理不可谓不强大
博主在使用maven引入Spring框架时,了解到Spring推荐使用gradle工具来构建项目
百度了一下,发现Gradle也是一套很优秀的项目构建工具
Gradle使用Groovy语言配置项目和依赖,在极大地提升灵活性和配置性之外,甚至配置代码要比XML结构的POM文件少很多
鉴于我希望将jblog打造成一款modern的小型个人博客系统
而gradle的首页上介绍自己为Modern Open-Source Enterprise Build Automation
所以我决定将项目原型从maven构建转移为gradle构建
目前关于Gradle的教程还比较零散,下面我会一步一步演示如何将Gradle集成到myeclipse中去
首先,到Gradle官网下载最新版的gradle
下载地址是http://gradle.org/gradle-download/
博主下载的是2.8版本,写这篇文章的时候已经更新到2.9了
下载下来解压到任意目录

然后配置Windows环境变量,一共要配置三个,分别如下:
GRADLE_HOME:你的gradle解压路径,例如:D:\Workspaces\gradle-2.8
GRADLE_USER_HOME:你希望作为本地仓库的路径,自己建一个名为.gradle的路径,例如:D:\Workspaces\.gradle
path:这个不用说,系统路径,可以在cmd中直接敲gradle命令的,在path最后添加:%GRADLE_HOME%\bin;
这三个配置好了,我们初步验证一下,打开cmd,任意路径下敲入gradle -v命令,出现下面的响应就算安装成功了

关于gradle的详细命令和用法,大家可以参考下面的教程
http://wiki.jikexueyuan.com/project/gradle/
建议快速阅读上面的教程后,我们来将gradle植入eclipse/myeclipse中
打开eclipse,进入marketplaces,搜索gradle,找到Gradle IDE Pack,经过博主测试这个插件是最好用的

安装好Gradle IDE Pack插件后,重启eclipse,新建一个最简单的JAVA Project,或者试试Web Projec也可以
在项目根目录下新建一个build.gradle文件,如图所示

编辑build.gradle配置文件,示例如下:

apply plugin: "java"
apply plugin: "eclipse" sourceCompatibility = 1.8
version = '1.0' configurations {
provided
} sourceSets {
main.compileClasspath += configurations.provided
test.compileClasspath += configurations.provided
test.runtimeClasspath += configurations.provided
} repositories {
mavenLocal()
maven {url "http://maven.oschina.net/content/groups/public/"}
mavenCentral()
} dependencies {
compile "org.hibernate:hibernate-core:5.+"
testCompile "junit:junit:4.7"
provided "javax.servlet:javax.servlet-api:4.+"
} //注意下面这个配置,新版本gradle如果不使用数组添加的话会导致eclipse频繁报错
eclipse.classpath.plusConfigurations += [configurations.provided]

保存build.gradle文件后,右键project,选择configure,选择convert to gradle project,为项目添加gradle特性

添加完gradle特性后,我们来让eclipse将build.gradle中定义的几个依赖包加入到项目中来
在这之前还需要配置一下Gradle IDE Pack插件,eclipse的window->preferencecs->Gradle,配置我们本地的gradle路径

配置好了以后就万事具备了,我们来试验一下,如何将build.gradle文件中定义的依赖引入eclipse环境中
右击project项目,选择gradle,选择Enable Dependency Management,让插件来打开依赖管理

打开之后,仍然右键项目,gradle->Refresh Dependencies,刷新一下依赖列表
在后台,gradle将按照上述文件的定义,依次检索我们系统中的maven本地仓库,chinaos提供的中国镜像仓库,以及maven中央仓库
将所需要的包下载到配置的gradle本地仓库中,再引入到eclipse的classpath中,效果如下图所示:

至此,关于gradle集成到eclipse的所有工作就结束了,项目编写过程中,如果要继续引入JAR包,就在build.gradle文件中添加
然后刷新一下gradle的依赖,就能实时添加到eclipse的环境中去了
最后着重讲解一下provided的scope(有效依赖范围),上一篇讲到maven,其中配置依赖的scope常用的有下面几种
compile:编译,测试,打包时都需要依赖,比如spring、hibernate、struts等
test:测试时需要依赖,常见的有junit
provided:一般由容器提供,只有写代码时需要依赖,比如servlet
runtime:打包运行时需要依赖
转移到gradle以后,gradle默认只为我们提供了四种scope,如下:
compile:编译范围依赖在所有的 classpath 中可用,同时它们也会被打包
runtime:依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要 JDBC API JAR,而只有在运行的时候才需要 JDBC 驱动实现
testCompile:测试期编译需要的附加依赖
testRuntime:测试运行期需要
可以看到gradle默认并未提供类似provided的scope,那比如我们需要写web project,则需要引入servlet包,而这时就比较麻烦
我们可以向eclipse的build path手工添加tomcat下的servlet包,但那样未免显得太low了,毕竟我们已经选择使用项目构建工具来管理我们的JAR包了
别着急,gradle毕竟是使用一种编程语言来配置项目构建的,所以它的灵活性相当高,在上述的配置文件中,我们人为定义了一个provided的scope
并且将这个provided使用sourceSet集合定义了范围,明确了在main目录的compile期间需要依赖,在test目录的编译期间和运行期间需要依赖
言下之意就是在main目录的运行期间不需要依赖喽,也就是运行时不需要将此provided范围的依赖打包
最后配合eclipse插件,向eclipse的classpath中添加了这一provided范围,结果eclipse会将servlet引入到项目依赖中。
从零开始,跟我一起做jblog项目(三)从Maven到Gradle的更多相关文章
- 从零开始,跟我一起做jblog项目(一)引言
从零开始,跟我一起做jblog项目(一)引言 想做一个java版的blog,源自一个很久之前的想法 当时刚学习JAVA的web编程 想买自己的域名,自己的VPS,安装自己的WEB服务 用google ...
- 从零开始,跟我一起做jblog项目(二)Maven
从零开始,跟我一起做jblog项目(一)引言 从零开始,跟我一起做jblog项目(二)Maven maven是一个项目管理工具,尤其适用于JAVA世界 在jblog的开发前期,还没有系统使用过mave ...
- 从零开始做SSH项目(二)
使用hibernate测试加载数据.删除数据和修改数据等功能时,针对的是与数据库表user对应的User. 为了简化对其他数据表对应的实体类的持久化操作,可以在项目中创建一个BaseHibernate ...
- 三、自动化测试平台搭建-django-如何用mysql数据库做web项目
从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...
- 迅雷创始人程浩:创业公司5招做好内部创新(组建小型敢死队:一共3个人,一个产品经理,两个研发;腾讯做不做这个项目是一个伪命题;让用户来验证,而不是相反 good)
欢迎关注“创事记”的微信订阅号:sinachuangshiji 文/程浩 编者按:本文首发于微信公众号“浩哥说”(ID:haogetalks),作者程浩,迅雷创始人.内容为作者在混沌AI成长营上的演讲 ...
- 做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)
做web项目时,常常会遇到改动了代码,但浏览器端没有生效,原因是多种多样的,我会依据我遇到的情况逐步更新解决的方法 1.执行的时候採用debug模式,普通情况下使用项目部署button右边那个butt ...
- 做web项目时对代码修改后浏览器端不生效的应对方法(持续更新)
做web项目时,经常会遇到修改了代码,但浏览器端没有生效,原因是多种多样的,我会根据我遇到的情况逐步更新解决办法 1.运行的时候采用debug模式,一般情况下使用项目部署按钮右边那个按钮下的tomca ...
- 从零开始用 Flask 搭建一个网站(三)
从零开始用 Flask 搭建一个网站(二) 介绍了有关于数据库的运用,接下来我们在完善一下数据在前端以及前端到后端之间的交互.本节涉及到前端,因此也会讲解一下 jinja2 模板.jQuery.aja ...
- android 实践项目三
android 实践项目三 本周我主要完成的任务是将代码进行整合,然后实现百度地图的定位与搜索功能.在这次实现的 图形界面如下: 在本周的工作中主要的实现出来定位与收索的功能,在地图中能实现了定位,显 ...
随机推荐
- JSONP简单例子
jsonp的原理很简单,主要利用了HTML中所有有src的属性的标签可以跨域的特点,利用script的src进行get请求,后端输出一段js代码的字符串在script中便会执行. 当然后端输出普通的j ...
- jquery中的replaceWith()和html()的区别
区别在于,html()会替换指定元素内部的HTML,而replaceWith()会替换元素本身及其内部的HTML. //目标div <div id="myid" /> ...
- struts2的DevMode(开发模式)模式
本文转自:http://blog.csdn.net/q1054261752/article/details/48687119 在实际应用开发或者是产品部署的时候,对应着两种模式: ① 开发模式(dev ...
- HDUOJ---The Moving Points
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 用 python 爬虫抓站的一些技巧总结
学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本,本来想写goog ...
- npm下载缓慢解决方法
npm的服务器在国外,拉取npm包的列表.下载包这个过程会比较缓慢.凡是包管理工具基本都有这个问题,例如maven.pip等,这些问题都可以通过配置镜像来解决.阿里巴巴提供了maven库,清华大学有p ...
- 理解Lucene中的Analyzer
学习一个库,最好去官网.因为很多库API变动十分大,从博客上找的教程都过时了. Lucene原理就是简简单单的"索引",以空间换时间.但是Lucene将这件事做到了极致,后人再有想 ...
- 【Linux】正确的关机方法
1)shutdown命令 我们较常使用的是shutdown这个命令,这个命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息.该命令还允许用户指定一个时间参数 ...
- 未能找到类型集或命名空间名称 "xxxxxx" (是否缺少using 指令或引用?)
“未能找到类型或命名空间名称XXXX”,以往遇到这种情况第一时间想到就是没有引用需要的dll. 但今天我反复检查了好几次,还是没有解决问题.我注意到除了错误信息,还有几个警告信息“未能解析引用的程序集 ...
- PLSQL_自治事务和嵌套事物的理解和用法(案例)
2014-06-01 Created By BaoXinjian