คุณตั้งค่ารหัสสิ่งประดิษฐ์ maven ของโครงการ gradle ได้อย่างไร


89

จากเอกสารของปลั๊กอิน gradle maven- published เป็นที่ชัดเจนว่าคุณตั้งค่าgroupIdและversionของโปรเจ็กต์โดยตรงในbuild.gradle:

group = 'org.gradle.sample'
version = '1.0'

อย่างไรก็ตามartifactIdดูเหมือนว่าจะนำมาจากชื่อของโฟลเดอร์ที่คุณกำลังทำงานอยู่ มีวิธีตั้งค่าartifactIdอย่างชัดเจนหรือไม่?

คำตอบ:


87

จาก36.2.3. ค่าเอกลักษณ์ใน POM ที่สร้างขึ้น

publishing {
    publications {
        maven(MavenPublication) {
            groupId 'org.gradle.sample'
            artifactId 'project1-sample'
            version '1.1'

            from components.java
        }
    }
}

รหัสอาร์ติแฟกต์ดีฟอลต์เป็นชื่อโปรเจ็กต์ที่กำหนดคอนฟิกไว้settings.gradleซึ่งค่าดีฟอลต์จะเป็นชื่อไดเร็กทอรีโปรเจ็กต์

คุณจะต้องมีปลั๊กอินที่เหมาะสม

plugins {
    id 'maven-publish'
}

สวัสดีปีเตอร์ขอบคุณสำหรับการตอบกลับ เมื่อดูเอกสารที่ฉันเชื่อมโยงซึ่งเป็น 65.4 เราเห็นได้ชัดว่ามีเอกสารเวอร์ชันต่างๆ
Armand

อ่ามันอยู่ใน 65.2.3 ของ 2.0 doc ทักษะการเข้าใจของฉันค่อนข้างแย่ ฉันไม่รู้ว่าฉันพลาดสิ่งนี้ไปได้อย่างไรเมื่อค้นหาหน้า "สิ่งประดิษฐ์" - ขอโทษ
Armand

เป็นตัวอย่าง 65.4 ในบทที่คุณเชื่อมโยง
Peter Niederwieser

13
หากคุณต้องการเปลี่ยนชื่อโปรเจ็กต์ (ซึ่งเป็นคำถามแยกต่างหาก) คุณสามารถทำได้ในsettings.gradle(เช่นrootProject.name = "something")
Peter Niederwieser

2
สำคัญ: การตั้งชื่อโปรเจ็กต์ใน settings.gradle (เช่น rootProject.name = "org.myorg.myproject") มีความสำคัญอย่างยิ่งในการแก้ไขปัญหาที่ Jenkins build กำลังอัปโหลดไปยัง groupId ที่เป็นค่าเริ่มต้นไปยังชื่อโฟลเดอร์เวิร์กสเปซของ Jenkins
Farrukh Najmi

16

ที่เกี่ยวข้องกับsettings.gradleไฟล์รูทคุณสามารถเปลี่ยนชื่อของโปรเจ็กต์รูทด้วย:

rootProject.name = 'myproject'

แต่ถ้าคุณต้องการเปลี่ยนชื่อของโปรเจ็กต์ย่อย (เช่นโปรเจ็กต์ย่อย "แอพ" เริ่มต้นของโปรเจ็กต์ AndroidStudio) คุณสามารถทำสิ่งนี้ได้โดยยังคงอยู่ในsettings.gradleไฟล์รูท:

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}

ตามที่ @FarrukhNajmi กล่าวไว้ในความคิดเห็นการเพิ่ม rootProject.name ในไฟล์ settings.gradle จะหยุด artifactID ให้กลายเป็นชื่องานของ Jenkins เมื่อสร้างด้วย Jenkins
Fodder

8

นี่คือคำตอบที่ถูกต้องสำหรับปลั๊กอินmaven-published สิ่งนี้มีไว้เพื่อเป็นตัวตายตัวแทนสำหรับปลั๊กอินmavenรุ่นเก่า

หากในขณะที่ฉันเป็นคุณติดอยู่กับปลั๊กอินรุ่นเก่าคำตอบที่ถูกต้องสำหรับ "ฉันจะตั้งค่ารหัสสิ่งประดิษฐ์ maven สำหรับโครงการ gradle ได้อย่างไร" คือ:

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'project-sample'
        }
    }
}

3
นี่เป็นความคิดที่ไม่ดี การทำที่นี่หมายความว่าการอ้างอิงใด ๆ ที่คุณประกาศต่อต้านโปรเจ็กต์ที่ค่อนข้างมาจากที่อื่นจะไม่ได้รับ ArtifactId ที่ถูกต้องเมื่อสร้าง pom สำหรับพวกเขา
kebernet

ฉันจำไม่ได้ว่าสิ่งนี้เป็นความจริง (เป็นเวลา 18 เดือนแล้วที่ฉันจัดการกับสิ่งนี้) แต่ถ้าเป็นเช่นนั้นคำตอบที่ถูกต้องคือการอัปเกรดปลั๊กอิน maven ของคุณเป็นปลั๊กอินใหม่ด้วยโมเดลที่ดีกว่า ขอขอบคุณ!
Matthew Mark Miller

6

หากคุณมีโปรเจ็กต์หลายโมดูลและคุณต้องการให้ชื่อของอาร์ติแฟกต์แตกต่างจากไดเร็กทอรี (ซึ่งตั้งค่าใน settings.gradle) ฉันคิดว่าแนวทางที่ดีกว่าคือการมี jar block สำหรับแต่ละโปรเจ็กต์ย่อย และคุณสามารถเขียน baseName ซึ่งจะเป็น artifact-id จากนั้นแทนที่จะเขียนบล็อกการเผยแพร่ / สิ่งพิมพ์ซ้ำสำหรับแต่ละโปรเจ็กต์ย่อยคุณต้องเขียนเพียงครั้งเดียวในบิลด์หลักอัพเกรดด้วยวิธีนี้:

สำหรับแต่ละโครงการย่อย build.gradle:

jar {
    baseName = 'new-artifact-name-A'  //A beacause you also have B, C modules... 
}

ใน build.gradle หลัก:

publishing {
    publications {
        mavenJava(MavenPublication) {
           artifactId jar.baseName
           from components.java
        }
    }
}

ไม่พบ method jar () สำหรับอาร์กิวเมนต์
Winter

2

สำหรับการสร้าง android และเผยแพร่ไปยัง artifactory โดยใช้ jenkins ฉันกำหนดค่าการตั้งค่าด้านล่างในbuild.gradleของโมดูลแอปสำหรับกำหนดค่า ID กลุ่มรหัสสิ่งประดิษฐ์และเวอร์ชัน

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    group "com.company.division.productgroup" //add group id
    version "8.8.8" //add version

    defaultConfig {

        minSdkVersion 9
        targetSdkVersion 21
        versionCode 32
        versionName "$version"
        archivesBaseName = "android-appname" //add artifact id

    }


ใน Gradle / Android เวอร์ชันล่าสุดฉันพบว่ามีเมธอด setArchivesBaseName () ที่จัดทำโดย BasePluginConvention ซึ่งมีให้แทนการมอบหมายโดยตรงและใช้ได้กับฉันในปลั๊กอิน Android Gradle 3.1.4 และ Gradle 4.10.2 . docs.gradle.org/current/javadoc/org/gradle/api/plugins/…
John Michelau

2

อย่างไรก็ตาม artifactId ดูเหมือนจะนำมาจากชื่อของโฟลเดอร์ที่คุณกำลังทำงานอยู่ มีวิธีตั้งค่า artifactId อย่างชัดเจนหรือไม่?

คำตอบง่ายๆสำหรับเรื่องนี้คือการตั้งค่าjar.baseNameซึ่งจะแทนที่ชื่อไดเร็กทอรี

// changes the name of the jar from the directory name
jar.baseName = 'some_arifact_name';

ดูเหมือนว่าจะได้ผลสำหรับฉัน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.