gradle项目中profile的实现

gradle中并没有直接类似maven中的profile支持,只能变通的用其它方法来处理,在打包不同环境的应用时,通常会遇到二类问题:

一、不同的环境依赖的jar包不同

拿web开发来说,生产环境一般会采用weblogic,jboss这类重量级的容器,通常这类web server已经内置了很多第三方的通用jar包,而开发环境,一般采用嵌入式jetty这类轻量级的容器,内置的jar包会少一些,在maven中可以用<scope>provided</scope>来处理,到了gradle中可以这么处理:

build.gradle文件参考下面的写法:

def env = System.getProperty("env") ?: "dev"

apply from: "profile-${env}.gradle"

大概意思是,根据传入的参数env不同,加载不同的profile文件。在同级目录下,要放二个文件(下面演示的场景为,dev环境加载的spring版本为4.1.6,而prod环境加载的spring版本为4.2.3):

profile-dev.gradle

dependencies {
    compile ‘org.springframework:spring-core:4.1.6.RELEASE‘
    compile ‘org.springframework:spring-beans:4.1.6.RELEASE‘
    compile ‘org.springframework:spring-context:4.1.6.RELEASE‘
    compile ‘org.springframework:spring-context-support:4.1.6.RELEASE‘
    compile ‘org.springframework:spring-aop:4.1.6.RELEASE‘
}

profile-prod.gradle

dependencies {
    compile ‘org.springframework:spring-core:4.2.3.RELEASE‘
    compile ‘org.springframework:spring-beans:4.2.3.RELEASE‘
    compile ‘org.springframework:spring-context:4.2.3.RELEASE‘
}

编译时,gradle命令这么写:

gradle build -Denv=prod  这样编译的就是prod环境

gradle build -Denv=dev  这样编译的就是dev环境(注:dev是默认环境,所以如果是dev环境,最后的-Denv=dev也可以省略)

二、不同的环境,配置的参数不同

思路:为每个环境建不同的目录,把各环境的属性文件按目录存放,编译时动态设置gradle的资源目录

sourceSets {
    main {
        resources {
            srcDirs = ["src/main/resources", "src/main/profile/$env"]
        }
    }
}

在刚才的基础上,再加入这一段即可。

整个项目的结构图如下:

示例源代码: https://github.com/yjmyzz/gradle-profile-sample

时间: 2024-08-06 04:43:39

gradle项目中profile的实现的相关文章

AndroidStudio Gradle项目中添加.so文件

其实弄了大半天无非就是把.SO文件打包到APK的lib文件夹中,假如仔细阅读了Gradle的使用方法,自然就知道其实Gradle官方在新版已经自动实现了打包.SO文件的.很简单,跟eclipse一样,首先把armeabi 等等文件加考到app目录下的libs里,接着就是在配置的android节点下加入下面的内容就ok即build.gradle的android节点下: sourceSets { main { jniLibs.srcDirs = ['libs']  } }

gradle项目中如何支持java与scala混合使用?

一.目录结构 二.build.gradle配置 group 'yjmyzz'version '1.0-SNAPSHOT'apply plugin: 'java'apply plugin: 'scala'apply plugin: 'application' //可选(可自动生成shell启动脚本)mainClassName = 'AppDemo' //可选(与上行的application插件配套出现) //这里是关键(把java与scala的源代码目录全映射到scala上,// 这样gradle

Android Studio Gradle项目中添加JNI so文件

首先在Android Studio(版本1.2.2)工程的app目录下创建整个jni目录,jni目录里写Android.mk.Application.mk以及各类C/C++和汇编源文件.然后跟原来一样,用ndk_build工具去编,然后工具会自动生成libs目录,里面还有每个你在Application.mk里所指定处理器架构的so文件. 如果是引用第三方so,直接把相关的文件放在libs目录下 然后编辑app目录下的build.gradle文件,为其添加以下代码: sourceSets { ma

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.5——在项目中共享配置

问题: 取出多个模块下相同的配置 解决方案: 在顶级gradle配置文件里面使用allprojects或者subprojects块 讨论: 当你在android studio中新建android项目时,IDE创建了一个两级的gradle项目,一个配置文件在根目录下,一个在叫app的模块目录下.顶级的build.gradle有几个叫allprojects的块: 这个块是gradle的语法,所以不只是在adroid项目中,在所有基于gradle的项目中都能使用.allprojects属性来源于Gra

解决android studio项目中Failded to sync Gradle project &#39;XXXX&#39; Cause:failed to find target with hash string &#39;android-16&#39;问题

之前在github上通过import module导入一个项目,结果报错,提示找不到sdk相应的版本xx,而我的compileSdkVersion明明写的是23不是xx,查了半天也没解决.最后只好下载了那个版本的sdk. 今天导入SlidingMenu的module的时候,又遇到了这个问题.  问题: Cause:failed to find target with hash string 'android-16' in: E:\sony\Android\sdk failed to find B

Idea的gradle项目导入到eclipse中

* 背景:在eclipse中,先svn检出项目,发现项目没有grable的图标,于是删除项目(不删除实际文件夹),然后import- gradle project,导入后项目会显示gradle的图标了, 然后先build path,添加jre 和 tomcat,这个做好后,还有很多其他问题: 1,右键 gradle --> reflesh gradle project,出错 java cannot nest inside library.... ***** 改build.gradle文件,删除下

Android项目中如何用好构建神器Gradle?

摘要:本文作者贾吉鑫为大众点评Android工程师,在进行团队并行开发时,分库遇到的问题很多都要通过Gradle脚本解决.Gradle虽为构建神器,但学习曲线比较陡峭,要想在Android项目中用好Gradle必须要做到三点. Android Gradle实战 下面讲讲在Android Gradle实战中遇到的一些问题和经验,感觉还是蛮多干货的. productFlavors 这个东西基本上已经烂大街了,gradle的项目一般都会使用Product Flavor,看完美团的文章,你应该就懂了.

将Gradle项目发布到Maven Central库中

本文主要介绍如何一个由gradle构建的项目部署到Maven Central. 网上大部分都是介绍如何将由maven构建的项目部署到Maven Central.与Gradle相关的比较少. 申请账号 前往 sonatype申请账号. 申请完,Create Issue. 按照这个模板填. 这一块比较简单,网上教程也比较多. Create Issue结束后,官方会需要你证明你拥有相对应的domain. 证明有以下3个途径: Add a TXT record to your DNS referenci

idea中的springboot+gradle项目报错springboot configuration annotation processor not found in classpath

idea中的springboot项目,打开某个类run.halo.app.config.properties.HaloProperties.java,报错(使用gradle编译): springboot configuration annotation processor not found in classpath 网上的解决方案是pom.xml文件里面添加如下配置. <!-- 自定义的元数据依赖-><dependency> <groupId>org.springfr