背景:我想演示一下 spring-boot-maven-plugin 插件的 repackage 打包效果,在执行命令 mvn spring-boot:repackage -pl boot-maven-plugin-project
时报了如下错误:
[WARNING] Error injecting: org.springframework.boot.maven.RepackageMojo
java.lang.TypeNotPresentException: Type org.springframework.boot.maven.RepackageMojo not present
at org.eclipse.sisu.space.URLClassSpace.loadClass (URLClassSpace.java:149)
at org.eclipse.sisu.space.NamedClass.load (NamedClass.java:48)
at org.eclipse.sisu.space.AbstractDeferredClass.get (AbstractDeferredClass.java:50)
at com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:86)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision (InternalFactoryToInitializableAdapter.java:57)
at com.google.inject.internal.ProviderInternalFactory$1.call (ProviderInternalFactory.java:67)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:109)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:124)
at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
at com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:62)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:47)
at com.google.inject.internal.InjectorImpl$1.get (InjectorImpl.java:1101)
at org.eclipse.sisu.inject.Guice4$2.get (Guice4.java:235)
at org.eclipse.sisu.inject.LazyBeanEntry.getValue (LazyBeanEntry.java:83)
at org.eclipse.sisu.plexus.LazyPlexusBean.getValue (LazyPlexusBean.java:53)
at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:265)
at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:257)
at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo (DefaultMavenPluginManager.java:491)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:114)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
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.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
at org.codehaus.classworlds.Launcher.main (Launcher.java:41)
Caused by: java.lang.UnsupportedClassVersionError: org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1 (Native Method)
at java.lang.ClassLoader.defineClass (ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass (URLClassLoader.java:473)
at java.net.URLClassLoader.access$100 (URLClassLoader.java:74)
at java.net.URLClassLoader$1.run (URLClassLoader.java:369)
at java.net.URLClassLoader$1.run (URLClassLoader.java:363)
at java.security.AccessController.doPrivileged (Native Method)
at java.net.URLClassLoader.findClass (URLClassLoader.java:362)
at org.codehaus.plexus.classworlds.realm.ClassRealm.findClassInternal (ClassRealm.java:256)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf (ClassRealm.java:351)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass (SelfFirstStrategy.java:36)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass (ClassRealm.java:225)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass (ClassRealm.java:210)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass (ClassRealm.java:205)
at org.eclipse.sisu.space.URLClassSpace.loadClass (URLClassSpace.java:141)
at org.eclipse.sisu.space.NamedClass.load (NamedClass.java:48)
at org.eclipse.sisu.space.AbstractDeferredClass.get (AbstractDeferredClass.java:50)
at com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:86)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision (InternalFactoryToInitializableAdapter.java:57)
at com.google.inject.internal.ProviderInternalFactory$1.call (ProviderInternalFactory.java:67)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:109)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:124)
at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
at com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:62)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:47)
at com.google.inject.internal.InjectorImpl$1.get (InjectorImpl.java:1101)
at org.eclipse.sisu.inject.Guice4$2.get (Guice4.java:235)
at org.eclipse.sisu.inject.LazyBeanEntry.getValue (LazyBeanEntry.java:83)
at org.eclipse.sisu.plexus.LazyPlexusBean.getValue (LazyPlexusBean.java:53)
at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:265)
at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:257)
at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo (DefaultMavenPluginManager.java:491)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:114)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
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.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
at org.codehaus.classworlds.Launcher.main (Launcher.java:41)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.356 s
[INFO] Finished at: 2024-12-25T17:50:10+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.4.1:repackage (default-cli) on project boot-maven-plugin-project: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:3.4.1:repackage failed: Unable to load the mojo 'repackage' in the plugin 'org.springframework.boot:spring-boot-maven-plugin:3.4.1' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
[ERROR] -----------------------------------------------------
[ERROR] realm = plugin>org.springframework.boot:spring-boot-maven-plugin:3.4.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/boot/spring-boot-maven-plugin/3.4.1/spring-boot-maven-plugin-3.4.1.jar
[ERROR] urls[1] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/boot/spring-boot-buildpack-platform/3.4.1/spring-boot-buildpack-platform-3.4.1.jar
[ERROR] urls[2] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/com/fasterxml/jackson/core/jackson-databind/2.18.2/jackson-databind-2.18.2.jar
[ERROR] urls[3] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/com/fasterxml/jackson/core/jackson-annotations/2.18.2/jackson-annotations-2.18.2.jar
[ERROR] urls[4] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/com/fasterxml/jackson/core/jackson-core/2.18.2/jackson-core-2.18.2.jar
[ERROR] urls[5] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.18.2/jackson-module-parameter-names-2.18.2.jar
[ERROR] urls[6] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/net/java/dev/jna/jna-platform/5.13.0/jna-platform-5.13.0.jar
[ERROR] urls[7] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar
[ERROR] urls[8] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/commons/commons-compress/1.25.0/commons-compress-1.25.0.jar
[ERROR] urls[9] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/httpcomponents/client5/httpclient5/5.4.1/httpclient5-5.4.1.jar
[ERROR] urls[10] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/httpcomponents/core5/httpcore5/5.3.1/httpcore5-5.3.1.jar
[ERROR] urls[11] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/httpcomponents/core5/httpcore5-h2/5.3.1/httpcore5-h2-5.3.1.jar
[ERROR] urls[12] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/tomlj/tomlj/1.0.0/tomlj-1.0.0.jar
[ERROR] urls[13] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/antlr/antlr4-runtime/4.7.2/antlr4-runtime-4.7.2.jar
[ERROR] urls[14] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar
[ERROR] urls[15] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/boot/spring-boot-loader-tools/3.4.1/spring-boot-loader-tools-3.4.1.jar
[ERROR] urls[16] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.jar
[ERROR] urls[17] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar
[ERROR] urls[18] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/spring-core/6.2.1/spring-core-6.2.1.jar
[ERROR] urls[19] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/spring-jcl/6.2.1/spring-jcl-6.2.1.jar
[ERROR] urls[20] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/spring-context/6.2.1/spring-context-6.2.1.jar
[ERROR] urls[21] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/spring-aop/6.2.1/spring-aop-6.2.1.jar
[ERROR] urls[22] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/spring-beans/6.2.1/spring-beans-6.2.1.jar
[ERROR] urls[23] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/springframework/spring-expression/6.2.1/spring-expression-6.2.1.jar
[ERROR] urls[24] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/io/micrometer/micrometer-observation/1.14.2/micrometer-observation-1.14.2.jar
[ERROR] urls[25] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/io/micrometer/micrometer-commons/1.14.2/micrometer-commons-1.14.2.jar
[ERROR] urls[26] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/maven/plugins/maven-shade-plugin/3.5.0/maven-shade-plugin-3.5.0.jar
[ERROR] urls[27] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/codehaus/plexus/plexus-utils/3.5.1/plexus-utils-3.5.1.jar
[ERROR] urls[28] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/ow2/asm/asm/9.5/asm-9.5.jar
[ERROR] urls[29] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/ow2/asm/asm-commons/9.5/asm-commons-9.5.jar
[ERROR] urls[30] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/ow2/asm/asm-tree/9.5/asm-tree-9.5.jar
[ERROR] urls[31] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/jdom/jdom2/2.0.6.1/jdom2-2.0.6.1.jar
[ERROR] urls[32] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/maven/shared/maven-dependency-tree/3.2.1/maven-dependency-tree-3.2.1.jar
[ERROR] urls[33] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/commons-io/commons-io/2.13.0/commons-io-2.13.0.jar
[ERROR] urls[34] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/vafer/jdependency/2.8.0/jdependency-2.8.0.jar
[ERROR] urls[35] = file:/Users/xxx/SoftWares/Developer/apache-maven-3.9.9/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]
[ERROR]
[ERROR] -----------------------------------------------------
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginContainerException
报错原因:
在第二个标红处给了如下错误信息:
- Caused by: java.lang.UnsupportedClassVersionError: org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
这个错误表示当前 RepackageMojo 的版本和编译器(JDK)的版本不一致。换句话说,当前引入的 RepackageMojo 需要的版本和编译器的版本不一致。具体而言,spring-boot-maven-plugin:3.4.1
(引入的版本) 是用 Java 17(class file version 61.0 对应于 Java 17)编译的,而当前的项目使用的是 Java 8(class file version 52.0 对应于 Java 8)。
解决方案:
- 降低依赖版本
- 或将 JDK 由 8 升级到 17
最终,将 spring-boot-maven-plugin 由 3.4.1 版本降低到 2.7.5。
注意,修正了上述的错误后,并不能直接执行mvn spring-boot:repackage -pl boot-maven-plugin-project
,因为 repackage 是依赖于 jar 目标的,可以替换为如下命令:
mvn package -pl boot-maven-plugin-project