How to migrate war to layered jar in dockerfile with spring-boot-maven-plugin

Viewed 443

So I am trying to migrate my war into layered jar. First I add configuration in pom.xml

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <layout>JAR</layout>
            <layers>
                <enabled>true</enabled>
            </layers>
        </configuration>
    </plugin>

but now I have problem how to change my dockerfile which contains:

...
ADD @project.build.finalName@.war /usr/local/
ADD runtime-app.jar /usr/local/


CMD exec java $JAVA_OPTS -cp @project.build.finalName@.war -Dloader.path=WEB-INF/lib-provided,WEB-INF/lib,WEB-INF/classes,runtime-app.jar -Dloader.main=org.my.app.AppApplication org.springframework.boot.loader.PropertiesLauncher

I am using PropertiesLauncher because I need to add jar in runtime

I tried to add this dependency into lib folder:

COPY --from=builder application/runtime-app.jar ./BOOT-INF/lib

but there are still some errors

any idea how should I migrate this ?

UPDATE1

then I also try:

        <configuration>
            <includes>
                <include>
                    <groupId>my</groupId>
                    <artifactId>runtime.app</artifactId>
                </include>
            </includes>
            <layout>JAR</layout>
            <layers>
                <enabled>true</enabled>
            </layers>
        </configuration>

but then I am getting error:

java -Djarmode=layertools -jar target/my-app.jar list
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:109)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.NoClassDefFoundError: org/springframework/util/ClassUtils
    at org.springframework.boot.loader.jarmode.JarModeLauncher.main(JarModeLauncher.java:40)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: org.springframework.util.ClassUtils
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 9 more
1 Answers

Try adding this dependency to the module:

   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>

This jar contains the org.springframework.util.ClassUtils and will resolve the error.

Related