Gradle HelloWord的创建及其与Maven的不同

  在这里,我通过在IDEA中创建简单的HelloWord开始,比较Gradle与传统的Maven有什么不同。

创建Gradle HelloWord

创建Gradle项目

  打开IDEA,点击Create New Project

这里写图片描述

  选中右侧的Gradle,在左侧选中Java,点击【Next】

这里写图片描述

  在这里,输入自定义的GroupId与ArtifactId,与Maven一样,GroupId一般为公司域名的反写,而ArtifactId为项目为-模块名。我这里输入的GroupId为com.lyc,输入的ArtifactId为gradle-demo,点击【Next】

这里写图片描述

  在这里,我们不用IDEA默认的gradle,我们选择自己配置的。选中图示中的选项,由于我们之前已经配置了Gradle的环境变量,所以说IDEA可以直接将本地已经搭建的Gradle查找并加载进来。点击【Next】

这里写图片描述

  在这里,我们可以修改我们自定义的工作空间,然后点击【Finish】

这里写图片描述

  如下的项目结构就是典型的Gradle的项目结构:

  • .gradle为Gradle项目的配置文件
  • .idea为IDEA这种IDE开发工具所生成的配置文件。

  上述两种配置文件都是以.来进行开头的,而该命名方式的文件夹在Linux操作系统中是系统默认的隐藏文件夹,所以说这两种文件夹基本上是不需要我们去进行关注的。

  • src是项目源码的存放位置
  • build.gradle是Gradle的项目配置文件,这里由Gradle的坐标,仓库,依赖,插件等
  • settings.gradle是Gradle项目及其子项目的依赖关系

这里写图片描述

编写HelloWorld测试文件

build.gradle

group 'com.lyc'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'org.projectlombok:lombok:1.16.20'
    compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.10.0'
    compile 'org.apache.logging.log4j:log4j-core:2.10.0'
}

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %t %-5l - %m%n"/>
        </Console>
    </appenders>
    <loggers>
        <root level="trace">
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

Person

package com.lyc;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@Builder
@ToString
public class Person {

    private int id;
    private String name;

    public String say(){
        return "Hello World!";
    }

}

PersonTest

package com.lyc;

import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

@Slf4j
public class PersonTest {

    private Person person = null;

    @Before
    public void init(){
        person = Person.builder()
            .id(1)
            .name("zhangsan")
            .build();
    }

    @Test
    public void test(){
        log.info(person.toString());
        Assert.assertEquals("Hello World!",person.say());
    }
}

  编写完之后的项目结构为:

这里写图片描述

创建Maven HelloWord

  创建与Gradle HelloWord对应的Maven文件,其结构为:

这里写图片描述

测试

Maven HelloWord测试

  Maven版本的测试比较的简单,就是直接在PersonTest文件中运行对应的test()方法,其运行的结果为:

这里写图片描述

Gradle HelloWord测试

  如果要是直接在Gradle项目中像在Maven项目中一样运行,那出现的结果将是:

这里写图片描述

  在代码的编辑区,代码不会报错,但是在控制台中,却显示Error信息。

  真实的运行方式是在IDE的右侧,点击图示的Build执行代码编译操作:

这里写图片描述

  项目正常编译的结果:

这里写图片描述

  在项目编译成功后,其在项目的结构中会生成build文件目录,在该目录下将会展示一系列的构建结果,其中的reports文件夹下则是存放的此次构建的测试报告,如下所示:

这里写图片描述

  用浏览器打开上图中的index.html文件,其展示的效果如下:

这里写图片描述

  通过点击com.lyc->PersonTest打开如下所示界面

这里写图片描述

  点击上图中的Standard output按钮,其执行的结果如下:

这里写图片描述

Gradle项目与Maven项目的不同

项目结构不同

Maven项目

  在Maven项目中,所有的构建结果都在target文件夹下,其中classes文件夹下存放的是项目编译之后的字节码文件,而在test-classes中存放的则是项目的测试代码编译文件。

这里写图片描述

Gradle项目

  在Gradle项目中,会在项目结构中生成buildout两个文件夹,无论在哪个文件夹下,其都有项目的编译文件。其中重点在build文件夹,其中的classes是java编译之后的子节码文件,libs是jar包所存放的位置,reports是项目测试报告resources是项目的资源文件,如下所示:

这里写图片描述

依赖坐标的不同

在Maven中的依赖

  在Maven中的依赖坐标主要有三部分组成,分别为:groupIdartifactIdversion,其中scope是作用域,就是指定该依赖的生存范围。

  • groupId是公司名的反写
  • artifactId是项目名+模块名
  • version是版本号
  • scope是作用域

  举例,在Maven中引入junit:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

在Gradle中的依赖

  在Gradle中的依赖坐标也是有三部分组成,分别为:groupnameversion由于Gradle支持Maven中央仓库,所以说在这里group等价于groupIdname等价于artifactIdversion连名字都相同,所以说用法也相同。而在Gradle中compile等价于dependencytestCompile等价于Maven中的dependency<scope>test</scope>

  举例,在Gradle中引入junit:

testCompile group: 'junit', name: 'junit', version: '4.12'

  由于Gradle是比Maven后出,同时Gradle在继承了Maven的功能后又实现了很多新特性,比如说简化代码,所以说即便是上面的引入junit依赖,我们仍可以进一步的简化为:

testCompile 'junit:junit:4.12'

项目源码:gradle-demo


猜你喜欢

转载自blog.csdn.net/zzy1078689276/article/details/80348705