【问题标题】:Jenkins: FATAL: Could not initialize class hudson.util.ProcessTree$UnixReflection詹金斯:致命:无法初始化类 hudson.util.ProcessTree$UnixReflection
【发布时间】:2018-04-30 15:30:38
【问题描述】:
FATAL: Could not initialize class hudson.util.ProcessTree$UnixReflection
java.lang.NoClassDefFoundError: Could not initialize class hudson.util.ProcessTree$UnixReflection
at hudson.util.ProcessTree$UnixProcess.kill(ProcessTree.java:647)
at hudson.util.ProcessTree$UnixProcess.killRecursively(ProcessTree.java:668)
at hudson.util.ProcessTree$UnixProcess.killRecursively(ProcessTree.java:667)
at hudson.util.ProcessTree$Unix.killAll(ProcessTree.java:589)
at hudson.Launcher$LocalLauncher.kill(Launcher.java:949)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:502)
at hudson.model.Run.execute(Run.java:1737)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:421)

詹金斯版本。 2.73.3 MacOSx

进行 iOS 构建并上传到 hockeyapp。 .ipa 已成功创建,之后似乎发生了错误,就像在 hockeyapp 上传时一样。我有一个 android 项目可以正常工作并成功上传到 hockeyapp。

在更新 Jenkins 和插件后,今天开始获得此功能。以前工作过。

有什么想法吗?

【问题讨论】:

  • 看起来它已经在实现中侵入了私有方法,但在 JDK 9 中已经重构了实现,因此私有方法不再存在。最好检查一下 Jenkins 问题跟踪器,也许它已经被记录或修复了。

标签: android ios jenkins java-9


【解决方案1】:

在运行 Android 版本时发生在我身上 (Jenkins build 2.86,我刚刚从 2.87 或更新的版本降级,因为其他失败)

Build step 'Invoke Gradle script' changed build result to SUCCESS
FATAL: Could not initialize class 
hudson.util.ProcessTree$UnixReflection
java.lang.NoClassDefFoundError: Could not initialize class 
hudson.util.ProcessTree$UnixReflection
at hudson.util.ProcessTree$UnixProcess.kill(ProcessTree.java:647)
at hudson.util.ProcessTree$UnixProcess.killRecursively(ProcessTree.java:668)
at hudson.util.ProcessTree$Unix.killAll(ProcessTree.java:589)
at hudson.Launcher$LocalLauncher.kill(Launcher.java:949)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:510)
at hudson.model.Run.execute(Run.java:1724)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:421)
Finished: FAILURE

先成功后失败,嗯,很糟糕

我记得最近我安装了 java 9 进行实验,但仍然在我的 .zshrc 中将 java 8 设置为 usl/libexec/java_home:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_152`

但这一点帮助都没有,所以我用

告别了 Java 9
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk

然后去管理 Jenkins -> 配置系统 -> 环境变量 并添加了

/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home

作为 JAVA_HOME

在 Jenkins 重新启动后,我的构建运行起来就像一个魅力

【讨论】:

  • 好的,是的,看起来像是安装了 Java 9,这似乎很可疑。正在努力删除它并再次测试。
  • 终于让它再次工作了,我不得不卸载 java 9 但还要将 java 8 更新到最新版本。看起来我想通过更新 java 来解决另一个问题并尝试了 java 9,但在更新我的 jenkins 插件后遇到了这个问题。无论如何,使用最新的 java 8(目前是 1.8.0_151)似乎已经解决了这个问题。
  • @CodeSmith 如何卸载和安装 java 版本 8?需要紧急帮助。
  • @pkc456 您的问题缺少基本信息,例如您使用的是哪个操作系统...如果您使用的是 OSX,您可以尝试与我上面的回答类似
  • 10.13.3 Mac 操作系统
【解决方案2】:

在使用 Java 8 时,擦除 Jenkins 上的当前工作区为我消除了错误。更新 gradle 和 sonarqube 插件版本后报错。

【讨论】:

    【解决方案3】:

    我们在旧的 Jenkins 服务器上间歇性地看到了这种情况,我想我们已经找到了它。当作业运行后留下后台进程并且可以使用此作业脚本轻松复制时会发生这种情况:

    sleep 30 &
    exit 0
    

    错误Could not initialize class hudson.util.ProcessTree$UnixReflection来自这个静态初始化器:

            static {
                try {
                    Class<?> clazz = Class.forName("java.lang.UNIXProcess");
                    PID_FIELD = clazz.getDeclaredField("pid");
                    PID_FIELD.setAccessible(true);
    
                    if (isPreJava8()) {
                        DESTROY_PROCESS = clazz.getDeclaredMethod("destroyProcess",int.class);
                    } else {
                        DESTROY_PROCESS = clazz.getDeclaredMethod("destroyProcess",int.class, boolean.class);
                    }
                    DESTROY_PROCESS.setAccessible(true);
                } catch (ClassNotFoundException e) {
                    LinkageError x = new LinkageError();
                    x.initCause(e);
                    throw x;
                } catch (NoSuchFieldException e) {
                    LinkageError x = new LinkageError();
                    x.initCause(e);
                    throw x;
                } catch (NoSuchMethodException e) {
                    LinkageError x = new LinkageError();
                    x.initCause(e);
                    throw x;
                }
            }
    

    UNIXProcess.destoryProcess 的签名在 Java 8 中发生了更改。Java 9 及更高版本可能进行了进一步的更改。您需要一个 JDK,它具有 Jenkins 想要在该类中找到的内容。

    【讨论】:

      猜你喜欢
      • 2017-09-29
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 2014-09-09
      相关资源
      最近更新 更多