idea创建gradle父子项目结合springBoot——详细介绍build.gradle

目录

前言

第一步:创建父工程

第二步:创建子模块——library

第三步:创建子模块——application

第四步:配置父子工程的build.gradle文件 

4.1. demo父工程build.gradle的配置

4.2. library子工程的build.gradle的配置

4.3. Application子工程的build.gradle的配置

第五步:单元测试验证

5.1. Application项目结构

5.2. DemoApplication入口代码

5.3. UserService的简单方法

5.4. 单元测试代码

参考资料


前言

使用idea创建一个gradle父子工程,父工程里包含两个子工程。一个是经常被用作其他工程依赖的jar, 名为library;另一个是自己部署的业务逻辑代码应用,名为application.

工具

版本

Idea

2019.3.3

gradle

5.2.1

第一步:创建父工程

选择Gradle,以及对应的jdk版本。

下一步:配置父工程的名称、保存地址、组、工程标识、工程版本,如下图。

 工程文件介绍:

Demo——工程名称

        .gradle——idea导入gradle工程, 自动编译生成的gradle文件,不用关心。

                ...

        .idea——idea导入工程, 自动编译生成的idea文件,不用关心。

                ...

        build.gradle——gradle的构建文件,里面就如maven的pom.xml文件,非常重要的文件。

        gradle——idea编译gradle工程时,用得到的gradle插件jar,不用关心。

        wrapper

                gradle-wrapper.jar

                gradle-warrper.properties

        gradlew——在linux系统上可以运行构建gradle工程的脚本,不用关心。

        gradlew.bat——在window系统上可以运行构建gradle工程的脚本,不用关心。

        settings.gradle——针对module的全局配置,该工程所有子module都是通过settings.gradle来配置。

        src——源码文件包

                main——上线部署的源码包

                Test——单元测试的源码包

External Libraries——该工程依赖的所有外部jar展示

        ...

 工程中不用关心的脚本文件(gradlew和gradlew.bat)删除掉, 因为我们是使用java -jar启动工程。还有父工程src文件夹也要删掉,我们源代码是放在子模块中开发的。精简后的目录如下。

 

第二步:创建子模块——library

在idea的project的table中,选中父工程名,new->module。

下一步:跟创建父工程一样,仍然选中Gradle创建模块.

下一步:配置子模块工程的名称、保存路径、组名、唯一标识、版本。然后finish.

 下一步:创建子模块后,idea会对父工程重新构建,父工程会多出个src文件夹,删掉不用。但父工程的settings.gradle新增了一个子模块的配置, 子模块因为不需要单元测试,所以删除test包目录,main包里的resources也不需要,删掉。

删除无需关心的文件夹后的目录结构如图:

第三步:创建子模块——application

第一步:跟创建父工程一样,仍然选中Gradle创建模块,创建子模块application。

下一步:新建了第二个子模块后,父工程和所有子工程都会被重新重新编译导入idea。也会重新生成一些文件,我们仍然删除掉我们不需要的文件。

新加一个.gitingore文件(小技巧:.gitingore可以通过选择spring initialzr工程并指定gradle工程生成获得)。最后的工程结构如图:

第四步:配置父子工程的build.gradle文件 

4.1. demo父工程build.gradle的配置

buildscript {
    ext {
        mavenPublicUrl = 'http://nexus.xxx.com/repository/maven-public/'
//私服快照地址
        mavenSnapshotUrl = 'http://nexus.xxx.com/repository/xxx-snapshot/'
//私服正式地址
        mavenReleaseUrl = 'http://nexus.xxx.com/repository/xxx-releases/'

        mavenPublishUsername = 'admin'
        mavenPublishPassward = 'xxxxxx'

        lombokVersion = '1.18.8'
    }
}

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

// 所有子项目的通用配置
allprojects{
    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'maven-publish'

    //指定jdk版本
    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories {
//      阿里云的仓库
//        maven{ url  'http://maven.aliyun.com/nexus/content/groups/public' }
        maven {url "${mavenPublicUrl}" }
        maven {url "${mavenSnapshotUrl}" }
        maven {url "${mavenReleaseUrl}" }
        mavenCentral()
    }

    dependencies {
        //lombok
        compileOnly "org.projectlombok:lombok:${lombokVersion}"
        annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
        testCompileOnly "org.projectlombok:lombok:${lombokVersion}"
        testAnnotationProcessor "org.projectlombok:lombok:${lombokVersion}"
    }
}

4.2. library子工程的build.gradle的配置

group 'org.example'
version '1.1.RELEASE'

//maven-publish是打包并发布jar上传至私服的插件
apply plugin: 'maven-publish'

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}
//指定上传的注释,包含标注date和email
javadoc {
    options.encoding = 'UTF-8'
    options.tags = ["date", "email"]
}
//上传source
task sourcesJar(type: Jar) {
    from sourceSets.main.allJava
    archiveClassifier = 'sources'
}
//上传java注释
task javadocJar(type: Jar) {
    from javadoc
    archiveClassifier = 'javadoc'
}
//发布jar到私服
publishing {
    publications {
        maven(MavenPublication) {
            artifactId "demo-library"
            from components.java
            artifact sourcesJar
            artifact javadocJar
        }
    }
    repositories {
        maven {
            name 'myDemo'
            //指定要上传的maven私服仓库
            url = version.endsWith('SNAPSHOT') ? "${mavenSnapshotUrl}" : "${mavenReleaseUrl}"
            //认证用户和密码
            credentials {
                username "${mavenPublishUsername}"
                password "${mavenPublishPassward}"
            }
        }
    }
}

 library打包上传私服请选择name对应的发布上传命令,如下图:

