簡體   English   中英

每個 Gradle 子模塊創建/發布一個 jar

[英]Creating/publishing a jar per Gradle submodule

我正在嘗試使用 Gradle 創建一個 Spring Boot Starter 項目,目的是讓每個子模塊成為一個不同的庫(比如你如何擁有spring-boot-starter-web、spring-boot-starter-security等)。

但是,我很難讓 Gradle 正確生成 jar,並將它們發布到 maven 存儲庫。 理想情況下,我想在 Gradle 中使用 DRY 方法,因為我希望項目隨着啟動項目的增長(盡可能少的代碼更改)自動生成一個 jar 並為每個子模塊發布。

我的項目結構是:

base-repository:
- my-spring-boot-starter-base
- my-spring-boot-starter-module1

我想發布這些罐子: my-spring-boot-starter-base.jarmy-spring-boot-starter-module1.jar

基礎build.gradle

import org.springframework.boot.gradle.plugin.SpringBootPlugin

plugins {
    id 'org.springframework.boot' version '2.6.7'
    id 'java'
    id 'java-library'
    id 'maven-publish'
}

allprojects {
    apply plugin: 'java'

    repositories {
        mavenCentral()
    }

    bootJar {
        enabled = false
    }
}

subprojects {
    apply plugin: 'java-library'

    dependencies {
        implementation platform(SpringBootPlugin.BOM_COORDINATES)
    }

    jar {
        enabled = true
    }

    publishing {
        publications {
            withSources(MavenPublication) {
                from components.java
            }
        }
        repositories {
            maven {
                url = 'https://my-repo'
            }
        }
    }
}

wrapper {
    gradleVersion = '7.4.2'
}

基本settings.gradle

rootProject.name = 'my-spring-boot-starter'

include 'my-spring-boot-starter-base'
include 'my-spring-boot-starter-module1'

兩個子模塊都有build.gradle文件,看起來類似於:

dependencies {
   ...
}

當您有一個子模塊而不是多個子模塊時,我擁有的 gradle 配置有效。 使用多個,構建失敗並出現以下錯誤:

A problem occurred evaluating root project 'my-spring-boot-starter'.
> Maven publication 'withSources' cannot include multiple components

將不勝感激一些幫助!

所以我找到了解決我自己問題的方法。 在根build.gradle中,更改為使用:

subprojects {
    ...

    publishing {
        publications {
            "$project.name"(MavenPublication) {
                artifactId project.name
                from components.java
            }
        }
        repositories {
            maven {
                url = 'https://my-repo'
            }
        }
    }
}

project.name獲取子模塊的名稱,我們告訴 maven-publish 插件使用該字段為每個子模塊創建一個工件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM