Gradle教程

时间:2020-02-23 14:41:22  来源:igfitidea点击:

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文件夹在用户的主目录中创建。