New to gradle, facing issues in jenkins pipeline. Entire build is successful but not able to find the bootable jar of my spring project. If you can please let me know how can I move the jar from target/lib/ to /target folder.
Below is my build.gradle
import io.swagger.codegen.DefaultGenerator import io.swagger.codegen.config.CodegenConfigurator buildscript { ext { springBootVersion = '2.0.5.RELEASE' jacocoWorkspaceDirectory = "/jacoco/" } repositories { mavenLocal() maven { url "http://repo.maven.apache.org/maven2" } } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion" classpath group: "io.spring.gradle", name: "dependency-management-plugin", version: "1.0.6.RELEASE" classpath 'com.abc.sonar:abc-sonar-gradle-plugin:2.7.1.RELEASE' classpath group: "org.unbroken-dome.gradle-plugins", name: "gradle-testsets-plugin", version: "1.4.2" classpath("io.swagger:swagger-codegen:2.3.1") classpath("io.swagger.core.v3:swagger-gradle-plugin:2.0.5") } } apply plugin: 'java' apply plugin: 'maven' apply plugin: 'maven-publish' apply plugin: "io.spring.dependency-management" apply plugin: "org.springframework.boot" apply plugin: "io.swagger.core.v3.swagger-gradle-plugin" apply plugin: 'abc-sonar' apply plugin: "jacoco" apply plugin: "findbugs" apply plugin: "checkstyle" apply plugin: "pmd" def excludeStudentManagementConstants = "src/main/java/com/abc/student/management/constants/studentManagementConstants.java" def excludeCaasConstants = "src/main/java/com/abc/student/management/pcf/constants/CaasConstants.java" sourceCompatibility = 1.8 targetCompatibility = 1.8 project.buildDir = 'target' group = 'com.abc.studentmanagement' version = '1.0.0-SNAPSHOT' tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } repositories { mavenLocal() maven { url "http://repo.maven.apache.org/maven2" } } // PLUGIN CONFIGs springBoot { mainClassName = 'com.abc.student.management.StudentManagementApplication' buildInfo() } bootJar { baseName = 'student-management' } // FIXME - IN FUTURE WE NEED TO MAKE THIS to Zero. checkstyle { maxErrors = 11 maxWarnings = 11 toolVersion = 8.17 } [checkstyleMain, checkstyleTest].each { task -> task.logging.setLevel(LogLevel.LIFECYCLE) // FIXME - This is to be updated with False. task.ignoreFailures = false } // ---- PLUGIN CONFIG ENDs dependencyManagement { imports { mavenBom "org.springframework.boot:spring-boot-dependencies:$springBootVersion" } } dependencies { // Spring specific dependencies implementation('org.springframework:spring-tx') implementation('org.springframework:spring-core') implementation('org.springframework:spring-context') implementation('org.springframework:spring-beans') implementation('org.springframework:spring-expression') implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator' implementation group: 'org.springframework.boot', name: 'spring-boot-starter-aop' implementation group: 'org.springframework.retry', name: 'spring-retry' // Spring data-mongo - Remove mongodb eventually in favor of Oracle. implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-mongodb' // Spring cloud // Upgraded springcloud-starter-vault from 2.0.0.RC1 to 2.0.1.RELEASE. implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-vault-config', version: '2.0.1.RELEASE' implementation group: 'io.pivotal.spring.cloud', name: 'spring-cloud-services-starter-config-client', version: '2.0.1.RELEASE' // Upgraded "spring-cloud-starter-bus-amqp" following from 2.0.0.RC1 to 2.0.1.RELEASE implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-bus-amqp', version: '2.0.1.RELEASE' // MongoDB - Dependencies - Remove mongodb eventually in favor of Oracle. implementation group: 'org.mongodb', name: 'mongodb-driver', version: '3.10.1' implementation group: 'org.mongodb', name: 'mongodb-driver-core', version: '3.10.1' implementation group: 'org.mongodb', name: 'bson', version: '3.10.1' // SWagger dependencies implementation group: 'io.swagger', name: 'swagger-parser', version: '1.0.23' implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' implementation group: 'com.atlassian.oai', name: 'swagger-request-validator-core', version: '1.3.9' // Apache - Commons implementation group: 'commons-io', name: 'commons-io', version: '2.6' // Oracle dependencies // implementation group: 'com.oracle.jdbc', name: 'ojdbc7', version: '12.1.0' // Logback implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.2.3' implementation group: 'org.apache.camel', name: 'camel-jsonpath', version: '2.22.0' implementation group: 'com.google.gdata', name: 'core', version: '1.47.1' implementation group: 'com.google.guava', name: 'guava', version: '20.0' // Mapper implementation group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4' // JSON implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: '2.8.10' implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' // abc - exception handler implementation(group: 'com.abc.consumer.exception', name: 'exception-handler', version: '1.3.3-SNAPSHOT') { exclude group: 'org.springframework' } // AXON - SDK implementation(group: 'com.abc.apie.axon', name: 'axon-sdk', version: '2.0.5') { exclude(module: 'hibernate-validator') } // abc Reference Arch - Messaging implementation(group: 'com.abc.refarch', name: 'ref-arch-messaging-base', version: '5.3.2') { exclude module: 'axon-sdk' exclude module: 'hibernate-validator' exclude group: 'org.springframework' } // Test specific. testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test' testImplementation group: 'com.github.tomakehurst', name: 'wiremock', version: '2.21.0' // abc Reference Arch - Testing testImplementation(group: 'com.abc.refarch', name: 'ref-arch-unit-test-jar', version: '5.3.2') { exclude group: 'org.springframework' } testImplementation(group: 'com.intuit.karate', name: 'karate-apache', version: '0.9.4') { exclude(module: 'logback-classic') } testImplementation group: 'net.masterthought', name: 'cucumber-reporting', version: '3.20.0' // Karate Framework testImplementation group: 'com.intuit.karate', name: 'karate-junit4', version: '0.9.4' // The version of lombok was actually - 1.16.20 - but had problem with Gradle version 4.9 hence upgraded to 1.18.10. compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.10' } ext.appName = 'student-management' ext.apiPackage = 'com.abc.student.management.generated.api' ext.modelPackage = 'com.abc.student.management.generated.model' ext.swaggerFile = "${rootDir}/src/main/resources/StudentManagement.v1.yaml" ext.swaggerBuildDir = "${project.buildDir}/${ext.appName}" // Actual task for generating the server task generateServer { doLast { def config = new CodegenConfigurator() config.setLang("spring") config.setApiPackage(rootProject.apiPackage) // Package to be used for the API interfaces config.setModelPackage(rootProject.modelPackage) // Package to be used for the API models config.setInputSpec(rootProject.swaggerFile.toString()) // The swagger API file config.setOutputDir(rootProject.swaggerBuildDir) // The output directory, user-service-contract/build/user-service-server/ config.addSystemProperty("models", ""); config.addSystemProperty("apis", ""); config.setAdditionalProperties([ 'dateLibrary' : 'java8', // Date library to use 'useTags' : 'true', // Use tags for the naming 'delegatePattern': 'true' // Generating the code with the delegate pattern ]) new DefaultGenerator().opts(config.toClientOptInput()).generate() // Executing the generation } } findbugs { toolVersion = "3.0.1" sourceSets = [sourceSets.main] // FIXME - Make this false. ignoreFailures = true effort = "max" reportLevel = "medium" excludeFilter = file("$rootDir/config/findbugs/exclude.xml") } pmd { toolVersion = "5.6.1" ignoreFailures = false sourceSets = [sourceSets.main] reportsDir = file("${project.buildDir}/reports/pmdTest") ruleSets = [ 'java-basic' ] } tasks.withType(FindBugs) { reports { xml.enabled = false html.enabled = true } } tasks.withType(Pmd) { reports { xml.enabled = false html.enabled = true } } sonarqube { properties { property "sonar.projectName", "student-management" property "sonar.projectKey", "student-management" property "sonar.jacoco.reportPath", "build/jacoco/test.exec" property "sonar.junit.reportPaths", "build/test-results/test" property "sonar.host.url", "https://fusion.abc.int/sonar" property "sonar.gateId", "307" property "sonar.projectDescription", "student management microservice." property "sonar.skip.qualityGate", "false" property "sonar.exclusions", [excludeStudentManagementConstants, excludeCaasConstants] } }
P.S- I tried project.buildDir but that changed the build
to target
, the jar is still generated inside the target/lib directory.
Advertisement
Answer
In the Configuring executable archive packaging section of the Spring Boot Gradle Plugin Reference Guide we can read:
The
BootJar
andBootWar
tasks are subclasses of Gradle’sJar
andWar
tasks respectively. As a result, all of the standard configuration options that are available when packaging a jar or war are also available when packaging an executable jar or war.
Having that in mind if we look at Gradle’s Jar plugin documentation it has destinationDirectory
property denoting the directory where the archive will be placed.
Try updating your build.gradle
script according to this:
bootJar { destinationDirectory = file(project.buildDir) }
This should do the trick.