Gradle教程
Gradle教程
现在,我们知道了如何在系统中安装gradle并配置它的eclipse插件,现在该看一下gradle脚本了。
由于我们大多数从事Java技术工作的人都已经熟悉maven,因此我们将在maven和gradle构建脚本中讨论相同的元素,以便新用户可以轻松掌握Gradle构建脚本知识。
对于Gradle来说,这篇文章对Gradle构建脚本的理解非常重要。
请清楚地浏览每个部分。
Gradle教程– build.gradle
在讨论gradle教程要点时,我将引用上一篇文章中的build.gradle文件。
以下是我们较早的gradle示例项目中的build.gradle文件。
apply plugin: 'java' apply plugin: 'eclipse' sourceCompatibility = 1.5 version = '1.0' jar { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version } } repositories { mavenCentral() } dependencies { compile group:'commons-collections',name:'commons-collections',version:'3.2' testCompile group: 'junit', name: 'junit', version: '4.+' } test { systemProperties 'property': 'value' } uploadArchives { repositories { flatDir { dirs 'repos' } } }
以下是对不同元素的说明。
- Gradle教程– Java版本
如果我们在第4行观察到,它是指" sourceCompatibility",其值为" 1.5"。
这意味着它正在引用Java 1.5。
默认情况下,Eclipse Gradle插件使用" sourceCompatibility"元素引用Java 1.5,如下所示:
sourceCompatibility = 1.5
现在我正在使用Java 1.7,因此上述gradle脚本将产生以下警告消息。
:compileTestJavawarning: [options] bootstrap class path not set in conjunction with -source 1.5 1 warning
因此,我们需要将其更新为1.7,如下所示。
sourceCompatibility = 1.7
如果我们在Eclipse IDE中运行相同的gradle build命令,则不会看到这些警告,因为我们在IDE和Gradle的构建脚本文件中都使用了相同的Java版本。
在build.gradle文件中,我们使用" sourceCompatibility"元素定义gradle构建工具要使用的java版本。
- 应用所需的插件
我们需要使用以下语法在Gradle构建脚本文件中应用所需的插件。
apply plugin: <gradle-plugin-name-here>
例如,如果我们要使用Gradle在Eclipse IDE中开发Java应用程序,那么我们需要应用两个插件:" eclipse and java",如下所示
apply plugin: 'java' apply plugin: 'eclipse'
以下Gradle构建脚本定义为:
apply plugin: 'java' apply plugin: 'eclipse' sourceCompatibility = 1.7
与以下Maven构建脚本定义类似。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build>
其中我们定义了" maven-eclipse-plugin"插件以使用Java 1.7版本。
注意:与Gradle Eclipse插件一样,Maven Eclipse插件使用Java 1.5版本作为默认值。
- 打包项目文件
在开发完任何项目或者在不同的环境(Dev,QA,PROD等)中测试/部署项目之后,我们需要将其打包为所需的格式,例如Jar文件,War文件或者EAR文件。
然后如何在build.gradle文件中定义这种包装,以便" gradle build"命令将在构建执行结束时创建该文件。
在Gradle中,我们需要使用" jar"元素来通知" gradle"命令来创建JAR文件,如下所示:
jar { }
此Gradle元素类似于以下Maven元素
<packaging>jar</packaging>
要创建WAR(Web应用程序存档)文件,我们需要使用以下gradle语法。
war { }
此Gradle元素类似于以下Maven元素
<packaging>war</packaging>
要创建EAR(企业应用程序归档)文件,我们需要使用以下语法:
ear { }
此Gradle元素类似于以下Maven元素
<packaging>ear</packaging>
如果我们错过打包或者组装元素定义,那么maven和gradle都使用默认值:" jar"包插件。
由于" jar"是默认的汇编值,因此我们无需在gradle的构建脚本文件中应用jar插件。
但是,要创建WAR或者EAR,我们需要应用相应的插件,如下所示:
要创建WAR文件:
apply plugin: "war" war { }
要创建EAR文件:
apply plugin: "ear" ear { }
- Jar文件名和版本
Jar文件名:默认情况下,gradle使用项目名称作为jar文件名。
在我们的示例中,我们的项目名称为" JavaGradleSimpleExample"。
Jar文件版本:我们需要使用build.gradle文件中的" version"元素定义项目jar文件版本,如下所示。
version = '1.0'
此Gradle元素类似于以下Maven元素。
<version>1.0</version>
最后,我们的项目jar文件名=项目名称+版本名称。
这就是为什么我们的jar文件名为JavaGradleSimpleExample-1.0.jar的原因。
- 如何提供我们所需的项目名称和版本
正如我们所讨论的,我们可以使用build.gradle文件的" version"元素来定义Jar/WAR/EAR文件的版本。
但是建议使用此语法来定义我们的jar文件的名称和版本。
jar { baseName = 'MyJavaGradleProject' version = '2.0' }
这里baseName元素定义了jar文件名,而version
元素定义了版本号。
现在,我们新创建的jar文件名为MyJavaGradleProject-2.0.jar。
要创建战争文件,我们需要使用以下元素定义:
war{ baseName = 'MyJavaGradleProject' version = '2.0' }
它将创建一个名为以下名称的WAR文件:MyJavaGradleProject-2.0.war。
我们可以将该war文件部署到任何Web或者Application Server(例如Tomcat,Weblogic等)中,也可以使用" java -jar"命令运行它。
注意:-如果我们同时定义以下两个版本元素,将会发生什么?
version = '1.0' jar { baseName = 'MyJavaGradleProject' version = '2.0' }
gradle命令使用" jar {}"元素中的" version"元素,因此我们的Jar文件名为MyJavaGradleProject-2.0.jar,因为内部" version"元素的优先级高于外部元素。
内部"版本"元素将覆盖外部"版本"元素的值。
- Gradle依赖
我们需要在build.gradle文件中使用" dependencies"元素来定义我们的项目依赖项。
当我们定义依赖关系时,Gradle将从MavenRepository中检查那些jar文件,并将其下载到本地并添加到我们的项目构建路径中。
我们定义了" JavaGradleSimpleExample"项目的依赖项,如下所示:
dependencies { compile group:'commons-collections',name:'commons-collections',version:'3.2' testCompile group: 'junit', name: 'junit', version: '4.+' }
其中我们使用" compile"元素定义项目开发依赖关系,并使用" testCompile"元素定义JUnit/Testing依赖关系。
我们可以更简单地定义上面的" dependencies"元素,如下所示:
dependencies { compile("commons-collections:commons-collections:3.2") testCompile("junit:junit:4.+") }
我们还可以使用以下语法来定义" dependencies"元素(不带括号):
dependencies { compile "commons-collections:commons-collections:3.2" testCompile "junit:junit:4.+" }
这意味着,无需指定每个依赖项jar文件的组,名称和版本,我们就可以使用这种格式来定义它们。
但是我们应该注意以相同的顺序定义它们:组,名称然后是版本。
而不是逗号(,),我们需要使用冒号(:)运算符将它们分开。
像maven一样,在gradle构建脚本中,我们还定义了每个依赖项jar文件的组,名称和版本。
此gradle元素定义;
dependencies { compile group:'commons-collections',name:'commons-collections',version:'3.2' }
与以下Maven定义相似
<dependencies> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <dependencies>
这意味着Gradle的" group"元素类似于Maven的" groupId"元素。
Gradle的" name"元素类似于Maven的" artifactId"元素,而Gradle的" version"元素类似于Maven的" version"元素。
- Gradle资料库定义
我们使用以下Gradle构建脚本元素来定义所需的存储库,以连接我们的项目依赖项并将其下载到本地存储库。
repositories { mavenCentral() }
Here we are informing to Gradle eclipse plugin that use maven repository to download required dependencies.
将Gradle转换为Maven
最后,如果我们将Gradle的build.gradle构建文件转换为Maven的pom.xml文件,则其外观将如下所示:
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.theitroad</groupId> <artifactId>JavaGradleSimpleExample</artifactId> <version>1.0</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>
如果我们同时观察Gradle build.gradle文件和maven pom.xml文件,则可以发现maven的pom.xml文件是XML文件,并且需要很多XML起始标签和结束标签。
Gradle的build.gradle文件是计划文本和简单文件。
这是gradle相对于maven的最大优势之一。
Maven/Gradle本地存储库
当我们执行Maven/Gradle命令时,它们将与在线Maven存储库交互并将所需的jar下载到本地存储库中。
在Windows系统中,此本地存储库存储在" C:\Users \ [Windos-UserName] \。
m2 \ repository"中,如下所示。
在Unix/Mac系统中,.m2文件夹在用户的主目录中创建。