您的位置:首页 > 编程语言 > Java开发

IntelliJ IDEA 与 Gradle + Spring项目的初次尝试

2015-10-02 20:11 537 查看
Myeclipse的臃肿,各种莫名其妙的refresh可解决的bug,以及迟滞的插件更新,最终促使我走向idea。

最近也在尝试着使用Gradle来构建项目(Maven依赖太过臃肿),所以本篇也是Gradle配合web框架的初次整合使用,顺便:idea下的Gradle比Myeclipse的方便太多了!

准备工作:1.安装好IntelliJ IDEA和Gradle 2.Groovy的基本语法(方便写gradle配置)

新建一个Gradle项目,如下图



填写项目信息包括groupId(项目包名),artifactId(项目名称)。然后配置Gradle



其中第二项最好勾选上,它能帮你自动创建好相应目录结构。

选择Use local gradle wrapper 指向本地gradle安装目录,默认是Use default gradle wrapper。如果报错说目录错误(遇到过),那么可先选择Use default gradle wrapper,创建好项目之后Setting->Gradle可以再改。

以下是主要的目录结构,需要注意的是/src/main/webapp即是原web项目的WebRoot目录,所以WEB-INF也在/webapp下。

Spring和Hibernate的配置文件放在/src/main/resources下即可,调用时直接classpath:/applicationConfig.xml



*idea新建Gradle项目后,缺少的目录可手动创建。默认web.xml没有创建的话,可以配置生成一个

File->Project Structure->左侧Project Setting->Facets->中部Web->右侧Deployment Descriptors->Add->.../webapp/WEB-INF/web.xml

Eclipse普通web project与Gradle web project比较直观的区别有两个,一个是Gradle下的web目录是/webapp,另一个即是Gradle最重要的文件build.gradle。前者已介绍过,那么接下来就是最关键的build.gradle配置环节。

下面先介绍几个关键的地方,便于理解build.gradle

关于服务器:使用Myeclipse时我们最常用的服务器是Tomcat,而在Gradle中我们可以使用便捷的嵌入式服务器jetty,当然Maven也可以用。jetty由于版本兼容问题,Gradle在使用时要用Gradle的gretty插件,gretty插件可以设置runtime服务器为jetty亦或嵌入式tomcat。

关于maven库:Gradle也可以使用maven库,只需要填写maven库的地址即可。这里我推荐两个,开源中国mvnrepository

以上两个链接是用于搜索jar的url,下面是maven库的url。

开源中国:http://maven.oschina.net/content/groups/public/

mvnrepository:http://central.maven.org/maven2/

下面附上能正常运行的build.gradle,注释已详细写出。

group 'your package'
version '1.0-SNAPSHOT'

// 应用Gradle各插件
apply plugin: 'java'
apply plugin: 'war' // war包生产插件
apply plugin: 'idea'
apply plugin: 'org.akhikhl.gretty' // 应用gretty插件

version = "" // 项目版本

//Gretty Embedded Jetty
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:+'
}
}

// 指定JDK版本
sourceCompatibility = 1.8
targetCompatibility = 1.8
ext {
jvmVersion = "1.8"
springVersion = "4.0.6.RELEASE"
sl4jVersion = "1.7.6"
}

repositories {
// maven库
def cn = "http://maven.oschina.net/content/groups/public/"
def abroad = "http://central.maven.org/maven2/"
// 先从url中下载jar若没有找到,则在artifactUrls中寻找
maven {
url cn
artifactUrls abroad
}
}

[compileJava, compileTestJava, javadoc]*.options*.encoding = "UTF-8"

dependencies {
def springVersion = "4.0.6.RELEASE"
def hibernateVer = "4.3.6.Final"

// providedCompile在编译时提供,不会写入war
providedCompile(
"javax.servlet:javax.servlet-api:3.1.0",
"javax.servlet.jsp:jsp-api:2.2.1-b03"
)
// 引入项目中/libs中的jar
compile files( 'libs/spring-framework-bom-4.0.6.RELEASE.jar')

compile("org.apache.taglibs:taglibs-standard-impl:1.2.1")
// aspectjtools-1.6.11是测可试用版本,使用其他版本会报"dataSource无法注入"的Exception
compile("javax:javaee-api:7.0",
"javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1",
"org.aspectj:aspectjtools:1.6.11",
"antlr:antlr:2.7.7",
"org.aspectj:aspectjrt:1.6.11",
"org.aspectj:aspectjmatcher:1.6.11")

compile("org.apache.commons:com.springsource.org.apache.commons.fileupload:1.2.1",
"commons-codec:commons-codec:1.6",
"commons-collections:commons-collections:3.2.1",
"commons-lang:commons-lang:2.6",
"commons-logging:commons-logging:1.2",
"commons-pool:commons-pool:1.5.5",
"org.apache.commons:commons-lang3:3.1")

// 数据库连接部分依赖
compile("mysql:mysql-connector-java:5.1.36")
compile("com.mchange:mchange-commons-java:0.2.3.4",
"redis.clients:jedis:2.0.0",
"net.sf.ehcache:ehcache-core:2.4.3")
compile("org.hibernate:hibernate-c3p0:$hibernateVer",
"org.hibernate:hibernate-core:$hibernateVer",
"org.hibernate:hibernate-entitymanager:$hibernateVer",
"org.hibernate:hibernate-ehcache:$hibernateVer",
"org.hibernate.common:hibernate-commons-annotations:4.0.5.Final")
// Spring4.0.6依赖
compile("org.springframework:spring-aop:$springVersion",
"org.springframework:spring-orm:$springVersion",
"org.springframework:spring-jdbc:$springVersion",
"org.springframework:spring-instrument-tomcat:$springVersion",
"org.springframework:spring-instrument:$springVersion",
"org.springframework:spring-framework-bom:$springVersion",
"org.springframework:spring-expression:$springVersion",
"org.springframework:spring-core:$springVersion",
"org.springframework:spring-context-support:$springVersion",
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-aspects:$springVersion",
"org.springframework:spring-test:$springVersion",
"org.springframework:spring-tx:$springVersion",
"org.springframework:spring-web:$springVersion",
"org.springframework:spring-webmvc:$springVersion",
"org.springframework:spring-webmvc-portlet:$springVersion")

// json相关依赖
compile("com.alibaba:fastjson:1.2.7",
"com.jayway.jsonpath:json-path:0.8.1",
"net.minidev:json-smart:1.1.1",
"org.jsoup:jsoup:1.7.2")

compile("org.codehaus.jackson:jackson-core-asl:1.9.2","org.codehaus.jackson:jackson-mapper-asl:1.9.2")

compile("org.dom4j:com.springsource.org.dom4j:1.6.1")

compile("com.google.guava:guava:17.0")

// 测试编译时的依赖
testCompile("org.assertj:assertj-core:1.5.0",
"org.hamcrest:hamcrest-core:1.3",
"junit:junit:4.11")
}
// gretty相关配置
gretty {
port = 8080
contextPath = "/${project.name}"
servletContainer = 'jetty9' // or tomcat7
}

// 部署war到tomcat的Task
task deploy (dependsOn: war){
copy {
from "build/libs"
into "F:/software/tomcat7/webapps"  // 换成你的tomcat目录
include "*.war"
}
}


配置好build.gradle之后,打开Gradle面板点击左侧的刷新按钮Refresh all Gradle projects,看下方进度等jar都下载好了之后查看Gradle面板里的dependencies里面的依赖是否齐全,以及查看gretty插件是否安装成功。

一切完成之后,打开右侧Gradle面板,双击gretty下面的appStart来运行web项目。

至此,一个基于IDEA开发Gradle构建的web项目就搭建好了。

大费一番周折之后,我的第一个Gradle项目终于能顺利运行了,最主要还是build.gradle,搞定它就搞定了Gradle。
而SpringMVC+HIbernate+Spring等框架的整合也与Gradle没什么关联,只要把jar依赖配置好,其他的照搬过来即可。

因为之前并没有用过Maven,所以是很辛苦地对着原项目中的jar一个个对照着手写的compile语句。当然了,也得是去maven库中搜寻原jar的maven坐标,开源中国的速度挺快但是有不少遗漏,复制坐标的时候一定注意,因为有的目录仅有.pom而没有jar。

如果想知道某个jar包的版本号的话,这里分享一个小技巧:打开jar包查看里面文件的最后修改时间,并记录下jar的MD5,然后去maven库查询此jar的各个发行版本,找离之前记录下的最后修改时间最近的一个版本,再查看此版本jar包的MD5,与之比对。(注:我使用的aspectjtools就遇到了非原版本不可的问题,使用这个方法最终找到了版本号1.6.11)。

最后,因写博文经验很少,有遗漏或错误之处欢迎大家指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: