Gradle多项目构建

基于以前自己都是直接用Intellij IDEA构建单个Gradle项目,但是在在实际中往往是一个Gradle项目中包含了几个子gradle项目,由于使用Intellij并没有直接构造一个gradle项目包含多个子项目的方法,但我们又想使用Intel lij进行程序编写。最好的办法就是先手动构造好Gradle多项目,再使用Intellij 进行导入。

具体操作如下:

1 新建一个文件夹multi-project-build用来存放gradle总项目,并在gradle总项目下建core和app分别存放两个子项目。总的目录结构如图1所示。

                                         图1 gradle总项目结构

2 配置总项目的settings.gradle和build.gradle

          1)项目的根目录下创建settings.gradle文件,一个多项目Gradle构建必须含有这个文件,因为它指明了那些包含在多项目构建中的项目。

          2)确保app和core项目包含在我们的多项目构建中。

          3)settings.gradle内容如下:

             include 'app'
             include 'core'

          4)build.gradle的内容如下:

            subprojects {
                  apply plugin: 'java'
                 repositories {
                         mavenCentral()
                 }
             }

3 配置core项目

 

               图2 core子项目

其中build.gradle的内容如下:

dependencies {
    compile "ch.qos.logback:logback-classic:1.1.7"
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.10.19'
    testCompile group: 'org.testng', name: 'testng', version: '6.9.9'
}

在src下创建main/java/com/keyda目录,并在core和log目录下分别创建MessageService.java、LogUtil.java两个java文件,为App下的HelloWorld.java提供所需的服务。

                                  图3 core项目的Log包

                            图4 core项目的服务包

MessageService.java的内容为:

package com.keydak.core;

/**
 * @author huangzhichang
 */
public class MessageService {

    public String getMessage() {
        return "Hello World!";
    }
}

4 配置app项目,app项目目录结构和core项目目录结构一致,其build.gradle的内容为:

apply plugin: 'application'

dependencies {
    compile 'log4j:log4j:1.2.17'
    compile project(':core')
}

mainClassName = 'com.keydak.main.HelloWorld'

task copyLicense {
    outputs.file new File("$buildDir/LICENSE")
    doLast {
        copy {
            from "LICENSE"
            into "$buildDir"
        }
    }
}

applicationDistribution.from(copyLicense) {
    into ""
}

src目录下创建java和resources文件夹,java文件夹下创建package:com.keydak.main,class:HelloWorld.java:

package com.keydak.main;

import com.keydak.core.MessageService;
import org.slf4j.LoggerFactory;

/**
 * @author HuangZhichang
 */
public class HelloWorld {
   

    public static void main(String[] args) {
        MessageService messageService = new MessageService();
        String message = messageService.getMessage();
        LoggerFactory.getLogger(HelloWorld.class).debug("Received message: " + message);     
    }
}


resources文件夹下有logback.xml文件,其内容为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="false" scanPeriod="30 seconds">

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are  by default assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{yyyy/MM/dd-HH:mm:ss} %level [%thread] %highlight(%caller{2}) - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 按日期区分的滚动日志 -->
    <appender name="APP" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/core.log</file>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>core.%d{yyyy-MM-dd}.log</fileNamePattern>

            <!-- keep 30 days' worth of history -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>


    <!-- 按日期和大小区分的滚动日志 -->
    <appender name="DEBUG-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/core.log</file>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>core-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>

            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <maxFileSize>1MB</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

    </appender>


    <root level="trace">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="APP" />
        <appender-ref ref="DEBUG-OUT" />
    </root>
</configuration>


5 配置好两个项目后,在cmd下切换到gradle-multi-project总项目目录,使用gradle进行编译运行

gradle build clean

gradle run

运行效果图

图5  gradle clean build 运行效果图

图6 gradle run运行效果图

6导入Intellij中进行代码开发

1)选择 file ->open 选择gradle-multi-project目录,回车确定即可



2)选择Run -> Run 'HelloWorld'运行即可。


项目的git网址为:https://github.com/Meihai/gradle-multi-project

参考网址:1. https://github.com/pkainulainen/gradle-examples/tree/master/multi-project-build

2. http://blog.jobbole.com/84471/





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值