kotlin build.gradle.kts配置,支持占位符替换文件中变量

Posted tower888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kotlin build.gradle.kts配置,支持占位符替换文件中变量相关的知识,希望对你有一定的参考价值。

kotlin springboot工程kotlin_app

kotlin_app/build.gradle.kts:  

import org.apache.tools.ant.filters.FixCrLfFilter
import org.apache.tools.ant.filters.ReplaceTokens
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins 
    id("org.springframework.boot") version "2.4.4"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.4.31"
    kotlin("plugin.spring") version "1.4.31"



group = "com.example"
version = "0.0.1"
java.sourceCompatibility = JavaVersion.VERSION_1_8


repositories 
//	mavenCentral()
    maven  setUrl("http://maven.aliyun.com/nexus/content/groups/public") 


dependencies 
    //implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("org.springframework.boot:spring-boot-starter-web") 
        exclude(module = "spring-boot-starter-tomcat")
    
    implementation("org.springframework.boot:spring-boot-starter-jetty")

    implementation("org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4")

    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    testImplementation("org.springframework.boot:spring-boot-starter-test")

    implementation("org.jetbrains.kotlin:kotlin-maven-allopen:1.4.31")
    implementation("org.jetbrains.kotlin:kotlin-maven-noarg:1.4.31")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.12.2")
    implementation("cn.hutool:hutool-all:5.6.1")
    implementation("com.google.guava:guava:29.0-jre")


tasks.withType<KotlinCompile> 
    kotlinOptions 
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    


tasks.withType<Test> 
    useJUnitPlatform()


//val tokens = mapOf(
//    "version" to "2.3.1",
//    "copyright" to "2009",
//    "project" to project.name,
//    "beginToken" to "@",
//    "endToken" to "@",
//)

fun loadEnv(): Any 
    val configFile = file("env/config.groovy")
    val env = if (project.hasProperty("env")) project.property("env").toString() else "dev"
    logger.lifecycle("1-----------env: $env")
    val confProp = groovy.util.ConfigSlurper(env).parse(configFile.toURL())
    //config.groovy配置文件,配置占位符 (@key@)
    val tokens = confProp.toProperties()
    logger.lifecycle("2-----------tokens: $tokens")
    return tokens;


fun delFiles(dir:String)
    val configs=fileTree(dir)
    for (f in configs) 
        f.delete()
    



task("copyLibs", Copy::class) 
    logger.lifecycle("------------------copyLibs")
    from(configurations.runtimeClasspath)
    into("$buildDir/libs")
.dependsOn(tasks.jar)

//本工程的jar包,排除配置文件
tasks.jar 
    logger.lifecycle("------------------tasks.jar")
    enabled = true
    // from("build/classes/java/main")
    exclude("*.properties", "*.yml", "*.xml", "*.setting")


tasks.processResources 
    logger.lifecycle("------------------processResources")
    delFiles("$buildDir/resources")
//    filteringCharset = "UTF-8"
//    from(sourceSets.main.get().resources.srcDirs) 
//        include("**")
//        filter<ReplaceTokens>("tokens" to tokens)
//    
    filter(ReplaceTokens::class, "tokens" to loadEnv())
    filter(
        FixCrLfFilter::class,
        "eol" to FixCrLfFilter.CrLf.newInstance("lf"),
        "tab" to FixCrLfFilter.AddAsisRemove.newInstance("asis"),
        "tablength" to 4,
        "eof" to FixCrLfFilter.AddAsisRemove.newInstance("remove"),
        "fixlast" to true
    )



task<Copy>("processShell") 
    logger.lifecycle("------------------processShell")
    //必须先删除原sh目录下文件后重新生成,不然使用gradle build -Penv参数切换环境时,无法替换占位符变量
    delFiles("$buildDir/sh")
    from("src/main/sh") 
        filter(ReplaceTokens::class, "tokens" to loadEnv())
        filter(
            FixCrLfFilter::class,
            "eol" to FixCrLfFilter.CrLf.newInstance("lf"),
            "tab" to FixCrLfFilter.AddAsisRemove.newInstance("asis"),
            "tablength" to 4,
            "eof" to FixCrLfFilter.AddAsisRemove.newInstance("remove"),
            "fixlast" to true
        )
    
    into("$buildDir/sh")


//build命令依赖的其他命令
tasks.build 
    dependsOn("copyLibs","processShell",tasks.processResources)


// 安装 gradle-6.7
// 编译打包命令: gradle build -Penv=prod -Dfile.encoding=UTF-8 --daemon

kotlin_app/env/config.groovy:

prefix='/output'

environments 
    //192.168.3.165
    dev 
        sh
            WORK_HOME='/home/boy/kotlin_app';
            PNAME='kotlin_app';
            LANG='zh_CN.utf8';
            JAVA_HOME='/home/boy/jdk/jdk8';
        
    

    prod
        sh
            WORK_HOME='/root/kotlin_app';
            PNAME='kotlin_app';
            LANG='zh_CN.utf8';
            JAVA_HOME='/soft/jre1.8.0_131';
        

    

src/main/resources/logback.xml:  其中包含占位符 @sh.WORK_HOME@

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
    <property name="LOG_HOME" value="@sh.WORK_HOME@/log" />
    <property name="LOG_NAME" value="$LOG_HOME/main.log%dyyyyMMdd" />
    <property name="PATTERN" value="%date %p %logger2 %L - %m%n" />

    <appender name="C" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <charset>UTF-8</charset>
        </encoder>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>$PATTERN</pattern>
        </encoder>
    </appender>
    <appender name="F1" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>$LOG_NAME</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>$PATTERN</pattern>
        </encoder>
    </appender>
    <logger name="org.springframework" level="error" additivity="true" />
    <logger name="org.eclipse.jetty" level="error" additivity="true" />
    <!-- <logger name="oracle.jdbc.driver" level="error" additivity="true" /> -->
    <logger name="com.zaxxer.hikari" level="error" additivity="true" />
    <logger name="com.soft.mapper" level="debug" />
    <root level="info">
        <appender-ref ref="C" />
    </root>
</configuration>

settings.gradle.kts:

     rootProject.name = "a-restful"

 

使用命令编译打包:

gradle build -Penv=dev -Dfile.encoding=UTF-8 --daemon
gradle build -Penv=prod -Dfile.encoding=UTF-8 --daemon

-Penv的值为config.groovy中的配置

执行编译打包命令后,会将config.groovy中配置的变量替换文件中的占位符@xx@

kotlin_app\\build\\libs下生成jar包名: a-restful-0.0.1.jar

以上是关于kotlin build.gradle.kts配置,支持占位符替换文件中变量的主要内容,如果未能解决你的问题,请参考以下文章

Gradle:为什么这个build.gradle.kts脚本无法产生任何Java类?

未解决的参考:build.gradle.kts 中的 compileKotlin

【白水日记】使用build.gradle.kts

未解决的参考:build.gradle.kts中的KotlinCompilerVersion

将 kapt 与多平台子项目一起使用

如何从 Kotlin DSL build.gradle 中的所有依赖项中排除库?