[컴][웹][자바][스프링] Spring Boot 에서 executable war 사용



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

References

  1. Spring Boot Reference Guide > 27.4.5 JSP Limitations

댓글 없음:

댓글 쓰기