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.