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。
     
     

  • 相关阅读:
    zepto的源代码注释(转)
    关于js的连续赋值
    一道js题
    深入理解setTimeout的作用域
    深入理解setTimeout和setinterval
    webapp之路--apple私有属性apple-touch-icon
    javascript中的原型继承
    webapp之路--百度手机前端经验(转)
    (转)浏览器的渲染原理
    node.js study: cluster
  • 原文地址:https://www.cnblogs.com/nevermorewang/p/10707607.html
Copyright © 2011-2022 走看看