最近一直致力于将 Jenkins 自动发布的工作前移至 Gitlab上,在进行这个工作的时候时常会出现一些预想不到情况,今天要讲的是其中的一次历险经历。
问题的场景描述
借助公司引入第三方CRM的契机,我们对公司内的系统进行了重新的规划,目标是搭建一个基于微服务的分布式系统。因此创建了很多微服务,例如:合同、客户、财务、订单、样本、员工等等,除了业务以外还有类似与消息队列监听这样与业务无关的基础服务,此次历险的罪魁祸首就是这个消息队列监听服务(annoroad-mq-listener)。在将其他微服务从 Jenkins 迁移至 Gitlab 的过程中相对比较顺畅,只有在对消息队列监听服务(annoroad-mq-listener)进行迁移的时候,在 Gitlab 执行 .gitlab-ci.yml 中 mvn 命令的时候出现了问题(注:这里我贴出 .gitlab-ci.yml 中执行 mvn 命令的相关代码,如下图)。
出现的异常信息
在 Gitlab 中执行 Pipeline 的过程中,在执行 mvn 打包阶段,将会抛出异常,如下图:
详细错误信息如下:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project annoroad-mq-listener: Fatal error compiling: CompilerException: NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project annoroad-mq-listener: Fatal error compiling
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
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)
Caused by: org.apache.maven.plugin.MojoExecutionException: Fatal error compiling
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1140)
at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:188)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
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)
Caused by: org.codehaus.plexus.compiler.CompilerException
at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess (JavaxToolsCompiler.java:173)
at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile (JavacCompiler.java:174)
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1129)
at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:188)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
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)
Caused by: java.lang.NullPointerException
at com.sun.tools.javac.main.JavaCompiler.readSourceFile (JavaCompiler.java:841)
at com.sun.tools.javac.processing.JavacProcessingEnvironment I m p l i c i t C o m p l e t e r . c o m p l e t e ( J a v a c P r o c e s s i n g E n v i r o n m e n t . j a v a : 1529 ) a t c o m . s u n . t o o l s . j a v a c . c o d e . S y m b o l . c o m p l e t e ( S y m b o l . j a v a : 642 ) a t c o m . s u n . t o o l s . j a v a c . c o d e . S y m b o l ImplicitCompleter.complete (JavacProcessingEnvironment.java:1529) at com.sun.tools.javac.code.Symbol.complete (Symbol.java:642) at com.sun.tools.javac.code.Symbol ImplicitCompleter.complete(JavacProcessingEnvironment.java:1529)atcom.sun.tools.javac.code.Symbol.complete(Symbol.java:642)atcom.sun.tools.javac.code.SymbolClassSymbol.complete (Symbol.java:1326)
at com.sun.tools.javac.code.Type C l a s s T y p e . c o m p l e t e ( T y p e . j a v a : 1140 ) a t c o m . s u n . t o o l s . j a v a c . c o d e . T y p e ClassType.complete (Type.java:1140) at com.sun.tools.javac.code.Type ClassType.complete(Type.java:1140)atcom.sun.tools.javac.code.TypeClassType.getTypeArguments (Type.java:1066)
at com.sun.tools.javac.code.Printer.visitClassType (Printer.java:237)
at com.sun.tools.javac.code.Printer.visitClassType (Printer.java:52)
at com.sun.tools.javac.code.Type C l a s s T y p e . a c c e p t ( T y p e . j a v a : 993 ) a t c o m . s u n . t o o l s . j a v a c . c o d e . P r i n t e r . v i s i t ( P r i n t e r . j a v a : 136 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . A b s t r a c t D i a g n o s t i c F o r m a t t e r . f o r m a t A r g u m e n t ( A b s t r a c t D i a g n o s t i c F o r m a t t e r . j a v a : 199 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . A b s t r a c t D i a g n o s t i c F o r m a t t e r . f o r m a t A r g u m e n t s ( A b s t r a c t D i a g n o s t i c F o r m a t t e r . j a v a : 167 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . B a s i c D i a g n o s t i c F o r m a t t e r . f o r m a t M e s s a g e ( B a s i c D i a g n o s t i c F o r m a t t e r . j a v a : 111 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . B a s i c D i a g n o s t i c F o r m a t t e r . f o r m a t M e s s a g e ( B a s i c D i a g n o s t i c F o r m a t t e r . j a v a : 67 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . A b s t r a c t D i a g n o s t i c F o r m a t t e r . f o r m a t A r g u m e n t ( A b s t r a c t D i a g n o s t i c F o r m a t t e r . j a v a : 185 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . A b s t r a c t D i a g n o s t i c F o r m a t t e r . f o r m a t A r g u m e n t s ( A b s t r a c t D i a g n o s t i c F o r m a t t e r . j a v a : 167 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . B a s i c D i a g n o s t i c F o r m a t t e r . f o r m a t M e s s a g e ( B a s i c D i a g n o s t i c F o r m a t t e r . j a v a : 111 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . B a s i c D i a g n o s t i c F o r m a t t e r . f o r m a t M e s s a g e ( B a s i c D i a g n o s t i c F o r m a t t e r . j a v a : 67 ) a t c o m . s u n . t o o l s . j a v a c . u t i l . J C D i a g n o s t i c . g e t M e s s a g e ( J C D i a g n o s t i c . j a v a : 788 ) a t c o m . s u n . t o o l s . j a v a c . a p i . C l i e n t C o d e W r a p p e r ClassType.accept (Type.java:993) at com.sun.tools.javac.code.Printer.visit (Printer.java:136) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument (AbstractDiagnosticFormatter.java:199) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments (AbstractDiagnosticFormatter.java:167) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage (BasicDiagnosticFormatter.java:111) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage (BasicDiagnosticFormatter.java:67) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument (AbstractDiagnosticFormatter.java:185) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments (AbstractDiagnosticFormatter.java:167) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage (BasicDiagnosticFormatter.java:111) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage (BasicDiagnosticFormatter.java:67) at com.sun.tools.javac.util.JCDiagnostic.getMessage (JCDiagnostic.java:788) at com.sun.tools.javac.api.ClientCodeWrapper ClassType.accept(Type.java:993)atcom.sun.tools.javac.code.Printer.visit(Printer.java:136)atcom.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument(AbstractDiagnosticFormatter.java:199)atcom.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments(AbstractDiagnosticFormatter.java:167)atcom.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:111)atcom.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:67)atcom.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument(AbstractDiagnosticFormatter.java:185)atcom.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments(AbstractDiagnosticFormatter.java:167)atcom.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:111)atcom.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:67)atcom.sun.tools.javac.util.JCDiagnostic.getMessage(JCDiagnostic.java:788)atcom.sun.tools.javac.api.ClientCodeWrapperDiagnosticSourceUnwrapper.getMessage (ClientCodeWrapper.java:799)
at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess (JavaxToolsCompiler.java:131)
at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile (JavacCompiler.java:174)
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1129)
at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:188)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
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)
[ERROR]
[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/MojoExecutionException
ERROR: Job failed: exit code 1
解决的办法
在 annoroad-mq-listener 项目的 pom.xml 文件中指定 maven-compiler-plugin 的 release,这里有两种方法,推荐使用【方法1】,如下:
- 在 pom.xml 文件中设置 maven-compiler-plugin 对应的 properties,如下图:
- 在 pom.xml 文件中设置 maven-compiler-plugin 对应的 plugin,如下图:
问题出现的原因
未待完续…