Skip to content

Latest commit

 

History

History

gradle

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Gradle

https://gradle.org/install/

安装

  • 确认环境
java -version
  • 使用 SDKMAN 安装

https://github.com/sdkman/sdkman-cli

curl -s "https://get.sdkman.io" | bash 
sdk install gradle 4.7

使用 Gradle Wrapper

生成

gradle wrapper

产生以下目录结构:

.
├── build.gradle
├── settings.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
  • 选项
  • --gradle-version

The Gradle version used for downloading and executing the Wrapper.

  • --distribution-type

The Gradle distribution type used for the Wrapper. Available options are bin and all. The default value is bin.

  • --gradle-distribution-url

The full URL pointing to Gradle distribution ZIP file. Using this option makes --gradle-version and --distribution-type obsolete as the URL already contains this information. This option is extremely valuable if you want to host the Gradle distribution inside your company’s network.

  • --gradle-distribution-sha256-sum

The SHA256 hash sum used for verifying the downloaded Gradle distribution.

gradle wrapper --gradle-version 4.0 --distribution-type all
  • 提供 build.gradlesettings.gradle

项目中一般会出现2个或者多个build.gradle文件,一个在最完全的目录下,一个在app目录下。如果切换到Android模式下则全部在Gradle Scripts。

.
├── build.gradle
├── settings.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat

使用 Gradle 构建 Java 项目

  • 创建目录结构

在项目主目录下,创建以下子目录;在 *nix 系统下可以使用命令:

mkdir -p src/main/java/hello

在 src/main/java/hello 目录中,你可以创建任何 Java 类。为简单起见并且为了与指南的其余部分保持一致,我们建议创建两个类 HelloWorld.java 和 Greeter.java

src/main/java/hello/HelloWorld.java 的源代码:

package hello;

public class HelloWorld {
  public static void main(String[] args) {
    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

src/main/java/hello/Greeter.java 的源代码:

package hello;

public class Greeter {
  public String sayHello() {
    return "Hello world!";
  }
}

在我们为项目创建 build.gradle 文件之前,我们可以先问一下Gradle目前有哪些可用的任务(Tasks):

gradle tasks

如果在 build.gradle 中配置了插件(plugins)上面的任务列表会变得更长,最好在配置插件后使用 gradle task 看看那些任务是可用的。

  • 构建Java代码

先从简单的开始,创建一个最简单的只有一行的 build.gradle 文件:

apply plugin: 'java'

这行行配置,用来编译java项目的任务、用来创建JavaDoc的任务、用来执行单元测试的任务。

我们经常使用的任务是gradle build,这个任务执行以下操作:编译、执行单元测试、组装Jar文件。

构建已经完成之后可以看到很多子目录,其中有三个我们需要特别注意:

  • classes 保存被编译后的.class文件

  • reports 构建报告(如:测试报告)

  • lib 组装好的项目包(通常为:.jar或者.war文件)

  • 申明依赖

假设我们希望更好的说”Hello World!”,我们希望应用程序能同时输出当前的日期和时间。 首先,把HelloWorld.jara类修改成下面这样:

package hello;
 
import org.joda.time.LocalTime;
 
public class HelloWorld {
  public static void main(String[] args) {
    LocalTime currentTime = new LocalTime();
    System.out.println("The current local time is: " + currentTime);

    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

这里我们的HelloWorld使用”Joda Time”的LocalTime类来获取和输出当前时间。 添加一些配置来定义第三方库的来源:

repositories {
    mavenLocal()
    mavenCentral()
}

上面的repositories定义,告诉构建系统通过Maven中央库来检索项目依赖的软件包,现在我们可以使用第三方库了,但现需要定义:

dependencies {
    compile "joda-time:joda-time:2.2"
}

使用dependencies块,我们定义了一条Joda Time的依赖项。这里,明确指定使用joda-time组内的版本为2.2的joda-time库。 我们在这个依赖定义中指定依赖是compile范围的。意思是,这个库在编译和运行时都需要。

另外值得注意的依赖类型包括:

  • providedCompile 在编译期间需要这个依赖包,但在运行期间可能由容器提供相关组件(比如:Java Servlet API)

  • testCompile 依赖项仅在构建和运行测试代码时需要,在项目运行时不需要这个依赖项。

我们来定义我们将生成的Jar文件的名字:

jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}

在上面的例子中,我们的JAR文件的名字为:gs-gradle-0.1.0.jar

build.gradle 文件中增加以下代码用来指定 Gradle 版本用来初始化wrapper脚本:

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}
  • 下载和初始化 wrapper 脚本
gradle wrapper

命令执行完后,我们可以看到增加了一些新文件。有两个文件在根目录下,

wapper 的 jar 文件和 properties 文件在新增的 gradle/wrapper 目录下。

运行 wrapper 脚本来构建系统,跟我们之前的命令很像:

./gradlew build

要想让代码可以运行,我们可以使用Gradle的application插件。增加以下内容到build.gradle文件中。

apply plugin: 'application'
mainClassName = 'hello.HelloWorld'

现在我们的app可以执行了。

./gradlew run