I have done the migration of the Spring Boot Application from 1.5.8 to 2.1.14-RELEASE and using gradle as a build script. I am using spring-boot-gradle-plugin and spring-boot-dependency-management plugins. In our spring boot project, we are creating multiple executable jar files by creating tasks for each jar as below
// During Migration changed from Jar to BootJar task eurekaAppJar(type: BootJar) { baseName = 'eurekaJar' version = '0.0.1' println sourceSets.main.output manifest { attributes 'Main-Class': "org.springframework.boot.loader.JarLauncher" attributes 'Start-Class': "com.abc.abcCompany.service.eurekaApp.EurekaApplication" attributes 'Implementation-Version': "001" } bootJar { mainClassName = "com.abc.abcCompany.service.eurekaApp.EurekaApplication" } from(sourceSets.main.output) { } } // During Migration changed from Jar to BootJar task oAuthConfigJar(type: BootJar) { baseName = 'oAuthConfigJar' version = '0.0.1' manifest { attributes 'Main-Class': "org.springframework.boot.loader.JarLauncher" attributes 'Start-Class': "com.abc.abcCompany.service.authserver.AuthServerApplication" attributes 'Implementation-Version': "001" } springBoot { mainClassName = "com.abcCompany.service.authserver.AuthServerApplication" } from(sourceSets.main.output) { } } // During migration changed from BootRepackage to BootJar task eurekaBoot(type: BootJar, dependsOn: eurekaAppJar) { mainClassName = 'com.abc.abcCompany.service.eurekaApp.EurekaApplication' // During migration commented the below code // customConfiguration = "eurekaconfiguration" // withJarTask = eztrackerEurekaJar } // During migration changed from BootRepackage to BootJar task oAuthConfigJarBoot(type: BootJar, dependsOn: oAuthConfigJar) { println " Executing eztrackerApiGatewayBoot task" mainClassName = 'com.abc.abcCompany.service.authserver.AuthServerApplication' // During migration commented the below code // customConfiguration = "zuulconfiguration" // withJarTask = eztrackerApiGatewayJar } bootJar.dependsOn = [eurekaBoot, oAuthConfigJarBoot] bootJar.enabled = false
In the above code after executing either gradle assemble, It has created two executable jar files eurekaJar-0.0.1.jar, oAuthConfigJar-0.0.1.jar.
Here is my question:
Before the spring boot migration, in the above jars the folder structure is as below:
eurekaJar-0.0.1.jar -- org -- META-INF -- BOOT-INT -- lib -- dependencies (jars) -- classes -- applicationclasses
after the migration below is the folder structure
eurekaJar-0.0.1.jar -- org -- META-INF -- applicationclasses
so after the migration there is no BOOT-INF folder and dependencies(lib folder)
Because of the above issue my executable jar is not running.
Any comment is appreciated.
Advertisement
Answer
Rather than using from
, which will add files directly to the jar, you should configure the classpath of the BootJar
tasks. Jar files on the classpath will be packaged in BOOT-INF/lib
and directories will be packaged in BOOT-INF/classes
.
For reference, you can see how Spring Boot configures the classpath of the default bootJar
task in its own plugin here. From what you’ve shown above, you probably want to use the runtime classpath of the main source set too.
Here’s a complete example for your eurekaAppJar
:
import org.springframework.boot.gradle.tasks.bundling.BootJar plugins { id 'org.springframework.boot' version '2.1.4.RELEASE' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() } task eurekaAppJar(type: BootJar) { baseName = 'eurekaJar' version = '0.0.1' manifest { attributes 'Main-Class': "org.springframework.boot.loader.JarLauncher" attributes 'Start-Class': "com.abc.abcCompany.service.eurekaApp.EurekaApplication" attributes 'Implementation-Version': "001" } mainClassName = "com.abc.abcCompany.service.eurekaApp.EurekaApplication" classpath sourceSets.main.runtimeClasspath }
This jar can then be built with the following command:
$ ./gradlew eurekaAppJar
Its classes and dependencies are packaged in BOOT-INF/classes
and BOOT-INF/lib
respectively:
$ unzip -l build/libs/eurekaJar-0.0.1.jar Archive: build/libs/eurekaJar-0.0.1.jar Length Date Time Name --------- ---------- ----- ---- 0 04-04-2019 02:23 org/ 0 04-04-2019 02:23 org/springframework/ 0 04-04-2019 02:23 org/springframework/boot/ 0 04-04-2019 02:23 org/springframework/boot/loader/ 0 04-04-2019 02:23 org/springframework/boot/loader/data/ 0 04-04-2019 02:23 org/springframework/boot/loader/jar/ 0 04-04-2019 02:23 org/springframework/boot/loader/archive/ 0 04-04-2019 02:23 org/springframework/boot/loader/util/ 2688 04-04-2019 02:23 org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class 4976 04-04-2019 02:23 org/springframework/boot/loader/jar/AsciiBytes.class 540 04-04-2019 02:23 org/springframework/boot/loader/jar/CentralDirectoryVisitor.class 3263 04-04-2019 02:23 org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class 4015 04-04-2019 02:23 org/springframework/boot/loader/data/RandomAccessDataFile.class 945 04-04-2019 02:23 org/springframework/boot/loader/archive/Archive.class 282 04-04-2019 02:23 org/springframework/boot/loader/data/RandomAccessDataFile$1.class 1593 04-04-2019 02:23 org/springframework/boot/loader/jar/JarFileEntries$1.class 299 04-04-2019 02:23 org/springframework/boot/loader/jar/JarEntryFilter.class 485 04-04-2019 02:23 org/springframework/boot/loader/data/RandomAccessData.class 616 04-04-2019 02:23 org/springframework/boot/loader/jar/Bytes.class 702 04-04-2019 02:23 org/springframework/boot/loader/jar/JarURLConnection$1.class 9854 04-04-2019 02:23 org/springframework/boot/loader/jar/JarURLConnection.class 1233 04-04-2019 02:23 org/springframework/boot/loader/jar/JarFile$2.class 1487 04-04-2019 02:23 org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator$EntryComparator.class 3837 04-04-2019 02:23 org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator.class 1102 04-04-2019 02:23 org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class 273 04-04-2019 02:23 org/springframework/boot/loader/archive/ExplodedArchive$1.class 5243 04-04-2019 02:23 org/springframework/boot/loader/archive/ExplodedArchive.class 1779 04-04-2019 02:23 org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class 1081 04-04-2019 02:23 org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class 7336 04-04-2019 02:23 org/springframework/boot/loader/archive/JarFileArchive.class 19737 04-04-2019 02:23 org/springframework/boot/loader/PropertiesLauncher.class 1535 04-04-2019 02:23 org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class 4306 04-04-2019 02:23 org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class 5699 04-04-2019 02:23 org/springframework/boot/loader/LaunchedURLClassLoader.class 1374 04-04-2019 02:23 org/springframework/boot/loader/jar/JarFile$JarFileType.class 2062 04-04-2019 02:23 org/springframework/boot/loader/jar/JarFile$1.class 2046 04-04-2019 02:23 org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class 14010 04-04-2019 02:23 org/springframework/boot/loader/jar/JarFileEntries.class 3116 04-04-2019 02:23 org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class 1813 04-04-2019 02:23 org/springframework/boot/loader/jar/ZipInflaterInputStream.class 302 04-04-2019 02:23 org/springframework/boot/loader/archive/Archive$Entry.class 437 04-04-2019 02:23 org/springframework/boot/loader/archive/Archive$EntryFilter.class 3662 04-04-2019 02:23 org/springframework/boot/loader/jar/JarEntry.class 5267 04-04-2019 02:23 org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class 4624 04-04-2019 02:23 org/springframework/boot/loader/jar/CentralDirectoryParser.class 11548 04-04-2019 02:23 org/springframework/boot/loader/jar/Handler.class 3650 04-04-2019 02:23 org/springframework/boot/loader/jar/StringSequence.class 345 04-04-2019 02:23 org/springframework/boot/loader/jar/FileHeader.class 15076 04-04-2019 02:23 org/springframework/boot/loader/jar/JarFile.class 1953 04-04-2019 02:23 org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class 1484 04-04-2019 02:23 org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class 266 04-04-2019 02:23 org/springframework/boot/loader/PropertiesLauncher$1.class 4684 04-04-2019 02:23 org/springframework/boot/loader/Launcher.class 1502 04-04-2019 02:23 org/springframework/boot/loader/MainMethodRunner.class 3608 04-04-2019 02:23 org/springframework/boot/loader/ExecutableArchiveLauncher.class 1721 04-04-2019 02:23 org/springframework/boot/loader/WarLauncher.class 1585 04-04-2019 02:23 org/springframework/boot/loader/JarLauncher.class 5203 04-04-2019 02:23 org/springframework/boot/loader/util/SystemPropertyUtils.class 0 07-15-2021 13:15 META-INF/ 288 07-15-2021 13:15 META-INF/MANIFEST.MF 0 07-15-2021 13:15 BOOT-INF/ 0 07-15-2021 13:15 BOOT-INF/classes/ 0 07-15-2021 13:15 BOOT-INF/classes/com/ 0 07-15-2021 13:15 BOOT-INF/classes/com/example/ 0 07-15-2021 13:15 BOOT-INF/classes/com/example/so68382900/ 745 07-15-2021 13:15 BOOT-INF/classes/com/example/so68382900/DemoApplication.class 1 07-15-2021 13:14 BOOT-INF/classes/application.properties 0 07-15-2021 13:15 BOOT-INF/lib/ 398 07-15-2021 13:15 BOOT-INF/lib/spring-boot-starter-2.1.4.RELEASE.jar 1262787 07-15-2021 13:15 BOOT-INF/lib/spring-boot-autoconfigure-2.1.4.RELEASE.jar 952263 07-15-2021 13:15 BOOT-INF/lib/spring-boot-2.1.4.RELEASE.jar 407 07-15-2021 13:15 BOOT-INF/lib/spring-boot-starter-logging-2.1.4.RELEASE.jar 26586 06-26-2020 11:02 BOOT-INF/lib/javax.annotation-api-1.3.2.jar 1099880 07-15-2021 13:15 BOOT-INF/lib/spring-context-5.1.6.RELEASE.jar 369018 07-15-2021 13:15 BOOT-INF/lib/spring-aop-5.1.6.RELEASE.jar 673302 07-15-2021 13:15 BOOT-INF/lib/spring-beans-5.1.6.RELEASE.jar 280482 07-15-2021 13:15 BOOT-INF/lib/spring-expression-5.1.6.RELEASE.jar 1293481 07-15-2021 13:15 BOOT-INF/lib/spring-core-5.1.6.RELEASE.jar 301298 07-15-2021 13:15 BOOT-INF/lib/snakeyaml-1.23.jar 290339 06-26-2020 11:01 BOOT-INF/lib/logback-classic-1.2.3.jar 17522 07-15-2021 13:15 BOOT-INF/lib/log4j-to-slf4j-2.11.2.jar 4589 07-15-2021 13:15 BOOT-INF/lib/jul-to-slf4j-1.7.26.jar 23762 07-15-2021 13:15 BOOT-INF/lib/spring-jcl-5.1.6.RELEASE.jar 471901 06-26-2020 11:01 BOOT-INF/lib/logback-core-1.2.3.jar 41139 06-26-2020 11:01 BOOT-INF/lib/slf4j-api-1.7.26.jar 266283 07-15-2021 13:15 BOOT-INF/lib/log4j-api-2.11.2.jar --------- ------- 7552715 86 files