4.3. Application子工程的build.gradle的配置

buildscript{

    repositories {
//      阿里云的仓库
//        maven{ url  'http://maven.aliyun.com/nexus/content/groups/public' }
        maven {url "${mavenPublicUrl}" }
        maven {url "${mavenSkioSnapshotUrl}" }
        maven {url "${mavenSkioReleaseUrl}" }
        mavenCentral()
    }
    dependencies {
        //该插件定义了的spring-boot和dependency-management的引入版本
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group 'org.example'
version '1.0-SNAPSHOT'

dependencyManagement {
    imports {
        //指定依赖的spring-cloud版本
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

dependencies {
    compile project(":library")
    compile('org.springframework.boot:spring-boot-starter-web')
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

第五步:单元测试验证

5.1. Application项目结构

5.2. DemoApplication入口代码

package com.jiangbo.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * com.jianbo.demo.DemoApplication
 *
 * @author chengjiangbo@shandiantech.com
 * @version 1.0.0
 * @date 2021/08/16
 */
@EnableEurekaClient
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

5.3. UserService的简单方法

package com.jiangbo.demo.sevice;

import dto.UserDTO;
import org.springframework.stereotype.Service;

/**
 * UserService
 *
 * @author chengjiangbo@shandiantech.com
 * @version 1.0.0
 * @date 2021/08/16
 */
@Service
public class UserService {

    public UserDTO getById(Long userId){
        UserDTO userDTO = new UserDTO();
        userDTO.setId(userId);
        userDTO.setName("张三");
        userDTO.setAge(20);

        return userDTO;
    }
}

5.4. 单元测试代码

package com.jiangbo.demo;

import com.jiangbo.demo.sevice.UserService;
import com.netflix.discovery.converters.Auto;
import dto.UserDTO;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.Assert;

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        UserDTO userDTO = userService.getById((long) 1);
        Assert.notNull(userDTO, "userDTO不能为空");
    }

}

参考资料

  1. https://blog.csdn.net/gavinchen1985/article/details/81673132
  2. https://docs.spring.io/spring-boot/docs/2.5.3/gradle-plugin/reference/htmlsingle/
  3. 深入了解gradle和maven的区别
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,关于使用 Gradle 创建多模块 Spring Boot 工程的方法,可以按照以下步骤操作: 1. 创建 Gradle 项目IDEA创建一个 Gradle 项目,选择 Kotlin 或者 Java 作为编程语言,选择 Gradle 作为项目类型,然后点击下一步。 2. 创建多模块工程 在项目创建完成后,可以在项目根目录下创建一个 settings.gradle 文件,然后在其中定义多模块工程的名称,例如: ``` rootProject.name = 'my-spring-boot-project' include 'my-spring-boot-project-core' include 'my-spring-boot-project-web' ``` 这里我们定义了两个子模块,即 my-spring-boot-project-core 和 my-spring-boot-project-web。 3. 配置子模块 在每个子模块的 build.gradle 文件中,添加 Spring Boot 插件和其他必要的依赖,例如: ``` plugins { id 'org.springframework.boot' version '2.6.0' id 'io.spring.dependency-management' version '1.0.11.RELEASE' kotlin("jvm") version "1.5.31" } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // 其他依赖 } ``` 4. 配置子模块之间的依赖关系 在每个子模块的 build.gradle 文件中,可以添加对其他子模块的依赖,例如: ``` dependencies { implementation project(':my-spring-boot-project-core') } ``` 这里我们在 my-spring-boot-project-web 子模块中添加了对 my-spring-boot-project-core 子模块的依赖。 5. 运行 Spring Boot 应用 在每个子模块中,都可以创建一个 Application 类来启动 Spring Boot 应用,例如: ``` @SpringBootApplication class MySpringBootProjectApplication fun main(args: Array<String>) { runApplication<MySpringBootProjectApplication>(*args) } ``` 然后在每个子模块的 build.gradle 文件中,添加运行 Spring Boot 应用的任务,例如: ``` tasks.named("bootRun") { dependsOn(":my-spring-boot-project-core:build") classpath = sourceSets.main.get().runtimeClasspath } ``` 这里我们定义了一个 bootRun 任务,它依赖于 my-spring-boot-project-core 子模块的 build 任务,然后设置 classpath。 6. 运行多模块 Spring Boot 应用 最后,在项目根目录下运行以下命令,即可启动多模块 Spring Boot 应用: ``` ./gradlew :my-spring-boot-project-web:bootRun ``` 这里我们启动了 my-spring-boot-project-web 子模块的 Spring Boot 应用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值