Spring Boot 에서 executable war 사용
사용이유
ref. 1 에 따르면 jsp 를 사용하려면 executable jar 로 묶어서는 안되고, .war 로 packaging 을 해야 한다고 한다.source code
여기서는 gs-spring-boot source 를 사용할 것이다. git clone 을 통해 가져오면 된다. 그런 후에 complete folder 에 있는 소스를 사용하면 된다.
- git clone https://github.com/spring-guides/gs-spring-boot.git
build.gradle
그래서 build.gradle 에서 bootJar 을 지우고, bootWar 을 적은후gradlew build
를 하면 된다. 또는 enabled 속성을 이용하면 된다.만약 2개를 build.gradle 에 적어놓는다면,
gradlew bootWar
를 이용하면 된다. 그러면 아래 경로에 만들어진다.- <root>\build\libs\broker-sb-0.1.0-SNAPSHOT.war
apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' apply plugin: 'war' bootWar { // https://docs.gradle.org/current/userguide/war_plugin.html enabled = true baseName = 'broker-sb' version = '0.1.0-SNAPSHOT' } bootJar { // this determines the jar name. enabled = false baseName = 'broker-sb' // ./build/libs/broker-sb-0.1.0.jar version = '0.1.0' }
webapp directory
아래와 같은 구조로 다음 경로에 webapp 을 만들면 된다.
- <root>\src\main\webapp\
webapp + resources + WEB-INF + config + property + tags + views
lib에 있는 jar이 .so 등을 필요로 한다면
결과적으로 lib에 같이 넣을 수 없을 듯 하다. 실제로 executable jar / executable war 모두에서 lib 를 읽어드릴때 netsted jar 로 가정하고 읽어드렸다. 그래서 모두 아래와 같은 exception이 발생했다.
c:\a\programming\java\mm\springboot-test\complete\build\libs>java -jar mmbroker-sb-0.1.0-SNAPSHOT.war Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry WEB-INF/lib/libsigar-amd64-linux.so at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:86) at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:70) at org.springframework.boot.loader.Launcher.launch(Launcher.java:49) at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:58) Caused by: java.io.IOException: Unable to open nested jar file 'WEB-INF/lib/libsigar-amd64-linux.so' at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:254) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:239) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:103) ... 4 more Caused by: java.io.IOException: Unable to find ZIP central directory records after reading 65792 bytes at org.springframework.boot.loader.jar.CentralDirectoryEndRecord.<init>(CentralDirectoryEndRecord.java:65) at org.springframework.boot.loader.jar.CentralDirectoryParser.parse(CentralDirectoryParser.java:52) at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:121) at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:109) at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:287) at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:262) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:250) ... 6 more
댓글 없음:
댓글 쓰기