Gradle(Groovy) 버전에서 build.gradle을 다음과 같이 변경한다.
import java.util.regex.Matcher
plugins {
id 'maven-publish' // maven 사용
}
bootJar { enabled = false }
jar { enabled = true }
java {
withSourcesJar()
}
version = '1.0.0-SNAPSHOT'
dependencies {
}
publishing {
repositories {
maven {
url ""
allowInsecureProtocol true
credentials {
username project.repoUser
password project.repoPassword
}
}
}
publications {
maven(MavenPublication) {
groupId = ''
artifactId = ''
from components.java
}
}
}
// Duplicated tag 에러를 막기 위해 아래 스크립트 추가
task fixPom {
doLast {
File file = new File("$buildDir/publications/maven/pom-default.xml")
def text = file.text
def pattern = "(?s)(<dependencyManagement>.+?<dependencies>)(.+?)(</dependencies>.+?</dependencyManagement>)"
Matcher matcher = text =~ pattern
if (matcher.find()) {
text = text.replaceFirst(pattern, "")
def firstDeps = matcher.group(2)
text = text.replaceFirst(pattern, '$1$2' + firstDeps + '$3')
}
file.write(text)
}
}
generatePomFileForMavenPublication.finalizedBy fixPom
주의해야할 점은 from components.java 이다.
필자는 Nexus3를 별도로 내부에 구축해서 사용중인데 from components.java 없이 publish 했더니 Nexus3에 pom 파일이 생성되지 않았으며 jar 파일도 정상적으로 업로드되지 않았다.
따라서 아무리 build.gradle에서 implementation을 추가해도 프로젝트에서 jar로 인식하지 않았다.
또한 C:\Users\사용자.gradle\caches\modules-2\files-2.1 디렉토리에 다운로드된 jar 디렉토리가 생성되지 않았다.
from components.java 란?
구성 요소는 플러그인에 의해 정의되며 게시를 위해 게시를 정의하는 간단한 방법을 제공합니다. 하나 이상의 아티팩트와 적절한 메타데이터로 구성됩니다. 예를 들어 Java 구성 요소는 jar 작업에 의해 생성된 프로덕션 JAR과 해당 종속성 정보로 구성됩니다.
아무래도 components.java의 역할을 보니 메타데이터가 누락됨으로써 프로젝트에서 dependency를 내려받아도 jar 파일로 인식할 수 없는 것이 문제인 것 같다.
plugins에 io.spring.dependency-management 와 org.springframework.boot를 등록해서 사용 중인데 이럴 경우 publish 시 gradle에서 script 오류가 발생한다.
Gradle plugin: Duplicated tag: 'dependencyManagement'
pom.xml 생성 중 태그가 중복되서 생성되는 문제인데 publish 실행 시 task fixPom 를 실행하도록 수정했다.


publish는 gradle에서 publising-publish task를 수행해주면 된다.
