Bir gradle projesinin maven yapı kimliğini nasıl ayarlarsınız?


88

Gradle maven-publish eklentisinin belgelerinden , projenin groupIdve versiondeğerini doğrudan şurada ayarladığınız açıktır build.gradle:

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

Ancak, artifactIdiçinde çalıştığınız klasörün adından alınmış gibi görünüyor. artifactIdAçıkça ayarlamanın bir yolu var mı ?

Yanıtlar:


86

Gönderen 36.2.3. Oluşturulan POM'daki kimlik değerleri

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

            from components.java
        }
    }
}

Yapı kimliği varsayılan olarak içinde yapılandırılan proje adıdır settings.gradleve bu da varsayılan olarak proje dizisinin adını alır.

Uygun eklentiye ihtiyacınız olacak.

plugins {
    id 'maven-publish'
}

Merhaba Peter, cevabın için teşekkürler. Bağlantı verdiğim belgelere baktığımda, ki bu da 65.4, açıkça belgenin farklı sürümlerine sahibiz.
— Armand

Ah, 2.0 belgesinin 65.2.3'ünde. Anlama becerilerim açıkça zayıf; Sayfada 'eser' ararken bunu nasıl kaçırdım bilmiyorum - özür dilerim.
— Armand

Bu var örnek size bağlı bölümde 65.4.
— Peter Niederwieser

13
Proje adını değiştirmek istiyorsanız (ki bu ayrı bir sorudur), bunu settings.gradle(örn. rootProject.name = "something") İçinde yapabilirsiniz .
— Peter Niederwieser

2
Önemli: settings.gradle'da proje adını ayarlamak (örn. RootProject.name = "org.myorg.myproject"), Jenkins derlemesinin Jenkins çalışma alanı klasörü adına bir groupId tabanlı varsayılan yüklemeye yüklediği sorunların düzeltilmesi için kritikti.
— Farrukh Najmi

16

Kök settings.gradledosyayla ilgili olarak, kök projenin adını şu şekilde değiştirebilirsiniz:

rootProject.name = 'myproject'

Ancak, bir alt projenin adını değiştirmek isterseniz (örneğin, bir AndroidStudio projesinin varsayılan "uygulama" alt projesi), yine de kök settings.gradledosyada buna benzer bir şey yapabilirsiniz :

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

@FarrukhNajmi tarafından bir yorumda belirtildiği gibi, settings.gradle dosyasına rootProject.name eklenmesi, Jenkins ile derleme yapılırken artifactID'nin Jenkins iş adı haline gelmesini durdurur.
— Fodder

8

Bu, maven-publish eklentisi için doğru cevaptır . Bu, eski maven eklentisinin halefi olarak tasarlanmıştır .

Eğer benim gibi, eski eklentiye takıldıysanız, "Bir gradle projesi için maven yapı kimliğini nasıl ayarlarım" sorusunun doğru cevabı şudur:

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

3
Bu kötü bir fikir. Bunu burada yapmak, projeye karşı başka bir yerden görece bildirdiğiniz herhangi bir bağımlılığın onlar için bir pom üretildiğinde doğru artifactId'yi almayacağı anlamına gelir.
— kebernet

Bunun doğru olduğunu hatırlamıyorum (bununla uğraştığımdan bu yana 18 ay geçti), ancak öyleyse doğru cevap, maven eklentinizi daha iyi bir modele sahip yenisine yükseltmektir. Teşekkür ederim!
— Matthew Mark Miller

6

Çok modüllü bir projeniz varsa ve yapıların adlarının Dizin'den farklı olmasını istiyorsanız (ayarlar.gradle'da ayarlanır), o zaman daha iyi bir yaklaşımın her bir alt proje için bir jar bloğuna sahip olmak olduğunu düşünüyorum. ve orada artifact-id olacak olan baseName'i yazabilirsiniz. Ardından, her alt proje için yayınlama / yayın bloğunu yeniden yazmak yerine, ana build.gradle'da şu şekilde yalnızca bir kez yazarsınız:

her alt proje için build.gradle:

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

ana build.gradle'da:

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

Bağımsız değişkenler için yöntem jar () bulunamadı
— Kış

2

Android'i oluşturmak ve jenkins kullanarak yapay olarak yayınlamak için, grup kimliği, yapı kimliği ve sürümü yapılandırmak için uygulama modüllerinin build.gradle bölümünde aşağıdaki ayarları yapılandırdım.

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'in daha yeni sürümlerinde, doğrudan atama yerine kullanılabilen BasePluginConvention tarafından sağlanan bir setArchivesBaseName () yöntemi olduğunu ve benim için Android Gradle eklentisi 3.1.4 ve Gradle 4.10.2'de işe yaradığını görüyorum. . docs.gradle.org/current/javadoc/org/gradle/api/plugins/…
— John Michelau

2

Ancak, artifactId, üzerinde çalıştığınız klasörün adından alınmış gibi görünüyor. ArtifactId'i açıkça ayarlamanın bir yolu var mı?

Bunun basit bir cevabı, jar.baseNamedaha sonra dizin adını geçersiz kılacak olanı ayarlamaktır .

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

Bu benim için çalışıyor gibi görünüyor.


1

In Gradle , Belirleyebileceğiniz jar.archiveNameçalışma klasörün adının kullanımını geçersiz kılmak için ...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.