无头持续集成与Jenkins

19

我正在尝试在RackSpace ArchLinux云服务器上设置Jenkins,但一直无法成功。

每当我尝试访问Jenkins网站时,都会出现以下错误:

AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"?

java.lang.NullPointerException
    at sun.awt.X11FontManager.getDefaultPlatformFont(X11FontManager.java:779)
    at sun.font.SunFontManager$2.run(SunFontManager.java:428)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.font.SunFontManager.<init>(SunFontManager.java:371)
    at sun.awt.X11FontManager.<init>(X11FontManager.java:32)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:80)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:71)
    at java.awt.Font.getFont2D(Font.java:489)
    at java.awt.Font.getFamily(Font.java:1186)
    at java.awt.Font.getFamily_NoClientCode(Font.java:1160)
    at java.awt.Font.getFamily(Font.java:1152)
    at java.awt.Font.toString(Font.java:1649)
    at hudson.util.ChartUtil.<clinit>(ChartUtil.java:229)
    at hudson.WebAppMain.contextInitialized(WebAppMain.java:175)
    at winstone.WebAppConfiguration.<init>(WebAppConfiguration.java:897)
    at winstone.HostConfiguration.initWebApp(HostConfiguration.java:131)
    at winstone.HostConfiguration.<init>(HostConfiguration.java:73)
    at winstone.HostGroup.initHost(HostGroup.java:85)
    at winstone.HostGroup.<init>(HostGroup.java:45)
    at winstone.Launcher.<init>(Launcher.java:197)
    at winstone.Launcher.main(Launcher.java:398)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at Main._main(Main.java:268)
    at Main.main(Main.java:96)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.tanukisoftware.wrapper.WrapperJarApp.run(WrapperJarApp.java:394)
    at java.lang.Thread.run(Thread.java:722)

你认为可能是什么问题呢?

我已经尝试设置了JAVA_OPTS环境变量,但没有用。我还尝试使用-Djava.awt.headless=true参数执行Java代码,甚至将其设置在conf/wrapper.conf中的wrapper.app.parameter.3=-headless中。

有什么想法可以解决这个问题吗?我对此非常陌生...

先行致谢!


你正在运行Sun的Java还是OpenJDK? - Blender
11个回答

31
在我的 Fedora 17 64 位机器上,我已经安装了 OpenJDK 1.7,并使用 yum 安装了 Jenkins,但是它出现了相同的问题。设置 -Djava.awt.headless=true 没有帮助解决问题。
最终通过安装 dejavu-sans-fonts 解决了这个问题。
yum install dejavu-sans-fonts

3
这对我在安装了fontconfig后的CentOS OpenJDK 1.7上起作用。 - Todd
1
OpenSUSE:zypper install dejavu-fonts - Jesse Glick
需要强调的是,一个干净的CentOS 7系统需要安装Adopt OpenJDK 11和fontconfig,其中fontconfig依赖于dejavu-sans-fonts。仅仅安装dejavu-sans-fonts是不够的。 - Hammer Bro.

24

终于找到解决方案

信不信由你,问题实际上只是安装ttf-dejavu字体的问题!

我感到很羞愧...


1
不要紧张!这种情况谁都会遇到!无头错误(Headless error)是非常棘手的,很难理解它的根本原因! - sdmythos_gr
1
在我的情况下(这里也是 Arch Linux),当我尝试使用 OpenJDK 运行 Jenkins 时,安装 ttf-dejavu 并没有帮助。只有在安装了 Oracle JDK 后,Jenkins 才能在没有指定错误的情况下启动。 - jmu

9

安装java-1.6.0-openjdk会导致以下依赖关系:

  • fontconfig
  • libXfont
  • libfontenc
  • ttmkfdir
  • xorg-x11-font-utils
  • xorg-x11-fonts-Type1

安装这些软件包并重新启动jenkis后,一切都按预期工作。


Oracle Java7 也需要这些依赖项,不仅仅是 OpenJDK。 - higuita
@Zab0815,只是好奇,您尝试过哪个发行版,并且如何获得这样的依赖列表?我尝试过CentOS 6.3和Fedora 17,都使用了java-1.6.0-openjdk和java-1.7.0-openjdk。我使用了yum deplist和一些shell筛选器。我得到了非常不同的输出,但是您的有效!谢谢! - user183394
这真的起作用了。非常感谢! - Serban Cezar

6

作为一台64位的无头ArchLinux服务器,我已经成功地通过以下步骤配置了Jenkins:

  1. 安装ttf-dejavu软件包
  2. 安装fontconfig软件包
  3. 在/etc/conf.d/tomcat7中添加:

    CATALINA_OPTS="-Djava.awt.headless=true"


1
安装 ttf-dejavufontconfig 可以解决在 WSL 上的问题。 - JamMaster

2

1

我有同样的问题。
我在我的Linux账户中使用MobaXterm作为终端,对我来说解决方案在MobaXterm中。我需要在“设置”-->“配置”下启用X11。


1
pacman -S ttf-dejavu

已经为我的Archlinux框架修复了它


0

在Ubuntu 12.04LTC(Precise)上,安装openjdk-7-jre-headlessttf-dejavu对我很有帮助。这些字体是由Java安装的字体设置引用的,而OpenJDK 7软件包依赖于libfontconfig1,因此实际上会使用这些字体。

我正在使用http://pkg.jenkins-ci.org/debian/中的Jenkins,默认情况下您将获得openjdk-6-jre-headless,因为jenkins软件包依赖于default-jre-headless,后者又会拉取openjdk-6-jre-headless

您可以使用以下命令交换软件包:

$ aptitude install openjdk-7-jre-headless
$ aptitude remove default-jre-headless openjdk-6-jre-headless

0
在Linux服务器版本6.2(Santiago)上,您只需要指定以下命令。
export CATALINA_OPTS="-DJENKINS_HOME=/opt/itmsetup/apache-tomcat-6.0.37/jenkins -Xmx750m -Djava.awt.headless=true"                           

这解决了我的问题。


0

我在回复中链接了维基页面,但我没有看到那个拉取请求。感谢您的贡献! - Andrés Botero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接