九.多项目构建

来源:互联网 发布:淘宝有名的网红店 编辑:程序博客网 时间:2024/05/29 14:45

一.项目模块化
  在企业项目中,包层次和类关系比较复杂,把代码拆分成模块通常时最佳实践,这需要清晰的划分功能的边界,比如把业务逻辑和数据持久化拆分开来。项目符合高内聚低耦合时,模块化就变得很容易,这是一条分厂好的软件开发实践

二.TODO模块化,分出:
1.Model
2.Repository
3.Web
依赖关系
Web依赖Repository,Repository依赖Model,因此Web也依赖于Model

三.实践
1.todo跟项目(总项目):
  build.gradle:
  

//group 'com.tiglle.WepApp'//version '1.0-SNAPSHOT'apply plugin: 'java'//gradle的插件,添加会增加相应的gradle命令apply plugin: 'war'//gradle的插件,添加会增加相应的gradle命令//所有项目都会继承的配置allprojects{    //所有项目都引入java插件,但是子项目配置后,会覆盖此配置    apply plugin:'java'    //所有项目都引入的依赖    dependencies{        //logback的依赖    compile ('ch.qos.logback:logback-classic:1.2.1')    }}repositories {    mavenCentral()}////添加依赖//dependencies {//    //junit的依赖//    testCompile group: 'junit', name: 'junit', version: '4.11'//    //bibernate的依赖//    compile 'org.hibernate:hibernate-core:3.6.3.Final'//    //logback的依赖//    compile 'ch.qos.logback:logback-classic:1.2.1'//}//排除传递性依赖//添加依赖dependencies {    //junit的依赖    testCompile group: 'junit', name: 'junit', version: '4.11'    //hbernate的依赖    compile ('org.hibernate:hibernate-core:3.6.3.Final'){        //排斥hibernate对slf4j的依赖        exclude group:'org.slf4j',module:'slf4j-api'    }    //logback的依赖    compile ('ch.qos.logback:logback-classic:1.2.1')}////取消gradle默认统一使用高版本依赖的策略(gradle默认依赖冲突解决策略)//configurations.all{//    resolutionStrategy{//        failOnVersionConflict()//    }//}//强制gradle默认统一使用某个版本依赖的策略(修改gradle默认依赖冲突解决策略)configurations.all{    resolutionStrategy{        failOnVersionConflict()        force 'org.slf4j:slf4j-api:1.7.22'    }}//闭包,必须声明在调用前面......def createDir = {    path ->        //如果文件夹不存在,创建        File dir = new File(path);        if(!dir.exists()){            dir.mkdirs();        }}//自定义任务(创建项目文件夹)task makeJavaDir(){    //声明文件夹(字符串数组)    def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resource']    //在动作列表的最前面添加动作    doFirst {        //循环path,调用闭包        paths.forEach(createDir);    }}//创建依赖于其他任务的任务task makeWebDir(){    //makeJavaDir任务会执行    dependsOn 'makeJavaDir'    //声明文件夹的数组(字符串类型)    def paths = ['src/main/webapp','src/main/webapp/WEB-INF']    doLast {        //循环调用闭包,创建文件夹        paths.forEach(createDir)    }}

gradle.properties:

# 项目的通用属性,所有项目会继承group = 'com.tiglle.WepApp'version = '1.0-SNAPSHOT'

settings.gradle:

//根项目rootProject.name = 'todo-web'//子项目include 'model'include 'repository'include 'web'//一个项目有一个跟项目,n个子项目

2.model子项目
build.gradle:

//group 'com.tiglle.WepApp'//version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.5repositories {    mavenCentral()}dependencies {    testCompile group: 'junit', name: 'junit', version: '4.11'}//闭包,必须声明在调用前面......def createDir = {    path ->        //如果文件夹不存在,创建        File dir = new File(path);        if(!dir.exists()){            dir.mkdirs();        }}//自定义任务(创建项目文件夹)task makeJavaDir(){    //声明文件夹(字符串数组)    def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resource']    //在动作列表的最前面添加动作    doFirst {        //循环path,调用闭包        paths.forEach(createDir);    }}

3.repository子项目
build.gradle:

//group 'com.tiglle.WepApp'//version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.5repositories {    mavenCentral()}dependencies {    testCompile group: 'junit', name: 'junit', version: '4.11'    //对子项目依赖的特殊写法    compile project(':model')}//闭包,必须声明在调用前面......def createDir = {    path ->        //如果文件夹不存在,创建        File dir = new File(path);        if(!dir.exists()){            dir.mkdirs();        }}//自定义任务(创建项目文件夹)task makeJavaDir(){    //声明文件夹(字符串数组)    def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resource']    //在动作列表的最前面添加动作    doFirst {        //循环path,调用闭包        paths.forEach(createDir);    }}

4.web子项目
build.gradle:

//group 'com.tiglle.WepApp'//version '1.0-SNAPSHOT'apply plugin: 'war'repositories {    mavenCentral()}dependencies {    testCompile group: 'junit', name: 'junit', version: '4.11'    //对子项目依赖的特殊写法    compile project(':repository')}

四.idea显示的项目关系
这里写图片描述

此时执行跟项目的clean等操作,会执行所有子项目的操作

原创粉丝点击