从此
📄文章 #️⃣专题 🌐酷站 👨‍💻技术 📺 📱

Gradle(Kotlin)、Maven - 构建工具

Gradle、Maven - 构建工具

综述

Gradle、Maven - Java构建工具

Gradle

    Gradle兼容Java版本列表 - https://docs.gradle.org/current/userguide/compatibility.html
    说明 - 兼容表的“Support for running Gradle”列是指Gradle自身JDK支持最高版本。
    Gradle顶级对象可用成员 - https://docs.gradle.org/current/dsl/org.gradle.api.Project.html
    NetBeans支持设置Gradle执行环境与IDE不同的Java Runtime了,安装JDK21,添加zip版JDK20。
    目录 gradle/wrapper/ 为可选文件夹,对Gradle不敏感者无需配置。

NetBeans的Gradle库通常不支持最新JDK,故应指定兼容的Gradle版本:
  Options->Java->Gradle->Gradle Distribution:Custom...
  不兼容则报 - The Java version: 22, that is selected for the project is not supported by Gradle 8.7.

Gradle首选kotlin,但有些特例:
  列表初始化要用: options.compilerArgs = listOf("-Xdoclint:none", "-Xlint:none", "-nowarn")
  Kotlin不支持三元表达式,可换用 if(org.gradle.internal.os.OperatingSystem.current().isLinux()) "linux" else "windows";

Gradle Kotlin语法:
  val x = "string"
  var xx= "${x}"
  tasks.register("x") {
    from("other-dir", "build/outputs/aar/${x}-release.aar")
    into("build/${x}/")
  }

Gradle语法:
  获取-P传参值 providers.gradleProperty("mySecureRepositoryUsername").getOrNull()
  -D传参值用 providers.systemProperty(... 取环境变量用 providers.environmentVariable​(...

解决withJavadocJar()上传至远程仓库超时:systemProp.org.gradle.internal.http.socketTimeout=300000

指定JAVA_HOME:
  org.gradle.java.home=E:\\java\\jdk-19.0.2_windows-x64_bin\\jdk-19.0.2

管理插件:
  buildscript { // build.gradle
    configurations.all {
        resolutionStrategy {
            //  Jib插件ASM未支持JDK22报Unsupported class file major version 61 - https://github.com/GoogleContainerTools/jib/pull/4252
            force 'org.ow2.asm:asm:9.7.1'
        }
    }
  }

  pluginManagement { // settings.gradle
    resolutionStrategy {
        eachPlugin {
            println(requested.id.id)
            if (requested.id.id == 'com.google.cloud.tools.jib') {
                useVersion("3.4.4") // 指定插件版本或插件全名:
                useModule("com.google.cloud.tools:jib-gradle-plugin:3.4.4")
            }
        }
    }
    repositories {
        mavenLocal()
        gradlePluginPortal()
    }
  }

Maven

命名规范:
  groupId使用Java Package命名格式,每个点号均对应一个文件夹目录;
  artifactId首选横杠分割,不使用点号和其他特殊符号,故整个算一个文件夹目录;
  version如果是快照版本则写死SNAPSHOT,否则用点号分隔的实际版本号。

Maven/mvn之POM用法