Gradle Properties

Gradle的Properties http://hugozhu.myalert.info/2014/07/23/47-use-gradle-properties-to-set-alternative-android-build-tools.html 目录 问题背景 解决方案 修改build.gradle使用变量设置版本号 在setting.gradle中设置缺省的版本 在gradle.properties文件中重载版本号 命令行使用 参考链接 问题背景 团队一起在开发一个Android项目,工程师有的使用Eclipse,有个使用Intellij IDEA,有的使用Android Studio。每个人安装的Android SDK build-tools可能都不一样,有的是19.0.3,有的是19.1.0,不同版本的build-tools对Gradle Plugin也有相应的要求,如19.0.3对应的是com.android.tools.build:gradle:0.10.+,19.1.0对应的是com.android.tools.build:gradle:0.12.+,下面是一个典型的build.gradle配置文件。 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.10.+' } } apply plugin: 'android-library' android { compileSdkVersion 19 buildToolsVersion 19.0.3 defaultConfig { minSdkVersion 8 targetSdkVersion 19 } } 在合作开发中遇到的一个尴尬的问题是,IDEA最新版还不能很好的支持Gradle Plugin 0.12+,而Android Studio最新版则要求使用0.12+。大家又共用一个Git仓库。可能的解决方案是, 从 Git checkout 出来的项目需要有一个基础的版本号,但是开发者可以在本地通过一处文件 (不check in到git) 来重载版本号。 解决方案 Gradle支持三种Properties, 这三种Properties的作用域和初始化阶段都不一样,下面分别列出了其部分特点。: System Properties: 可通过gradle.properties文件,环境变量或命令行-D参数设置 2. 可在setting.gradle或build.gradle中动态修改,在setting.gradle中的修改对buildscript block可见; 所有工程可见,不建议在build.gradle中修改 多子工程项目中,子工程的gradle.properties会被忽略掉,只有root工程的gradle.properties有效; Project Properties: 可通过gradle.properties文件,环境变量或命令行-P参数设置,优先级是: 可在build.gradle中动态修改,但引用不存在的project properties会立即抛错 动态修改过的project properties在buildscript block中不可见 Project ext properties: 可在项目的build.gradle中声明和使用,本工程和子工程可见 不能在setting.gradle中访问 如果有多处设置,加载次序如下 (注意: gradle 2.0是这样的, 1.10~1.12有bug) , 后面的覆盖前面的设置 ...

Created 3036-12-03 · Updated 9096-10-09 · 2 min · 217 words · -

gradle maven snapshot

