如何在 mac 上使用 Jib 对 java 应用进行 docker 化

How to dockerize a java app using Jib on the mac

我正在尝试通过 运行 在下面使用以下 dockerBuild 命令首先构建本地映像来对我的 java 网络应用程序进行 docker 化。请记住,我在 mac 上并且正在使用 Java 16jib-maven-plugin项目。

当我运行命令时,它给出了下面的错误。

错误

 Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.apache.maven.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:39)
        at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:122)
        at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:61)
Caused by: java.lang.NoClassDefFoundError: org/apache/maven/exception/ExceptionHandler
        at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
        at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3334)
        at java.base/java.lang.Class.getMethodsRecursive(Class.java:3475)
        at java.base/java.lang.Class.getMethod0(Class.java:3461)
        at java.base/java.lang.Class.getMethod(Class.java:2193)
        at org.codehaus.plexus.classworlds.launcher.Launcher.getEnhancedMainMethod(Launcher.java:168)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:261)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
        ... 7 more
Caused by: java.lang.ClassNotFoundException: org.apache.maven.exception.ExceptionHandler
        at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
        ... 17 more

命令

./mvnw jib:dockerBuild -Djib.to.image=fullstack:v1

pom.xml

      <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>2.5.2</version>
            <configuration>
                <from>
                    <image>openjdk:16</image>
                </from>
                <container>
                    <ports>
                        <port>8080</port>
                    </ports>
                    <format>OCI</format>
                </container>
            </configuration>
        </plugin>

会不会是jib-maven-plugin(2.5.2)的版本不兼容Java16?

我也在 mac 上使用 jib。

据此 issue 看来 jib 尚未针对 java 16 进行测试。您可以使用早期版本(例如 java 11)构建并仍然执行它在 java 16 之上,前提是您的代码在早期版本上编译并且您不使用 java 16 功能。 还要确保使用 maven 3.8.1

可能是jib-maven插件的版本(2.5.2)不兼容Java 16.我用的是最新版的JIB,和Java 16 Mac.

 ...
  <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>${jib-maven-plugin.version}</version>
            <configuration>
                <to>
                    <image>jib-spring-boot-app</image>
                </to>
                <from>
                    <image>openjdk:16</image>
                </from>
                <container>
                    <ports>
                        <port>8080</port>
                    </ports>
                    <format>OCI</format>
                </container>
            </configuration>
        </plugin>
    </plugins>
</build>

<properties>
    <jib-maven-plugin.version>3.0.0</jib-maven-plugin.version>
    <java.version>1.16</java.version>
</properties>
...