ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

gradle多模块项目打包依赖拆分

2022-08-30 22:34:23  阅读:303  来源: 互联网

标签:src 拆分 jar kts boogle build 模块 gradle


一、目录结构

.
├── boogle-common
│   ├── build.gradle.kts
│   └── src
├── boogle-core
│   ├── build.gradle.kts
│   └── src
├── boogle-generator
│   ├── build.gradle.kts
│   └── src
├── boogle-logging
│   ├── build.gradle.kts
│   └── src
├── boogle-quartz
│   ├── build.gradle.kts
│   └── src
├── boogle-system
│   ├── build.gradle.kts
│   └── src
├── boogle-web-starter
│   ├── build.gradle.kts
│   └── src
├── buildSrc
│   ├── build
│   ├── build.gradle.kts
│   └── src
│       └── main
│           └── kotlin
│               └── org.wm.java-conventions.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts

二、buildSrc/src/main/kotlin/org.wm.java-conventions.gradle.kts配置

/*
 * This file was generated by the Gradle 'init' task.
 */

plugins {
    `java-library`
    `maven-publish`
    id("org.springframework.boot")
}

apply(plugin = "io.spring.dependency-management")

tasks.named<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") {
    mainClass.set("com.xqx.ApplicationRun")
}

repositories {
    mavenLocal()
    flatDir {
        dirs("lib")
    }
    maven {
        url = uri("https://maven.aliyun.com/repository/public/")
    }
    maven {
        url = uri("https://oss.sonatype.org/content/repositories/snapshots/")
    }

    maven {
        url = uri("https://repo.jenkins-ci.org/releases")
    }

    maven {
        url = uri("https://repo.maven.apache.org/maven2/")
    }
}

dependencies {
    ...
}

group = "com.xqx"
version = "2022.05.09"
java.sourceCompatibility = JavaVersion.VERSION_17

publishing {
    publications.create<MavenPublication>("maven") {
        from(components["java"])
    }
}

tasks.withType<JavaCompile>() {
    options.encoding = "UTF-8"
}

三、boogle-web-starter/build.gradle.kts配置(入口模块)

plugins {
    id("com.xqx.java-conventions")
}

tasks.register<Copy>("copyJar")

// 复制jar依赖包
tasks.named<Copy>("copyJar") {
    delete("$buildDir/libs/lib")
    from(configurations.runtimeClasspath).into("$buildDir/libs/lib")
}

// 打包时排除其他依赖jar
tasks.named<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") {
    setExcludes(listOf("*.jar"))
    dependsOn("copyJar")
    manifest {
    // 指定Class-Path,运行时不用在命令行指定loader.path
        attributes(
            "Class-Path" to configurations.runtimeClasspath.get().files.map { "lib/${it.name}" }.joinToString(" ")
        )
    }
}

dependencies {
    implementation(project(":quartz"))
    implementation(project(":generator"))
    implementation(project(":workflow"))
    implementation(project(":system"))
    implementation(project(":archives"))
    implementation(project(":tools"))
}
description = "entrance-web"

四、build

使用bootJar打包,将会在build/lib下存放外部依赖包,

五、存在问题

使用这种方式打包后启动Jar包里依赖的其他模块的依赖jar包是*-plain.jar,并不包含该模块自己的依赖类,部署的时候如果只是更改了模块代码,直接替换module-plain.jar即可,如果添加或删除了外部依赖,则需要将外部依赖的jar手动复制。

标签:src,拆分,jar,kts,boogle,build,模块,gradle
来源: https://www.cnblogs.com/yourblog/p/16641093.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有