본문 바로가기

카테고리 없음

publishAllPublications~ 와 publishMavenJava의 차이

  1. publishMavenJavaPublication:
  • MavenPublication 블록에서 정의한 대로만 배포됨
  • 주로 Java 라이브러리를 위한 표준 Maven 아티팩트 배포
  • 기본적으로 jar 파일과 pom 파일만 포함
publications {
    mavenJava(MavenPublication) {
        from components.java
        // 여기서 정의한 내용만 배포
    }
}
  1. publishAllPublications:
  • 모든 type의 publication을 배포
  • 여러 개의 publication을 정의했다면 모두 배포됨
  • 예를 들어 Java 라이브러리와 함께 문서나 소스도 배포하는 경우
publications {
    mavenJava(MavenPublication) { ... }
    docs(MavenPublication) { ... }
    sources(MavenPublication) { ... }
}

danal-core의 build.gradle을 보면:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            groupId = project.group
            artifactId = project.name
            version = project.version
        }
    }
}

단일 MavenPublication만 정의되어 있으므로, publishMavenJavaPublication을 사용하는 것이 더 명시적이고 적절합니다. 실제로 업로드되는 파일도 동일할 것입니다.

하지~만!

멀티 프로젝트 구조에서는 상황이 다릅니다.

멀티 프로젝트의 build.gradle을 보면:

allprojects {
    group = 'kr.co.xxx'
    //version = '1.0.0'
    ...
}

subprojects {
    apply plugin: 'maven-publish'
    
    afterEvaluate{
        publishing {
            publications {
                mavenJava(MavenPublication) {
                    from components.java
                    groupId = project.group
                    artifactId = project.name
                    version = project.version
                }
            }
        }
    }
}

이 경우:

  1. publishAllPublications 사용 시:
    • 모든 서브프로젝트의 모든 publications이 배포됨
    • 각 서브프로젝트가 동일한 mavenJava publication을 가지고 있음
  2. publishMavenJavaPublication 사용 시:
    • 특정 publication 타입(mavenJava)만 배포
    • 모든 서브프로젝트에서 해당 publication을 찾아 배포

멀티 프로젝트에서는 publishAllPublicationsTo${REPOSITORY}Repository를 사용하는 것이 더 안전할 수 있습니다:

  1. 모든 서브프로젝트의 publications을 포함
  2. 서브프로젝트마다 publication이 다르게 설정되어 있어도 모두 처리
  3. 실수로 누락되는 publication 방지

따라서 멀티 프로젝트 구조에서는 publishAllPublications를 유지하는 것이 더 적절합니다.

반응형