Closed
Description
When including other BOMs in a build file, generating POMs for publishing artifacts include two dependency management nodes resulting in an invalid POM.
build.gradle.kts
plugins {
java
application
maven
`maven-publish`
id("org.springframework.boot") version "2.1.5.RELEASE"
id("com.gorylenko.gradle-git-properties") version "2.0.0"
}
apply(plugin = "io.spring.dependency-management")
group = "com.isonas"
repositories {
mavenCentral()
}
// Configure Java
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
// Enable creating jar as part of build artifacts
tasks.getByName<Jar>("jar") {
enabled = true
}
// Define main class name for distributions
springBoot {
mainClassName = "com.isonas.microservice.App"
buildInfo()
}
application {
mainClassName = "com.isonas.microservice.App"
}
// Make sure distributions have launch scripts
tasks.bootJar {
launchScript()
}
publishing {
publications {
create<MavenPublication>("jar") {
from(components["java"])
artifact(tasks.getByName("jar"))
}
create<MavenPublication>("bootJar") {
artifact(tasks.getByName("bootJar"))
}
}
}
// Explicitly enable the JUnit 5 Jupiter engine
tasks.test {
useJUnitPlatform()
}
// Project Dependencies
dependencies {
// Bill of Materials
implementation(platform("software.amazon.awssdk:bom:2.5.29"))
// Annotation Processors
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
// Spring Boot Framework
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-actuator")
// AWS
implementation("software.amazon.awssdk:ssm")
// Test Dependencies
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
Running a publish task results in an error
$gradle clean build publishToMavenLocal --stacktrace
> Task :publishJarPublicationToMavenLocal FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':publishJarPublicationToMavenLocal'.
> Failed to publish publication 'jar' to repository 'mavenLocal'
> Invalid publication 'jar': POM file is invalid. Check any modifications you have made to the POM file.
...
Caused by: org.codehaus.plexus.util.xml.pull.XmlPullParserException: Duplicated tag: 'dependencyManagement' (position: START_TAG seen ...</dependencies>\n <dependencyManagement>... @36:25)
build/publications/jar/pom-default.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.isonas</groupId>
<artifactId>micro-service-template</artifactId>
<version>unspecified</version>
<packaging>pom</packaging>
<!-- AWS SDK BOM -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.5.29</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>ssm</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<!-- Spring Boot BOM -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.5.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
</project>