zoukankan      html  css  js  c++  java
  • gradle简单配置跟模块依赖

    参考文章:

    概述
      作为一个项目管理工具,maven已经流行了好多年,近几年gradle的项目慢慢多了起来,对其做一个基本的了解还是非常必要的。
      两者定位相同,既然产生了gradle这个后来者,那maven有哪些不足呢?一般说来,maven的不足主要在2个方面:
      1、不够简便。尤其当项目较大,依赖的jar包多的时候,pom文件会变的非常庞大,即使做了分段整理加了注释,查找起来还是感觉内容太多,有些不方便;
      2、不够灵活。其实这个多数时候还好说,至少我的感受并不明显。就是maven的构建过程是严格线性的(参见文章),如果要做额外的操作,需要借助插件或者干脆自定义插件,这都是相对繁琐的;
      而gradle由于grovvy语言的支持,可以做到比xml简化很多的配置文件,也可以自己灵活的控制编译打包的过程。
    目标
      搭建一个springboot的项目,实现controller跟service的分离依赖
    构建及打包测试
      spring的gradle项目,可以利用https://start.spring.io进行构建,比如:

      点击Generate Project,即可下载到一个压缩包,解压导入idea,结构如下:

      目录结构跟maven项目非常类似,只是原来的pom.xml替换成了settings.gradle跟build.gradle两个文件。settings主要用于设置父子模块依赖一类的配置,用于跟其它模块的交互,build则用于项目构建。
      默认settings.gradle的内容只有项目名一行:rootProject.name = 'zzzgradletest'
      默认build.gradle内容如下:

    plugins{
        id 'java'   //这是个java项目,因为gradle可以构建多种语言项目
        id 'org.springframework.boot' version '2.1.3.RELEASE'     
    }
    apply plugin: 'io.spring.dependency-management'
    group 'com.study.wzy'
    version '1.0-SNAPSHOT'
    sourceCompatibility = 1.8
    
    jar {   // 打jar包的配置
        baseName = 'mytest'
        version = '0.0.1'
        manifest {
            attributes "Manifest-Version": 1.0,
                    'Main-Class': 'com.study.wzy.GradletestApplication'
        }
    }
    repositories { //maven资源库配置
        mavenLocal() //优先使用本地库,win下可以跟maven共用,mac os下未找到如何配置共用
        mavenCentral()
    }
    configurations {
        compileOnly { //仅在编译时依赖,此处为lombok使用,相关注解在编译时生成getter、setter等
            extendsFrom annotationProcessor
        }
    }
    
    dependencies {  //依赖jar包,每个jar包坐标包含三个基本元素:group,name,version
        annotationProcessor 'org.projectlombok:lombok:1.18.6'
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.1.3.RELEASE'
        testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.1.3.RELEASE'
        testCompile group: 'junit', name: 'junit', version: '4.12'     //testCompile 表示作用域
    }
    

      运行idea右边gradle下的build,可以生成jar包,java -jar xxx.jar 进行运行,可以访问:

      示例代码:

      运行jar:
      访问结果
     拆解项目
      将项目拆为2个module,分别存放controller跟service,利用gradle设置依赖关系,并进行测试。
      idea中,file -> new Module ,选择gradle跟java,next到底。创建service如下:
    @Service
    public class TestService {
        public String getName(){
            return "jack";
        }
    }
    
    web项目的启动类代码为:  
    @RequestMapping("/test")
    @RestController
    @SpringBootApplication
    public class GradletestApplication {
        public static void main(String[] args) {
            SpringApplication.run(GradletestApplication.class, args);
        }
        @Autowired
        private TestService testService;
        @RequestMapping("/mytest")
        public String mytest(){
            return "hello " + testService.getName();
        }
    }
      在web项目,settings.gradle中引入service模块:
    rootProject.name = 'zzzgradletest'
    includeFlat  'zzzservicetest'
      在web项目的build.gradle中设置
    compile project(':zzzservicetest')
      引入service并进行依赖,gradle分别进行编译后就可以进行访问测试了
      另:以上建立的两个模块是独立的,没有在同一个project下,因此本例中将共同的依赖放到了service中,这样web在依赖了service后会根据依赖传递,依赖到spring的相关jar。若service跟web两个module都在同一个gradle的project下,则可以将共同的配置放到project的build.gradle中,而且在new module后会自动在project的setting.gradle中生成 include 'zzzservice' 类似的代码,此时,则不用在web中配置includeFlat ‘xxxxxxx’了,includeFlat的含义是引用一个同级模块。
      鉴于gradle的版本不同,有些配置也会略有区别,比如2.1及以上版本用plugins,而低版本则用apply plugin 。
     
      暂时这样,一个简单的demo,用于熟悉gradle。
     
     

  • 相关阅读:
    关于Maya Viewport 2.0 API 开发的介绍视频
    春节大假
    Some tips about the life cycle of Maya thread pool
    Can I compile and run Dx11Shader for Maya 2015 on my side?
    How to get current deformed vertex positions in MoBu?
    想加入全球首届的 欧特克云加速计划吗?
    三本毕业(非科班),四次阿里巴巴面试,终拿 offer(大厂面经)
    mac、window版编辑器 webstorm 2016... 永久破解方法。
    node 搭载本地代理,处理web本地开发跨域问题
    js 一维数组,转成嵌套数组
  • 原文地址:https://www.cnblogs.com/nevermorewang/p/10707607.html
Copyright © 2011-2022 走看看