zoukankan      html  css  js  c++  java
  • gradle新建工程,多项目依赖,聚合工程

    感谢gradle完全的文档。开始完全没想过新建项目会弄我一天时间,都说gradle构建项目简单,我现在回复他们呵呵。

    gradle是个非常复杂的工具,从他的完整包80M和72章官方文档就可以看出一二。

    一、平级项目依赖includeFlat

    我的环境是gradle3.2.1,eclipse-neon,eclipse插件是(Buildship 1.0),jdk1.8

    最常见的项目就是多工程平级的项目项目构造如下:

    A

    B

    C

    三个工程完全平级A是基础工程打成jar包给C引用,B是jar工程 也是打成jar给C引用。C是web工程打成war包发布。

    网上的坑爹教程都是骗人的,没一个能解决这个问题。还是官方文档靠谱,只是72章太多了。

    这样的工程配置其实非常简单,新建三个gradle工程

    A中的build.gradle完全不用改

    B中的settings.gradle

    [plain] view plain copy
     
    1. rootProject.name = 'B'  
    2. includeFlat  'A'  



    
    

    记得请使用includeFlat表示水平级别。最开始写成了include ‘A’结果坑了我4个多小时。

    B中的build.gradle

    [plain] view plain copy
     
    1. dependencies {  
    2.    compile project(':A')  
    3.    testCompile 'junit:junit:4.12'  
    4. }  


    请注意

    [plain] view plain copy
     
    1. compile project(':A')  

    这个是gradle的依赖工程的写法。有多个就写多个就好

    到这里B工程就配置完成了,打B的jar包就可以A一起打了。

    C中的settings.gradle,和B的一样加上

    [plain] view plain copy
     
    1. includeFlat  'A','B'  

    C中的build.gradle就需要改一下完整的如下

    [plain] view plain copy
     
    1. apply plugin: 'war'  
    2. apply plugin: 'java'  
    3. apply plugin: 'eclipse'  
    4.   
    5. repositories {  
    6.     mavenLocal()  
    7.     mavenCentral()  
    8. }  
    9.   
    10. dependencies {  
    11.     compile project(':A')  
    12.     compile project(':B')  
    13.     compile 'org.slf4j:slf4j-api:1.7.21'  
    14.     testCompile 'junit:junit:4.12'  
    15. }  

    修改了几个地方 

    1,加上了war的引用  加上之后插件中就显示有war的选项了,build的时候也会默认安装war的方式去打包。

    2,中央库被我改成默认使用maven的中央库了

    3,同时依赖了A B2个工程

    到这里多个平级工程就建好了!其实真的挺简单。

    二、聚合工程,模块式开发include

    然后开发中还会有一种需求,在maven中叫聚合工程。项目结构如下:

    C

    |------C1

    |------C2

    就是一个工程被分为多个模块,每个模块需要在eclipse中显示为单独的工程。

    其实写法非常简单,只是把之前的includeFlat改成include就好了

    C中settings.gradle

    [plain] view plain copy
     
    1. rootProject.name = 'C'  
    2. include 'C1','C2'  

    C1和C2都不需要修改任何代码,只是要在根目录下新增一个名为C1和C2的文件夹,C1和C2的文件夹下需要存在一个语法正确的build.gradle。

    然后刷新gradle就可以看到工程已经出来了。

    三、多工程,多模块依赖(bt依赖)

    假设

    A

    |----A1

    C

    |----C1

    现在如果C1需要依赖A1,那么问题来了,这2个子模块根本没啥关系,如何依赖呢!

    A中的settings.gradle

    [plain] view plain copy
     
    1. rootProject.name = 'A'  
    2. include 'A1'  

    A1貌似不需要修改啥

    C中的settings.gradle

    [plain] view plain copy
     
    1. rootProject.name = 'C'  
    2. include 'C1'  
    3. includeFlat 'A'  
    4. include 'A:A1'  

    一般来说我们是不会在子模块中放入settings.gradle。即使放了C1中的settings.gradle也是不生效的,所以只能在C中的配置中写入。
    C1中就可以在build.gradle

    [plain] view plain copy
     
    1. dependencies {  
    2.     compile project(':A:A1')  
    3.     testCompile 'junit:junit:4.12'  
    4. }  
     
    刷新gradle,这里的依赖请注意,因为gradle是默认带有依赖传递的,所以已经在A1引入的jar包在C1中也会默认引入,请注意jar包冲突。
    如果有重复的jar包,会以C1中的为准,这种工程非常容易出现重复的jar,请注意jar的依赖。

    总结:其实gradle是个很好用的工具,只是现在资料不好找。而且网上误导不全的一大把! 所以学gradle还是老老实实去看官方文档吧。

    另:如果让我在选一次,我是不会选择gradle的!!!!! 因为他的tomcat插件太难用了,而且国外一般都是linux开发环境,一堆命令行,在我们这种用习惯eclipse的人来说太不友好了。我是出现tomcat插件在eclipse中永远8%的问题了的,在命令行就可以启动。玛德,这样起了断点怎么调试,简直蛋疼。最后还是引入了spring boot才把调试问题搞定,引入了spring boot之后又要把web.xml去掉,解决一个问题就要连锁反应,这个就不太好了。所以差评!!差评!!差评!!

    不是gradle不强大,而且我太low。

  • 相关阅读:
    wpf随笔
    XGrid绑定(转)
    SQL Server 批量插入数据的两种方法(转)
    UdpClient的Connect究竟做了什么(转)
    InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)
    [C#] Control.Invoke方法和跨线程访问控件
    多线程访问winform控件出现异常的解决方法
    http://www.jdon.com/mda/oo_relation.html
    三范式浅析(转)
    SQL 表锁(转)
  • 原文地址:https://www.cnblogs.com/JAYIT/p/8808133.html
Copyright © 2011-2022 走看看