Gradle构建之初步入门

Posted rage_angel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle构建之初步入门相关的知识,希望对你有一定的参考价值。

使用gradle的目的:

1、代替Maven来管理依赖包。
2、通过配置任务取代之前一步步敲npm、bower、gulp等命令来实现的安装前端依赖环境。
3、构建项目


实现方法:
1、关于包依赖还是蛮容易实现的,百度(都说不习惯用谷歌的程序员不是好的程序员,但是,还是习惯性先百度再谷歌。事实再次证明,要想找你想要的东西,而且这个东西又不是那么被大众所熟悉,那么还是从谷歌上找比较靠谱。习惯百度这是个坏毛病,以后得改)一大堆例子。
Maven的pom.xml是这样的:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>

        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
    </dependencies>

Gradle在build.gradle配置文件中是这样的。

dependencies 
    compile group: 'junit', name: 'junit', version:'4.10'
    compile group: 'org.springframework', name: 'spring-core', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-context', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-context-support', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-aop', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-tx', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-beans', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-web', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-webmvc', version:'4.1.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-orm', version:'4.1.6.RELEASE'
论代码的简洁性,Gradle完胜。

后来又百度了一个命令,非常有用,那就是如果你之前用的是Maven项目,那么怎么转换Gradle项目呢?当然没必要去一点点写啦。

gradle init --type pom
一行命令搞定。借鉴  http://blog.csdn.net/earbao/article/details/41550387

补充:当时有个小东西令人纠结了半天,就是这些包导入之后,发现跟自己新建个Gradle项目时导入的包显示形式不一样,当时直觉是哪里配置有问题,为了解决这个问题找了好久解决方法,后来才知道,刷新一下就可以了,如下图所示。心里顿时万马奔腾。。。。。不过还好,总算是包正常了。

 

2、关于用Gradle的配置来代替在Terminal端执行命令来完成安装前端js包的问题

这个问题绕了好久。一开始是想实现直接在配置文件里写任务,来执行命令的,但是奈何初始Gradle,对对方的命令一窍不通。网上的案例也是寥寥,只有个windows命令和Linux下的命令。搞了好久,才在https://gist.github.com/spikeheap/8558786#file-build-gradle这个上面看到有关执行npm命令的方法。

一开始还走了个弯路,因为我们要执行这些命令是在子文件夹下的,但是在跟目录的build.gradle中怎么写Task路径都不通过。

后来,终于解决那个路径问题了,方法很简单,我们要实现子目录下的命令执行,那么就直接在子目录的那个文件夹里新建个build.gradle的配置文件就Ok了。各司其职。

至于命令格式,参考如下(其实为什么这么写我也不是特别懂):

import org.gradle.api.tasks.Exec

defaultTasks 'bower'

// Get the path for the locally installed binaries
task npmBin << 
    new ByteArrayOutputStream().withStream  os ->
        def result = exec 
            executable = 'npm'
            args = ['bin']
            standardOutput = os
        
        ext.binPath = os.toString().trim() + "/"
    


// Install packages from package.json
task npm(type: Exec) 
    description = "Grab NodeJS dependencies (from package.json)"
    commandLine = ["npm", "install"]
    inputs.file "package.json"
    outputs.dir "node_modules"
    tasks.npmBin.execute()



3、构建

第二个问题暂时性解决了,但是构建时我想先执行子目录下的任务,再打包构建。直接dependsOn?在跟目录下执行gradle tasks --all,很遗憾,只能看到跟目录下的任务。后来,通过对http://www.blogjava.net/wldandan/archive/2012/07/12/382792.html这篇文章详细解读,在跟目录的setting.gradle中配置include:‘子文件夹’,再次查看task,果然有了子目录下的任务。再次依赖,问题便迎刃而解。

构建代码:

/*构建项目*/
task explodedWar(dependsOn:'子文件夹:任务名', type: Sync)  
    into "构建到指定路径"
    with war


war 
    from('xxx') 
        into('/')
    

end:现在项目大体上已经搭建起来了,但是Gradle貌似还有很多东西,以后还会多多关注,多多学习。有不足之处,欢迎提出宝贵意见。


以上是关于Gradle构建之初步入门的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 构建:从入门到实战

Gradle初步

一OpenStack入门 之 初步认识

OpenStack入门 之 初步认识

Gradle入门之Groovy语法

项目自动化建构工具gradle 入门0——环境 & 废话