Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-9679

NoClassDefFoundError on Base64 when launching an headless slave with -jnlpCredential option

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • core
    • Jenkins 1.411 / MacOS X / JDK 1.6.0_24
      Jenkins 1.412 / Master: Ubuntu 10.04, / Slave: Windows Server 2008 x64, JDK 1.6.0_20
      Jenkins 1.424.2 / Master: CentOS 5.5, / Slave: Windows Server 2008 R2 x64, JDK 1.6.0_21

      When launching a headless slave, a NoClassDefFoundError on org/apache/commons/codec/binary/Base64 is raised when specifying the -jnlpCredential option:

      $ java -jar slave.jar -jnlpUrl <url> -jnlpCredentials <user>:<password>
      Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Base64
      at hudson.remoting.Launcher.parseJnlpArguments(Launcher.java:221)
      at hudson.remoting.Launcher.run(Launcher.java:192)
      at hudson.remoting.Launcher.main(Launcher.java:168)
      Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.binary.Base64
      at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
      ... 3 more

          [JENKINS-9679] NoClassDefFoundError on Base64 when launching an headless slave with -jnlpCredential option

          Olivier Mansion created issue -

          Tiago Pais added a comment -

          Hi,

          I have this same problem on a Windows Server 2008 slave connecting to a Linux master.
          It's a x64 machine.

          Do anyone knows of a fast workaround? Like adding http://commons.apache.org/codec/ somewhere?

          Thanks,

          Tiago

          Tiago Pais added a comment - Hi, I have this same problem on a Windows Server 2008 slave connecting to a Linux master. It's a x64 machine. Do anyone knows of a fast workaround? Like adding http://commons.apache.org/codec/ somewhere? Thanks, Tiago

          Mariusz S added a comment -

          I have this error on W2008 with Tomcat 7 secured by SSL. Installing proper SSL cert in java keychain resolved this.

          Mariusz S added a comment - I have this error on W2008 with Tomcat 7 secured by SSL. Installing proper SSL cert in java keychain resolved this.
          Tiago Pais made changes -
          Environment Original: Jenkins 1.411 / MacOS X / JDK 1.6.0_24 New: Jenkins 1.411 / MacOS X / JDK 1.6.0_24
          Jenkins 1.412 / Master: Ubuntu 10.04, / Slave: Windows Server 2008 x64, JDK 1.6.0_20

          Adding commons-codec-1.5.jar in the classpath worked for us:

          $ java -jar slave.jar -cp /path/to/commons-codec-1.5.jar -jnlpUrl <url> -jnlpCredentials <user>:<password>

          Olivier Mansion added a comment - Adding commons-codec-1.5.jar in the classpath worked for us: $ java -jar slave.jar -cp /path/to/commons-codec-1.5.jar -jnlpUrl <url> -jnlpCredentials <user>:<password>

          Tiago Pais added a comment - - edited

          I was using -noCertificateCheck so there was no issue with SSL certificates. Either way thanks for the suggestion.

          Meanwhile i was able to find a workaround:

          1. After installing Hudson Slave as a service I got to the local (on Slave) directory and found jenkins-slave.xml
          2. I edit the <arguments> entry to add the necessary jar to the invocation classpath:
            1. commons-codec-1.5.jar is the jar missing and you can grab it here (just unzip and it's there)
            2. Put commons-codec-1.5.jar in the local slave directory (inside a newly created lib directory)
            3. Change the <arguments> entry to add commons-codec-1.5.jar to the classpath like this -Xrs -jar "%BASE%\slave.jar" -jnlpUrl <url_to_jnlp> -classpath "%BASE%\lib\commons-codec-1.5.jar" -jnlpCredentials <user>:<password> -noCertificateCheck
          3. Start service in windows and monitor jenkins-slave.err.log

          Hope it helps,

          Tiago

          Olivier Mansion found it pretty much at the same time. Thanks anyway

          Tiago Pais added a comment - - edited I was using -noCertificateCheck so there was no issue with SSL certificates. Either way thanks for the suggestion. Meanwhile i was able to find a workaround: After installing Hudson Slave as a service I got to the local (on Slave) directory and found jenkins-slave.xml I edit the <arguments> entry to add the necessary jar to the invocation classpath : commons-codec-1.5.jar is the jar missing and you can grab it here (just unzip and it's there) Put commons-codec-1.5.jar in the local slave directory (inside a newly created lib directory) Change the <arguments> entry to add commons-codec-1.5.jar to the classpath like this -Xrs -jar "%BASE%\slave.jar" -jnlpUrl <url_to_jnlp> -classpath "%BASE%\lib\commons-codec-1.5.jar" -jnlpCredentials <user>:<password> -noCertificateCheck Start service in windows and monitor jenkins-slave.err.log Hope it helps, Tiago Olivier Mansion found it pretty much at the same time. Thanks anyway
          hiroyoshi kasai made changes -
          Environment Original: Jenkins 1.411 / MacOS X / JDK 1.6.0_24
          Jenkins 1.412 / Master: Ubuntu 10.04, / Slave: Windows Server 2008 x64, JDK 1.6.0_20
          New: Jenkins 1.411 / MacOS X / JDK 1.6.0_24
          Jenkins 1.412 / Master: Ubuntu 10.04, / Slave: Windows Server 2008 x64, JDK 1.6.0_20
          Jenkins 1.424.2 / Master: CentOS 5.5, / Slave: Windows Server 2008 R2 x64, JDK 1.6.0_21

          Would love to see this addressed or elevated in priority - this is a critical component of putting together a master/slave cluster, and has been known for just about a year now. I say this without being able to fix it myself of course but this would be a great help to people setting up multi configuration systems.

          Liam Staskawicz added a comment - Would love to see this addressed or elevated in priority - this is a critical component of putting together a master/slave cluster, and has been known for just about a year now. I say this without being able to fix it myself of course but this would be a great help to people setting up multi configuration systems.
          Harry G. made changes -
          Link New: This issue is related to JENKINS-3734 [ JENKINS-3734 ]

          Harry G. added a comment -

          This is really somewhat clumsy and non intuitive, this foils the simple jnlp slave concept...
          Wouldn't it be easy to deliver commons-codec with the slave and set it in the cp by default?

          Harry G. added a comment - This is really somewhat clumsy and non intuitive, this foils the simple jnlp slave concept... Wouldn't it be easy to deliver commons-codec with the slave and set it in the cp by default?

            jglick Jesse Glick
            mansion Olivier Mansion
            Votes:
            15 Vote for this issue
            Watchers:
            19 Start watching this issue

              Created:
              Updated:
              Resolved: