使用gradle编译打包java项目
本文介绍使用gradle编译打包java项目,java项目仅仅为了演示,为了使用gradle脚本创建一个可执行的jar文件,即可以使用java命令直接执行,如:java –jar jarfile.jar。如果你不熟悉gradle的基本安装,请阅读“Gradle及eclipse插件安装”文章。
1. 创建java项目
gradle的项目结构和maven一致,maven和ant都使用xml写构建脚本,gradle使用自己DSL(DomainSpecific Language)基于Groovy的构建脚本,简单易用。maven构建脚本在pom.xml文件,gradle需在build.gradle文件中增加java插件代码。在Eclipse中创建gradle项目后,开始编辑脚本。
java项目自动应用java插件。java项目会增加缺省项目内容:
l src/main/java目录,存放我们项目的源文件夹;
l src/main/resources目录,存放资源文件,如属性文件;
l src/test/java目录,存放测试类的文件夹;
l src/test/resources目录,存放测试资源文件;
所有的编译输出文件存放在build目录中,并包含一些子目录,如:
l classes目录,包含编译后的class文件;
l libs目录,包含jar或war文件;
2. 常用的gradle脚本元素介绍
下面介绍常用build.gradle中脚本元素。
2.1. java版本
缺省gradle脚本引用javaf1.5。使用sourceCompatibility元素,如果你安装环境是1.8,这时运行gradle会有警告,所以你需要设置gradle的1.5修改为1.8,再次运行,不再有警告,因为eclipse ide与gradle脚本中指定的java版本一致。
2.2. 项目打包
项目开发好之后,需测试/部署在不同的环境中。我们需要把项目打包成我们需要的格式,如jar、war、ear等。如何定义打包脚本,让gradlebuild命令运行后打包文件。
² jar文件
脚本:jar{};jar元素通知gradle创建jar文件。jar是缺省值,在gradle.build文件中无需引用jar插件。
² war文件
脚本:war{}; 创建war文件的脚本为:
apply plugin: "war"
war {
}
² ear文件
脚本:ear{};创建ear文件的脚本为:
apply plugin: "ear"
ear {
}
2.3. jar文件和版本
默认gradle使用项目名称作为jar文件名称;版本需要使用version元素在build.gradle文件中定义。
version= ‘1.0,最终jar文件的名称为 项目名称 ‘-’版本。中间是减号连接。虽然version元素可以定义版本,还是建议在jar里面定义名称和版本,脚本如下:
jar{
baseName = ‘myProjectName’
version = ‘2.0’
}
baseName定义jar文件名称;version定义jar版本。
如果你定义成这样:
version = '1.0'
jar {
baseName = 'MyJavaGradleProject'
version = '2.0'
}
则名称为:MyJavaGradleProject-2.0.jar;因为里面的优先级高。
2.4. 定义依赖
我们需要使用“dependencies”元素定义项目依赖。当我们增加依赖,gradle从maven仓库中下载jar包至本地仓库,并加入项目构建路径。
示例的项目定义如下:
dependencies {
compile group:'commons-collections',name:'commons-collections',version:'3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
使用‘compile’定义开发依赖;使用‘testCompile’定义测试依赖。
我们可以简化上面的脚本:
dependencies {
compile("commons-collections:commons-collections:3.2")
testCompile("junit:junit:4.+")
}
还可以去掉圆括号,更简洁:
dependencies {
compile "commons-collections:commons-collections:3.2"
testCompile "junit:junit:4.+"
}
这就是说,定义每个jar依赖,无需使用group、name、版本元素,可以使用最简单的格式。但是一定要保持顺序不变,即组名,然后版本。代替(,),使用冒号分离。
2.5. 定义仓库
我们使用下面的脚本元素定义连接中央仓库,下载项目需要的项目依赖至本地仓库。这里使用maven的仓库,也可以使用默认的jCenter仓库。
repositories{
mavenCentral()
}
Gradle支持从maven中央仓库和JCenter上获取构件,那这两者有什么区别呢?
maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的服务,它是Apache Maven、SBT和其他构建系统的默认仓库,并能很容易被Apache Ant/Ivy、Gradle和其他工具所使用。开源组织例如Apache软件基金会、Eclipse基金会、JBoss和很多个人开源项目都将构件发布到中央仓库。 maven中央仓库已经将内容浏览功能禁掉了,可在http://search.maven.org/查询构件。
https://jcenter.bintray.com)是由JFrog公司提供的Bintray中的Java仓库。它是当前世界上最大的Java和Android开源软件构件仓库。 所有内容都通过内容分发网络(CDN)使用加密https连接获取。JCenter是Goovy Grape内的默认仓库,Gradle内建支持(jcenter()仓库),非常易于在(可能除了Maven之外的)其他构建工具内进行配置。
JCenter相比mavenCenter构件更多,性能也更好。但还是有些构件仅存在mavenCenter中。
3. 运行gradle脚本
编写好脚本后,使用refresh gradle project 刷新gradle项目。
配置运行gradle脚本。
编译后的文件如下图:
至此,java项目打包完成。更深入内容,后面继续。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/52651673