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

add a new classloader ("a la" child first for plugin)

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Component/s: core
    • Labels:
      None

      Description

      In order to implement a maven3-plugin, we need a new class loader mechanism to mask current maven classes which are in core (through maven-plugin).

      1. ChildFirstClassLoader.java
        4 kB
        olamy
      2. ChildFirstClassLoader.java
        3 kB
        Kohsuke Kawaguchi
      3. HUDSON-5360
        7 kB
        olamy
      4. HUDSON-5360
        8 kB
        olamy
      5. HUDSON-5360
        9 kB
        olamy

        Issue Links

          Activity

          Hide
          kohsuke Kohsuke Kawaguchi added a comment -

          IIUC, I don't think this works. URLClassLoader that's responsible for loading classes from the plugin doesn't have any parent, so if plugin classes refer to classes in Hudson core, for example, then those references will fail to resolve.

          Show
          kohsuke Kohsuke Kawaguchi added a comment - IIUC, I don't think this works. URLClassLoader that's responsible for loading classes from the plugin doesn't have any parent, so if plugin classes refer to classes in Hudson core, for example, then those references will fail to resolve.
          Hide
          kohsuke Kohsuke Kawaguchi added a comment -

          A bit more compact implementation of the child-first classloader, as a result of my looking at the patch. For the reason I put in my earlier comment, this doesn't really work either.

          Show
          kohsuke Kohsuke Kawaguchi added a comment - A bit more compact implementation of the child-first classloader, as a result of my looking at the patch. For the reason I put in my earlier comment, this doesn't really work either.
          Hide
          olamy olamy added a comment -

          here an other proposal.
          This works here with a maven3-plugin.
          If you want I can checkin this last one (but it's a very POC and very in PROGRESS work ).

          Show
          olamy olamy added a comment - here an other proposal. This works here with a maven3-plugin. If you want I can checkin this last one (but it's a very POC and very in PROGRESS work ).
          Hide
          zlosch zlosch added a comment - - edited

          From some mail traffic on hudson-dev I guess that it's a blocker to the issue I opened for Maven 3 compatibility.

          Show
          zlosch zlosch added a comment - - edited From some mail traffic on hudson-dev I guess that it's a blocker to the issue I opened for Maven 3 compatibility.
          Hide
          azgard azgard added a comment -

          I think also this Bug is a blocker.

          After the maven 3.0. beta1 release more and more developer would switch.

          Please check it.

          Show
          azgard azgard added a comment - I think also this Bug is a blocker. After the maven 3.0. beta1 release more and more developer would switch. Please check it.
          Hide
          kohsuke Kohsuke Kawaguchi added a comment -

          The proposed patch doesn't make sense to me — that is, PluginFirstClassLoader is not doing anything useful, because its child URLClassLoader and its "2nd parent" URLClassLoader has the exact same content, the former always load everything that the latter can load. Plus you still have the same problem of the 2nd URLClassLoader not having any parent.

          I don't think you can create a child-first classloader by delegating to another URLClassLoader. You really need your own URLClassLoader-like implementation (for example AntClassLoader might be a good start) that does child-first.

          Show
          kohsuke Kohsuke Kawaguchi added a comment - The proposed patch doesn't make sense to me — that is, PluginFirstClassLoader is not doing anything useful, because its child URLClassLoader and its "2nd parent" URLClassLoader has the exact same content, the former always load everything that the latter can load. Plus you still have the same problem of the 2nd URLClassLoader not having any parent. I don't think you can create a child-first classloader by delegating to another URLClassLoader. You really need your own URLClassLoader-like implementation (for example AntClassLoader might be a good start) that does child-first.
          Hide
          scm_issue_link SCM/JIRA link daemon added a comment -

          Code changed in hudson
          User: : olamy
          Path:
          trunk/hudson/tools/maven-hpi-plugin/src/main/java/org/jvnet/hudson/maven/plugins/hpi/AbstractHpiMojo.java
          http://jenkins-ci.org/commit/33086
          Log:
          adding a new Manifest entry to be able to play with JENKINS-5360

          Show
          scm_issue_link SCM/JIRA link daemon added a comment - Code changed in hudson User: : olamy Path: trunk/hudson/tools/maven-hpi-plugin/src/main/java/org/jvnet/hudson/maven/plugins/hpi/AbstractHpiMojo.java http://jenkins-ci.org/commit/33086 Log: adding a new Manifest entry to be able to play with JENKINS-5360
          Hide
          olamy olamy added a comment -

          here a new patch.
          A work in progress (or POC which needs a lot of more jobs regarding maven 3 in hudson is here : http://github.com/olamy/hudson-maven3-support

          Show
          olamy olamy added a comment - here a new patch. A work in progress (or POC which needs a lot of more jobs regarding maven 3 in hudson is here : http://github.com/olamy/hudson-maven3-support
          Hide
          olamy olamy added a comment -

          a patch with more help methods (getURLs returning jars)

          Show
          olamy olamy added a comment - a patch with more help methods (getURLs returning jars)
          Hide
          scm_issue_link SCM/JIRA link daemon added a comment -

          Code changed in hudson
          User: : olamy
          Path:
          trunk/hudson/main/core/pom.xml
          trunk/hudson/main/core/src/main/java/hudson/ClassicPluginStrategy.java
          trunk/hudson/main/core/src/main/java/hudson/PluginFirstClassLoader.java
          trunk/hudson/main/core/src/main/java/hudson/security/Permission.java
          http://jenkins-ci.org/commit/35076
          Log:
          JENKINS-5360 add a new classloader ("a la" child first for plugin)

          Show
          scm_issue_link SCM/JIRA link daemon added a comment - Code changed in hudson User: : olamy Path: trunk/hudson/main/core/pom.xml trunk/hudson/main/core/src/main/java/hudson/ClassicPluginStrategy.java trunk/hudson/main/core/src/main/java/hudson/PluginFirstClassLoader.java trunk/hudson/main/core/src/main/java/hudson/security/Permission.java http://jenkins-ci.org/commit/35076 Log: JENKINS-5360 add a new classloader ("a la" child first for plugin)
          Hide
          scm_issue_link SCM/JIRA link daemon added a comment -

          Code changed in hudson
          User: : olamy
          Path:
          trunk/www/changelog.html
          http://jenkins-ci.org/commit/35077
          Log:
          JENKINS-5360 update changelog

          Show
          scm_issue_link SCM/JIRA link daemon added a comment - Code changed in hudson User: : olamy Path: trunk/www/changelog.html http://jenkins-ci.org/commit/35077 Log: JENKINS-5360 update changelog
          Hide
          dogfood dogfood added a comment -

          Integrated in hudson_main_trunk #287
          JENKINS-5360 add a new classloader ("a la" child first for plugin)

          olamy :
          Files :

          • /trunk/hudson/main/core/src/main/java/hudson/security/Permission.java
          • /trunk/hudson/main/core/pom.xml
          • /trunk/hudson/main/core/src/main/java/hudson/PluginFirstClassLoader.java
          • /trunk/hudson/main/core/src/main/java/hudson/ClassicPluginStrategy.java
          Show
          dogfood dogfood added a comment - Integrated in hudson_main_trunk #287 JENKINS-5360 add a new classloader ("a la" child first for plugin) olamy : Files : /trunk/hudson/main/core/src/main/java/hudson/security/Permission.java /trunk/hudson/main/core/pom.xml /trunk/hudson/main/core/src/main/java/hudson/PluginFirstClassLoader.java /trunk/hudson/main/core/src/main/java/hudson/ClassicPluginStrategy.java

            People

            • Assignee:
              olamy olamy
              Reporter:
              olamy olamy
            • Votes:
              6 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: