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

Optional extensions are not picked up after installing the optional dependency

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • core
    • None

      Problem statement

      Consider plugins A and B.

      A has an optional dependency to B.

      B exposes an extension point called B.

      A contains an @Extension(optional=true) or an @OptionalExtension(requiresPlugins = "B") (when using the variant plugin)
      and has public class A extends B.

      • Set up a new Jenkins instance
      • Install plugin A
      • Install plugin B
      • Check groovy console ExtensionList.lookup(B.class)
      • An empty list is returned. Expected to see class A singleton.

      After restarting the Jenkins instance, class A singleton is listed properly.

      Prior/related work

          [JENKINS-50336] Optional extensions are not picked up after installing the optional dependency

          Vincent Latombe created issue -
          Vincent Latombe made changes -
          Description Original: h1. Problem statement
          Consider plugin A and B. A has an optional dependency to B.

          B exposes an extension point called B

          A contains an {{@Extension(optional=true)}} or an {{@OptionalExtension(requiresPlugins = "B")}} (when using the [variant plugin|https://github.com/jenkinsci/variant-plugin])
          and has {{public class A extends B}}.

          * Set up a new Jenkins instance
          * Install plugin A
          * Install plugin B
          * Check groovy console ExtensionList.lookup(B.class)
          * An empty list is returned. Expected to see class A singleton.

          After restarting the Jenkins instance, class A singleton is listed properly.

          h1. Prior/related work
          * JENKINS-19976 fixed classloading in this kind of situation
          * JENKINS-19508 is proposing to eliminate this use case altogether
          * JENKINS-49026 is a consequence of this problem
          New: h1. Problem statement
          Consider plugin A and B.

          A has an optional dependency to B.

          B exposes an extension point called B.

          A contains an {{@Extension(optional=true)}} or an {{@OptionalExtension(requiresPlugins = "B")}} (when using the [variant plugin|https://github.com/jenkinsci/variant-plugin])
          and has {{public class A extends B}}.

          * Set up a new Jenkins instance
          * Install plugin A
          * Install plugin B
          * Check groovy console ExtensionList.lookup(B.class)
          * An empty list is returned. Expected to see class A singleton.

          After restarting the Jenkins instance, class A singleton is listed properly.

          h1. Prior/related work
          * JENKINS-19976 fixed classloading in this kind of situation
          * JENKINS-19508 is proposing to eliminate this use case altogether
          * JENKINS-49026 is a consequence of this problem
          Vincent Latombe made changes -
          Description Original: h1. Problem statement
          Consider plugin A and B.

          A has an optional dependency to B.

          B exposes an extension point called B.

          A contains an {{@Extension(optional=true)}} or an {{@OptionalExtension(requiresPlugins = "B")}} (when using the [variant plugin|https://github.com/jenkinsci/variant-plugin])
          and has {{public class A extends B}}.

          * Set up a new Jenkins instance
          * Install plugin A
          * Install plugin B
          * Check groovy console ExtensionList.lookup(B.class)
          * An empty list is returned. Expected to see class A singleton.

          After restarting the Jenkins instance, class A singleton is listed properly.

          h1. Prior/related work
          * JENKINS-19976 fixed classloading in this kind of situation
          * JENKINS-19508 is proposing to eliminate this use case altogether
          * JENKINS-49026 is a consequence of this problem
          New: h1. Problem statement
          Consider plugins *A* and *B*.

          *A* has an optional dependency to *B*.

          *B* exposes an extension point called B.

          *A* contains an {{@Extension(optional=true)}} or an {{@OptionalExtension(requiresPlugins = "B")}} (when using the [variant plugin|https://github.com/jenkinsci/variant-plugin])
          and has {{public class A extends B}}.

          * Set up a new Jenkins instance
          * Install plugin *A*
          * Install plugin *B*
          * Check groovy console {{ExtensionList.lookup(B.class)}}
          * An empty list is returned. Expected to see class *A* singleton.

          After restarting the Jenkins instance, class *A* singleton is listed properly.

          h1. Prior/related work
          * JENKINS-19976 fixed classloading in this kind of situation
          * JENKINS-19508 is proposing to eliminate this use case altogether
          * JENKINS-49026 is a consequence of this problem
          Vincent Latombe made changes -
          Link New: This issue relates to JENKINS-19508 [ JENKINS-19508 ]
          Vincent Latombe made changes -
          Link New: This issue relates to JENKINS-19976 [ JENKINS-19976 ]
          Vincent Latombe made changes -
          Link New: This issue relates to JENKINS-49026 [ JENKINS-49026 ]
          Vincent Latombe made changes -
          Status Original: Open [ 1 ] New: In Progress [ 3 ]
          Vincent Latombe made changes -
          Assignee New: Vincent Latombe [ vlatombe ]
          Vincent Latombe made changes -
          Status Original: In Progress [ 3 ] New: In Review [ 10005 ]
          Vincent Latombe made changes -
          Remote Link New: This issue links to "Core PR #3370 (Web Link)" [ 20320 ]

            vlatombe Vincent Latombe
            vlatombe Vincent Latombe
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: