- publishMavenJavaPublication:
- MavenPublication 블록에서 정의한 대로만 배포됨
- 주로 Java 라이브러리를 위한 표준 Maven 아티팩트 배포
- 기본적으로 jar 파일과 pom 파일만 포함
publications {
mavenJava(MavenPublication) {
from components.java
// 여기서 정의한 내용만 배포
}
}
- 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
}
}
}
}
}
이 경우:
- publishAllPublications 사용 시:
- 모든 서브프로젝트의 모든 publications이 배포됨
- 각 서브프로젝트가 동일한 mavenJava publication을 가지고 있음
- publishMavenJavaPublication 사용 시:
- 특정 publication 타입(mavenJava)만 배포
- 모든 서브프로젝트에서 해당 publication을 찾아 배포
멀티 프로젝트에서는 publishAllPublicationsTo${REPOSITORY}Repository를 사용하는 것이 더 안전할 수 있습니다:
- 모든 서브프로젝트의 publications을 포함
- 서브프로젝트마다 publication이 다르게 설정되어 있어도 모두 처리
- 실수로 누락되는 publication 방지
따라서 멀티 프로젝트 구조에서는 publishAllPublications를 유지하는 것이 더 적절합니다.
반응형