`
fantaxy025025
  • 浏览: 1329740 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

gradle替代maven

 
阅读更多

 

工具版本:Gradle:2.2.1 Groovy:2.3.6 JVM:1.6.0_43 
maven已经成为java web开发的标配,下面是一个常见的java web工程:

maven工程目录 
usercenter包含两个工程,app是web工程,common是公共模块,但是app的main目录下除了java、resources、webapp之外又多了一个native2ascii的资源目录,严格来说这不符合maven约定,不过没关系,gradle除了支持maven的约定外还允许自定义java或者resources目录

下面是gradle主配置文件(删除了大部分无关紧要的依赖,能说明问题即可)


// gradle插件
buildscript {
    repositories {
        jcenter { url "http://jcenter.bintray.com/" }
    }
    dependencies {
        // 远程布署插件
        classpath 'org.hidetake:gradle-ssh-plugin:1.0.1'
        // web容器,支持jetty和tomcat
        classpath 'org.akhikhl.gretty:gretty:1.2.0'
    }
}
// 全局配置,对所有工程有效
allprojects {
  apply plugin: "java"
  apply plugin: "idea"
  apply plugin: "eclipse"
  apply plugin: "maven"

  group = "com.test"
  version = "1.0"

  // 全局属性设置
  ext {
    junitVersion = "4.11"
    springVersion = "3.0.5.RELEASE"
    // java文件编码方式设置为utf-8
    compileJava.options.encoding = 'UTF-8'
    compileTestJava.options.encoding = 'UTF-8'
  }
}

// 所有子工程共有的配置
subprojects {
  // 配置多个maven源
  repositories {
      mavenLocal()
      mavenCentral()
      maven { url "http://mirrors.ibiblio.org/pub/mirrors/maven2" }
  }
  // 默认情况下gradle会选用版本最高的那个依赖,有时候会带来问题
  configurations.all {
    // 有版本冲突的时候强制使用指定的版本,对于相关依赖也同样有效
    resolutionStrategy.force(
      "org.springframework:spring-core:${springVersion}", 
    )
  }
  // 公共依赖配置
  dependencies {
      compile(
        "org.springframework:spring-core:${springVersion}",
      )
      testCompile(
        "junit:junit:${junitVersion}",
      )
  }
}
// app工程配置
project(':app'){
  apply plugin: 'war'
  apply from: 'gretty'
  // 使用gretty插件运行web工程
  gretty {
    httpPort = 8080
    debugPort = httpPort + 1
    servicePort = httpPort + 2
    statusPort = httpPort + 3
    httpsPort = httpPort + 4
    httpsEnabled = true
    contextPath = '/'
    jvmArgs = ['-Xmx1024M', '-XX:PermSize=128M', '-XX:MaxPermSize=256M']
    servletContainer = 'jetty7'
    scanInterval = 0
    inplaceMode = 'hard'
    debugSuspend = false
  }
  // 自定义resource文件夹
  sourceSets {
    main {
      resources.srcDirs = ['src/main/resources', 'src/main/native2ascii']
    }
  }
  dependencies {
    compile(
      // 依赖common工程
      project(":common"),
      "javax.servlet.jsp:jsp-api:2.1",
      "javax.servlet:servlet-api:2.5",
    )
  }
}
// common工程配置
project(':common'){
  // 设置resource文件目录,引入java文件夹下的xml文件
  sourceSets {
    main {
      resources.srcDirs = ['src/main/resources', 'src/main/java']
      resources.includes = ['src/main/java/**.xml']
    }
  }
  dependencies {
    compile(
      "org.mongodb:mongo-java-driver:2.10.1",
      fileTree(dir: 'lib' , include: '*.jar' )
    )
  }
}

settings.gradle中记录子工程,内容只有一行

include 'app','common'

可以把gradle配置写到多个文件夹下,每个子工程都下都新建一个build.gradle,如果工程比较简单,也可以像上面样,所有子工程的配置都写到主工程的build.gradle

运行的时候只需要在主工程的目录下执行一个命令即可

> gradle app:jettyRun

maven相似,gradle也是以插件的形式来扩展功能,新增插件 apply plugin: 'jetty' ,每个插件有配置都是以代码块的形式提供,上面的配置中使用的gretty配置web容器,gretty的配置块是:

  gretty {
    httpPort = 8080
    debugPort = httpPort + 1
    servicePort = httpPort + 2
    statusPort = httpPort + 3
    httpsPort = httpPort + 4
    httpsEnabled = true
    contextPath = '/'
    jvmArgs = ['-Xmx1024M', '-XX:PermSize=128M', '-XX:MaxPermSize=256M']
    servletContainer = 'jetty7'
    scanInterval = 0
    inplaceMode = 'hard'
    debugSuspend = false
  }

配置简单易懂,无需多讲

这里gretty配置了jetty7做为web容器,gradle自带jetty插件(不支持java代码热布署,只能更新jsp等),配置如下:

// jetty启动配置
jettyRun {
    httpPort = 8080
    contextPath = ""
    reload = "automatic"
    scanIntervalSeconds = 1
}

上面是简单的替代maven,显然gradle能做的不只这些,得益于groovy的轻巧,gradle提供了强大的灵活性。下面看一个应用场景。

使用 org.hidetake.ssh 插件,可以把本地的war包发布到远程服务器。在 build.gradle 头部加入如下配置

// 在gradle脚本build之前起作用
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.hidetake:gradle-ssh-plugin:1.0.1'
    }
}

buildscript用于配置不在maven仓库的插件,它在gradle脚本运行之前执行。

ext块中配置服务器:

// 远程服务器地址
tomcatPath = '/opt/tomcat'
// 远程服务器地址
remotes {
    server {
        host = '192.168.1.1'
        user = 'root'
        password = 'root'
    }
}

通常本地开发环境与服务器环境是不一致的,比如本地开发用的端口号是8080,远程服务器使用的域名和端口都不一样(由nginx转发请求),如果要在发布到远程服务器的时候替换配置文件中的域名,就可以这样。

先在ext块中配置域名对应关系

replaceUrl = [
    'myapp:8080' : 'myapp:7654',
    'mypartner:9090' : 'mypartner:7655',
]

再在project(':common')块中配置执行jar包阶段替换*.properties配置文件中的域名

// 如果是deploy到远程服务器,打包的时候替换域名
jar {
    def replace = false
    project.gradle.startParameter.taskNames.each{ command ->
        if(command.contains('deploy')){
            replace = true
        }
    }

    if(replace){
        filesMatching('**/*.properties') {
            filter{
                // it变量是filter迭代器中的默认名称,这里代表每一行
                def result = it
                replaceUrl.each{ key,value ->
                    if(it.contains(key)){
                        result = result.replaceAll key, value
                    }
                }
                result
            }
        }
    }
}

这段代码是原生的groovy代码了,gradle的灵活性就体现在这里了,关于groovy语言,大家自行脑补。

project.gradle.startParameter.taskNames是gradle命令行参数,如gradle clean app:deploy,那么命令行参数就是['clean', 'app:deploy']

filesMatching('**/*.properties') 是过滤所有的以properties结尾的文件,**是递归查找。接下来是布署代码了:

// 布署至远程服务器,上传的war名为app.war
task deploy(dependsOn: war) << {
  ssh.run {
    session(remotes.server) {
        put "$war.archivePath.path", "$tomcatPath/webapps/app.war"
        execute "$tomcatPath/bin/shutdown.sh"
        execute "rm -rf $tomcatPath/webapps/ROOT/*"
        execute "unzip -oq $tomcatPath/webapps/app.war -d $tomcatPath/webapps/ROOT"
        execute "rm -f $tomcatPath/webapps/app.war"
        execute "$tomcatPath/bin/startup.sh"
    }
  }
}

deploy只是简单的执行shell命令,上传war包,关闭tomcat,解压war,删除war,启动tomcat。 
布署命令:gradle clean app:deploy

 

From: http://my.oschina.net/enyo/blog/369843

分享到:
评论

相关推荐

    GradleUserGuide

    首先,《Gradle用户指南》的标题指明了这是一本专门针对Gradle的指南,而描述则强调了Spring框架从3.2版本开始采用Gradle替代Maven进行项目构建,以及Hibernate早已使用Gradle的事实,这说明了Gradle在Java生态中的...

    android-maven-gradle-plugin:弃。 现在由android build插件支持

    总之,Android开发社区的构建工具不断进化,`android-maven-gradle-plugin`作为过渡时期的一个解决方案,现在已经由功能更强大、更专业的`android.build.plugins`所替代。开发者应当跟上这一变化,利用最新的工具来...

    Android studio 配置gradle 2.3.3 插件所需pom、jar文件

    Gradle是一种灵活且强大的构建自动化工具,被广泛应用于Android项目中,替代了早期的Ant和Maven。本篇文章将深入讲解如何在Android Studio中配置Gradle 2.3.3插件,以及其所需的pom和jar文件。 首先,我们来理解`...

    gradle-7.2-bin.zip

    对于Java项目,Gradle 可以替代Maven,提供更灵活的构建配置。 总结,Gradle 7.2 作为一个强大的构建工具,其性能的提升、新特性的增加以及对Java模块系统的优化,都为开发者带来了更高的效率和更好的开发体验。...

    Gradle Tutorial

    对于那些正在寻找更加高效、易于理解构建系统工具的Java开发者,特别是那些已经在使用Maven或Ant的开发者来说,Gradle是一个值得尝试的替代品。通过学习和实践上述核心概念,开发者们可以更加有效地使用Gradle来自动...

    gradle-git-repo-plugin:使用git仓库作为Maven仓库

    `gradle-git-repo-plugin`是一个Gradle插件,它允许开发者将Gradle项目的构建结果直接推送到Git仓库,从而使得这些构建成果可以作为一个私有的、临时的或替代的Maven仓库使用。这个插件主要适用于那些希望利用Git的...

    mall-swarm:开源工程https

    本文将围绕一个名为"mall-swarm"的开源工程进行深入探讨,尤其是它如何通过Gradle替代Maven来提升项目构建速度,并结合HTTPS技术,为微服务商城系统提供更安全的服务。 首先,"mall-swarm"是一个基于 Swarm 的...

    zcurd:开源工程https

    总的来说,zcurd是一个致力于提升开发效率的开源工程,通过采用Gradle替代Maven,优化了项目构建过程。同时,它还提供了后台管理系统,方便用户进行各种管理操作。参与这样的开源项目,无论是对个人技能的提升还是对...

    gradle-5.4.1.7z

    作为Apache Ant和Apache Maven的现代化替代品,Gradle结合了两者的优点,提供了一种更加高效、可扩展和可配置的方式来管理软件开发过程。Gradle以其基于Groovy的领域特定语言(DSL)而闻名,使得构建脚本既简洁又易...

    gradle-4.2.zip

    Gradle是一款先进的自动化构建工具,尤其在Java生态系统中广受欢迎。...随着技术的发展,Gradle的确有可能在未来的某一天成为替代Maven的首选工具。对于Java开发者而言,掌握Gradle的使用是提高工作效率的重要途径。

    gradle合集 gradle-4.4-all.zip

    它的出现是为了替代Ant和Maven,提供更灵活、可配置和高性能的构建流程。Gradle-4.4是Gradle的一个特定版本,包含了该版本的所有组件和库。 在“gradle-4.4-all.zip”这个压缩包中,用户可以找到完整的Gradle 4.4...

    springboot(web项目,非maven)

    在这里,我们可能假设开发者选择了Gradle或者其他构建工具替代Maven。 Spring Boot的核心特性包括自动配置、内嵌的Servlet容器(如Tomcat或Jetty)、以及对Spring框架和其他常用库的一站式集成。它使得开发者可以...

    gradle-6.0.1-all.zip

    使用Gradle,开发者可以定义构建任务,控制依赖关系,处理资源文件,进行版本控制,并且可以与其他构建工具如Maven和Ant无缝集成。Gradle的DSL(领域特定语言)允许编写简洁且易于理解的构建脚本,使得项目管理更加...

    Gradle构建(war) web项目示例

    在现代的Java Web开发中,Gradle已经成为一个流行的构建工具,它替代了传统的Maven或Ant,提供了更灵活、可定制化的构建流程。本示例将深入探讨如何使用Gradle来构建一个WAR(Web Application Archive)文件,这是...

    gradle基础

    它的出现是为了替代Ant和Maven等传统构建工具,提供更灵活、高效的构建流程。Gradle采用Groovy和Kotlin作为其脚本语言,这使得构建脚本更加简洁且可读性强。 **一、Gradle基本概念** 1. **项目(Project)**: 在...

    gradle-5.1.1-all外部资源

    对于Java项目,Gradle也可以作为替代Maven的优秀选择,提供更定制化的构建流程。 总的来说,Gradle 5.1.1的发布为开发者带来了许多改进和新特性,旨在提升开发效率,优化构建体验,并且保持对最新技术的兼容性。...

    gradle-3.3

    它的出现是为了替代Maven和Ant等传统的构建系统,提供更灵活、高效的解决方案。`gradle-3.3`是Gradle的一个特定版本,这里我们详细探讨一下Gradle 3.3及其在软件开发中的作用。 首先,Gradle采用领域特定语言(DSL)...

    gradle-4.1-all.zip 离线包下载 需要下载

    5. **支持Kotlin DSL**:Gradle 4.1开始支持使用Kotlin来编写构建脚本,提供了一种类型安全且更现代的替代Groovy的方式。 6. **性能提升**:Gradle团队持续优化了内部算法和数据结构,使得构建速度更快,内存使用更...

    gradle-3.0.zip

    在Android开发领域,Gradle是标准的构建系统,它替代了早期的Ant和Maven,提供了更灵活、可配置的构建流程。"gradle-3.0.zip" 文件是一个包含了Gradle 3.0版本的压缩包,它是Android开发者必不可少的工具之一。 ...

    gradle-4.10.2-all.zip 官方绿色版

    它替代了传统的构建系统,如Ant和Maven,提供了更灵活、更高效的方式管理项目的构建过程。Gradle采用Groovy和Kotlin作为其脚本语言,允许开发者以声明式的方式定义构建逻辑,同时支持插件扩展,使得构建过程可以高度...

Global site tag (gtag.js) - Google Analytics