gradle maven snapshot configurations.all { // check for updates every build resolutionStrategy.cacheChangingModulesFor 0, ‘seconds’ } dependencies { compile group: “group”, name: “projectA”, version: “1.1-SNAPSHOT”, changing: true } https://discuss.gradle.org/t/how-to-get-gradle-to-download-newer-snapshots-to-gradle-cache-when-using-an-ivy-repository/7344 gradle maven plugin https://docs.gradle.org/current/userguide/publishing_maven.html#header gradle v5.3.1 group = "com.wiloon.group0" version = "0.0.1-SNAPSHOT" plugins { `java-library` `maven-publish` id("com.gradle.build-scan") version "2.2.1" } tasks.register<Jar>("sourcesJar") { from(sourceSets.main.get().allJava) archiveClassifier.set("sources") } tasks.register<Jar>("javadocJar") { from(tasks.javadoc) archiveClassifier.set("javadoc") } publishing { publications { create<MavenPublication>("maven") { from(components["java"]) artifact(tasks["sourcesJar"]) artifact(tasks["javadocJar"]) } } repositories { maven { val releasesRepoUrl = "http://nexus.wiloon.com/repository/maven-releases" val snapshotsRepoUrl = "http://nexus.wiloon.com/repository/maven-snapshots" url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl) credentials { username = "admin" password = "password" } } } } 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;categories 改为 Java 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 6066-11-06 · Updated 9096-10-09 · 1 min · 118 words · -

Spring Boot

Spring Boot 是什么 Spring Boot 是 Pivotal (现为 VMware/Broadcom)在 2014 年推出的框架,建立在 Spring Framework 之上,目标是简化整个 Spring 生态的开发、配置和部署。它不只是简化 Spring MVC,同样简化了 Spring Data(数据库访问)、Spring Security(认证授权)、Spring Messaging(消息队列)等全家桶的配置。 核心理念是 “约定优于配置”(Convention over Configuration):框架提前定好"默认约定",只要遵循这些约定,就不需要写任何配置;只有想偏离默认行为时,才需要显式配置。 例如,classpath 里有 spring-boot-starter-web,Spring Boot 就约定你要启动一个 Web 服务,自动完成:注册 DispatcherServlet、内嵌 Tomcat 监听 8080 端口、注册 Jackson 用于 JSON 序列化。你什么都不写,java -jar app.jar 就能跑起来。需要覆盖默认行为时,只在 src/main/resources/application.yml 中写偏离默认值的部分: server: port: 9090 # 只需声明偏离默认值的配置 也可通过命令行参数临时覆盖:java -jar app.jar --server.port=9090,优先级高于 application.yml。 出现背景 Spring Boot(2014)与微服务架构的兴起同期出现。2014 年 Martin Fowler 发表了微服务架构的奠基性文章,微服务要求每个服务独立部署、快速启动、进程隔离。传统的 WAR 包 + 外部 Tomcat 的部署方式与这一需求存在明显矛盾,Spring Boot 正是为了解决这一问题而生。 ...

Created 11116-05-11 · Updated 30306-06-30 · 9 min · 1853 words · wiloon

Spring Boot Executable JAR: Fat JAR 与 JarLauncher

背景 Spring Boot 把应用打成单个可执行 JAR,java -jar app.jar 即可启动内嵌 Tomcat(或 Jetty/Undertow)与全部依赖。这与传统「WAR 部署到外部 Tomcat、classpath 由容器管理」不同,也不同于 Maven jar-with-dependencies 那种把依赖 class 解压合并进一个 jar 的做法。 本文说明 Spring Boot 可执行 JAR 的内部布局、JarLauncher 如何启动应用,以及 repackage / bootJar 如何生成该产物。容器镜像、分层 JAR、Buildpack 等部署话题见 Spring Boot Container Packaging;框架层面的「内嵌服务器 + 可执行 JAR」见 Spring Boot。 Thin jar 与 fat jar Fat jar、uber jar、executable jar 在 Spring Boot 语境下指同一件事:一个「全包」可执行 jar。Fat jar 与 uber jar 只是不同叫法(uber 来自德语 über,意为「之上 / 全部」);Spring 官方文档更常写 executable jar。 与 Maven/Gradle 默认打出的普通 jar(常称 thin jar / plain jar)对比如下: ...

Created 24246-06-24 · Updated 27276-06-27 · 5 min · 973 words · -

Gradle, 目录

Gradle, 目录 Gradle 是以 Groovy / Kotlin DSL 为基础的 JVM 自动化构建工具,面向 Java 等语言项目。常见构建脚本为 build.gradle(Groovy)或 build.gradle.kts(Kotlin DSL)。 Gradle 与 Gradle Wrapper(gradlew) 很多人第一次 clone 项目时会疑惑:明明没装 Gradle,为什么 ./gradlew test 也能跑? 答案就在 Wrapper。 是什么关系 概念 说明 Gradle 安装在系统上的构建工具,命令是 gradle(例如 brew install gradle、SDKMAN) Gradle Wrapper 项目自带的一层「启动器」,命令是 ./gradlew(Windows 用 gradlew.bat) 关系 gradlew 不负责实现编译逻辑;它只负责下载并启动项目指定版本的 Gradle,再把 test、build 等任务交给真正的 Gradle 执行 一句话:Gradle 是引擎,gradlew 是带版本号的点火钥匙。 日常开发、CI 里应优先用 ./gradlew,而不是裸 gradle。这样所有人、每台机器用的是 gradle-wrapper.properties 里锁定的同一版本,避免「我这能编、你那报错」。 Wrapper 相关文件 这些文件应提交到 Git(官方建议): 路径 作用 gradlew Unix/macOS 启动脚本 gradlew.bat Windows 启动脚本 gradle/wrapper/gradle-wrapper.jar 小 bootstrap 程序,负责下载真正的 Gradle 发行包 gradle/wrapper/gradle-wrapper.properties 锁定 Gradle 版本,核心是 distributionUrl distributionUrl 示例: ...

Created 20206-12-20 · Updated 20206-06-20 · 3 min · 549 words · -

gradle cmd utf8 error

gradle cmd utf8 error export GRADLE_OPTS="-Dfile.encoding=utf-8" add tasks.withType(JavaCompile) { options.encoding = "UTF-8" } The file.encoding system property needs to be set right when the JVM executing the Gradle build (e.g. the Gradle Daemon) starts up. One way to achieve this is with export GRADLE_OPTS="-Dfile.encoding=utf-8". Another way that might work is to add systemProp.file.encoding=utf-8to gradle.properties. Of course this assumes that the build script files are actually using utf-8 encoding. To see what your platform’s (and therefore Gradle’s) default encoding is, print out the system property’s value in a build script. ...

Created 3036-12-03 · Updated 3036-12-03 · 1 min · 91 words · -

gradle ojdbc6

gradle ojdbc6 install ojdbc into loacal repo http://www.wiloon.com/?p=4863 modify build.gradle, then gradle can search local maven repo apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'war' apply plugin: "maven" repositories { mavenCentral() maven { name 'local-repo' url 'file:///D:/dev/mavenRepo/' } } http://forums.gradle.org/gradle/topics/access_a_oracle_db_runs_no_more_with_gradle_1_0_rc_3 http://blog.csdn.net/howdy_world/article/details/25650281

Created 4046-03-04 · Updated 4046-03-04 · 1 min · 42 words · -

buddyinfo, slabinfo, zoneinfo

buddyinfo, slabinfo, zoneinfo /proc/buddyinfo是linuxbuddy系统管理物理内存的debug信息。 在linux中使用buddy算法解决物理内存的外碎片问题,其把所有空闲的内存,以2的幂次方的形式,分成11个块链表,分别对应为1、2、4、8、16、32、64、128、256、512、1024个页块。 而Linux支持NUMA技术,对于NUMA设备,NUMA系统的结点通常是由一组CPU和本地内存组成,每一个节点都有相应的本地内存,因此buddyinfo 中的Node0表示节点ID;而每一个节点下的内存设备,又可以划分为多个内存区域(zone),因此下面的显示中,对于Node0的内存,又划分类DMA、Normal、HighMem区域。而后面则是表示空闲的区域。 此处以Normal区域进行分析,第二列值为100,表示当前系统中normal区域,可用的连续两页的内存大小为1002PAGE_SIZE;第三列值为52,表示当前系统中normal区域,可用的连续四页的内存大小为522^2PAGE_SIZE cat /proc/buddyinfo Node 0, zone DMA 23 15 4 5 2 3 3 2 3 1 0 Node 0, zone Normal 149 100 52 33 23 5 32 8 12 2 59 Node 0, zone HighMem 11 21 23 49 29 15 8 16 12 2 142 文件/proc/slabinfo统计slab分配器相关信息 % cat /proc/slabinfo https://zhuanlan.zhihu.com/p/358891862 slab 分配器 在Linux中,伙伴分配器(buddy allocator)是以页为单位管理和分配内存。 但在内核中的需求却以字节为单位(在内核中面临频繁的结构体内存分配问题)。 假如我们需要动态申请一个内核结构体(占 20 字节), 若仍然分配一页内存,这将严重浪费内存。那么该如何分配呢? slab 分配器专为小内存分配而生, 由 Sun 公司的一个雇员 Jeff Bonwick 在 Solaris 2.4中 设计并实现。slab 分配器分配内存以字节为单位, 基于伙伴分配器的大内存进一步细分成小内存分配。换句话说,slab 分配器仍然从 Buddy 分配器中申请内存,之后自己对申请来的内存细分管理。 ...

Created 28286-08-28 · Updated 28286-08-28 · 1 min · 113 words · -