繁体   English   中英

詹金斯:致命:无法初始化类 hudson.util.ProcessTree$UnixReflection

[英]Jenkins: FATAL: Could not initialize class hudson.util.ProcessTree$UnixReflection

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 和插件后,今天开始得到这个。 之前在工作。

有什么想法吗?

在运行 Android 版本时发生在我身上(Jenkins 版本是 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

首先成功然后失败,嗯,weeird

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

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

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

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

我们在旧的 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,该 JDK 具有 Jenkins 想要在该类中找到的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM