Gradle 프로젝트의 Maven 아티팩트 ID를 어떻게 설정합니까?


85

gradle maven-publish 플러그인의 문서 에서 프로젝트 groupIdversion의를 직접 설정하는 것이 분명합니다 build.gradle.

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

그러나은 artifactId작업중인 폴더의 이름에서 가져온 것으로 보입니다. artifactId명시 적으로 설정하는 방법이 있습니까?

답변:


85

에서 36.2.3. 생성 된 POM의 ID 값

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

            from components.java
        }
    }
}

아티팩트 ID의 기본값은에서 구성된 프로젝트 이름이며 settings.gradle, 기본값은 프로젝트 디렉토리 이름입니다.

적절한 플러그인이 필요합니다.

plugins {
    id 'maven-publish'
}

안녕 피터, 응답 감사합니다. 내가 링크 한 문서 (65.4)를 보면 분명히 다른 버전의 문서가 있습니다.
Armand

아, 2.0 문서의 65.2.3에 있습니다. 나의 이해력은 분명히 나쁩니다. '아티팩트'페이지를 검색 할 때 어떻게 놓쳤는 지 모르겠습니다. 사과드립니다.
Armand

링크 한 챕터 의 예제 65.4입니다.
Peter Niederwieser

13
프로젝트 이름 (별도의 질문)을 변경하려면 settings.gradle(예 :) 에서 변경할 수 있습니다 rootProject.name = "something".
Peter Niederwieser

2
중요 : settings.gradle (예 : rootProject.name = "org.myorg.myproject")에서 프로젝트 이름을 설정하는 것은 Jenkins 빌드가 Jenkins 작업 영역 폴더 이름을 기본으로하는 groupId에 업로드하는 문제를 해결하는 데 중요했습니다.
Farrukh Najmi

16

루트 settings.gradle파일과 관련하여 다음 을 사용하여 루트 프로젝트의 이름을 변경할 수 있습니다.

rootProject.name = 'myproject'

그러나 하위 프로젝트 (예 : AndroidStudio 프로젝트의 기본 "app"하위 프로젝트)의 이름을 변경하려면 루트 settings.gradle파일 에서 다음과 같이 수행 할 수 있습니다 .

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

@FarrukhNajmi가 주석에서 언급했듯이 settings.gradle 파일에 rootProject.name을 추가하면 Jenkins로 빌드 할 때 artifactID가 Jenkins 작업 이름이되는 것을 중지합니다.
Fodder

8

이것은 maven-publish 플러그인에 대한 정답입니다 . 이것은 이전 maven 플러그인 의 후속 버전입니다 .

내가 그렇듯이 이전 플러그인을 사용하는 경우 "Gradle 프로젝트에 대한 Maven 아티팩트 ID를 설정하는 방법"에 대한 정답은 다음과 같습니다.

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

3
이것은 나쁜 생각입니다. 여기서 수행한다는 것은 상대적으로 다른 곳에서 프로젝트에 대해 선언 한 종속성이 pom이 생성 될 때 올바른 artifactId를 얻지 못함을 의미합니다.
kebernet

나는 이것이 사실이라는 것을 기억하지 못하지만 (내가 이것을 처리 한 지 18 개월이 지났다) 그렇다면 정답은 maven 플러그인을 더 나은 모델로 새로운 플러그인으로 업그레이드하는 것입니다. 감사합니다!
Matthew Mark Miller

6

다중 모듈 프로젝트가 있고 아티팩트의 이름이 디렉토리 (settings.gradle에 설정되어 있음)와 다르기를 원한다면 각 하위 프로젝트에 대해 jar 블록을 사용하는 것이 더 좋은 방법이라고 생각합니다. 거기에서 artifact-id가 될 baseName을 작성할 수 있습니다. 그런 다음 각 하위 프로젝트에 대한 게시 / 게시 블록을 다시 작성하는 대신 다음과 같이 기본 build.gradle에 한 번만 작성합니다.

각 하위 프로젝트 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
        }
    }
}

인수에 대한 jar () 메서드를 찾을 수 없음
Winter

2

젠킨스를 사용하여 Android를 빌드하고 아티팩트에 게시하기 위해 앱 모듈의 build.gradle 에서 그룹 ID, 아티팩트 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

    }

효과 archivesBaseName 없습니다
act262

최신 버전의 Gradle / Android에서 직접 할당 대신 사용할 수있는 BasePluginConvention에서 제공하는 setArchivesBaseName () 메서드가 있으며 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';

이것은 나를 위해 일하는 것 같습니다.


1

에서 Gradle을 , 당신은 설정할 수있는 jar.archiveName작업 폴더의 이름의 사용을 대체 할 ...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.