Gradle Build 构建 & Maven Repositories & Artifacts - 知名开源项目库、仓库POM文件 | Jib Plugin
综合/最新
新:
Gradle 9.x 起:
用 gradle -p subproject test 取代了 gradle -b subproject/build.gradle test;脚本文件名更改用 project(':subproject').buildFileName = 'custom.gradle'
archivesBaseName 已改名为 archivesName
必须加上 java. 前缀 java.sourceCompatibility = JavaVersion.VERSION_25
指定构建所用Java版本,不再沿用 Gradle 自身运行Java版本:
java { toolchain { languageVersion = JavaLanguageVersion.of(17) } }
settings.gradle.kts 指定JDK工具链下载配置 plugins { id("org.gradle.toolchains.foojay-resolver-convention").version("1.0.0") }
字节码版本也能在 toolchain 基础上向下指定 tasks.withType().configureEach { options.release = 11 }
Kotlin变量声明:并非var而是 val k=v
数组追加:
var cmd = arrayOf("echo", "1");
if(org.gradle.internal.os.OperatingSystem.current().isWindows()){
cmd += arrayOf("|","Get-Member");
}
println(cmd.joinToString())
Kotlin导入类:必须写在顶部 - import java.time.Instant 使用 - Instant.now().toString().replace(":", "_")
操作文件前判断是否存在:即Kotlin的三元表达式
val txtFile=file("../../../../docs/cloud/project-123456.json")
password = if (txtFile.exists()) txtFile.readText() else null
Gradle
目录:
可无脑删 - .gradle/、.idea/、build/
installDist 任务只安装(./build/install/app/bin/app)不打包,assembleDist 则只打包(build/distributions/app.zip)不安装。
凭据从两处取得:
credentials { username = "our"; password = System.getenv("ORG_GRADLE_PROJECT_OurMavenRepoPassword") }
//credentials(PasswordCredentials::class) // 若只赋值 username 则 password 会初始化为 null,也不会从前缀型环境变量取值了。
构建容器镜像
build.gradle.ktsplugins {
application
id("com.google.cloud.tools.jib") version "3.4.5"
}
jib{
from {
// 打包后210MiB;默认 eclipse-temurin:21-jre;jlink 容器大小优化 - blog.csdn.net/zypqqgc/article/details/142070527
image = "eclipse-temurin:24-jre-alpine"
}
to {
/*
tags = mutableSetOf(Instant.now().toString().replace(":", "_"))
image = "asia-east1-docker.pkg.dev/project-123456/temp-repo/new-tech"
auth {
username = "_json_key"
val txtFile=file("../../../../docs/cloud/project-123456-8ad030ce3d3e.json")
password = if (txtFile.exists()) txtFile.readText() else null
}
*/
tags = mutableSetOf("new-tech-"+Instant.now().toString().replace(":", "_"))
image = "dockerhubuser/private" // docker.io/dockerhubuser/private:new-tech-0.0.1b1
auth {
username = "dockerhubuser"
password = System.getenv("DOCKER_PASSWORD")?:"" // ALIYUN_DOCKER_PASSWORD
}
containerizingMode = "packaged" // jar包目标路径 /app/classpath/main-class.jar、/app/libs/jetty-server-12.0.16.jar
}
container {
jvmFlags = mutableListOf("-XX:MaxRAMPercentage=95","-XX:+UseZGC","-XX:+CrashOnOutOfMemoryError")
mainClass = application.mainClass.get() // 多个主类时才需指定
}
}
知名项目库
- MySQL Connector/J
- implementation("com.mysql:mysql-connector-j:9.1.0")
- Jakarta Servlet
- compileOnly("jakarta.servlet:jakarta.servlet-api:6.1.0")
- JSON Web Token (JWT)
- implementation("com.auth0:java-jwt:4.4.0")
- Spring Authorization Server
- implementation("org.springframework.boot:spring-boot-starter-oauth2-authorization-server:3.4.1")
- Google Cloud Libraries Bill of Materials (BOM)
- implementation(platform("com.google.cloud:libraries-bom:26.53.0"))
其他
hutool 读取 CSV 文件:
// reader.read(isr, Info.class); public static class Info{ @Alias("My_Name") private String myName; } // getter/setter
var data = CsvUtil.getReader().read(FileUtil.file("dir/x.csv")); // ResourceUtil.getUtf8Reader("dir/x.csv")
var rows = data.getRows();
for (var r : rows) { System.out.println(r.getRawList()); } // r.getByName("f")