如何在 mac 上使用 Jib 对 java 应用进行 docker 化
How to dockerize a java app using Jib on the mac
我正在尝试通过 运行 在下面使用以下 dockerBuild 命令首先构建本地映像来对我的 java 网络应用程序进行 docker 化。请记住,我在 mac 上并且正在使用 Java 16 和 jib-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>
...
我正在尝试通过 运行 在下面使用以下 dockerBuild 命令首先构建本地映像来对我的 java 网络应用程序进行 docker 化。请记住,我在 mac 上并且正在使用 Java 16 和 jib-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>
...