[JIRA] [core] (JENKINS-21486) Refuse to load a plugin if dependencies are disabled or outdated

7 views
Skip to first unread message

jglick@cloudbees.com (JIRA)

unread,
Apr 7, 2016, 9:42:05 AM4/7/16
to jenkinsc...@googlegroups.com
Jesse Glick updated an issue
 
Jenkins / Bug JENKINS-21486
Refuse to load a plugin if dependencies are disabled or outdated
Change By: Jesse Glick
Summary: Fail Refuse to load  a plugin if  its  dependencies  doesn't exist  are disabled or outdated
Add Comment Add Comment
 
This message was sent by Atlassian JIRA (v6.4.2#64017-sha1:e244265)
Atlassian logo

scm_issue_link@java.net (JIRA)

unread,
Apr 20, 2016, 2:02:02 AM4/20/16
to jenkinsc...@googlegroups.com
SCM/JIRA link daemon commented on Bug JENKINS-21486
 
Re: Refuse to load a plugin if dependencies are disabled or outdated

Code changed in jenkins
User: Daniel Beck
Path:
changelog.html
core/src/main/java/hudson/PluginManager.java
core/src/main/java/hudson/PluginWrapper.java
test/src/test/java/hudson/PluginManagerTest.java
test/src/test/java/hudson/PluginManagerUtil.java
test/src/test/java/hudson/PluginWrapperTest.java
test/src/test/resources/plugins/dependee-0.0.2.hpi
test/src/test/resources/plugins/depender-0.0.2.hpi
test/src/test/resources/plugins/mandatory-depender-0.0.2.hpi
http://jenkins-ci.org/commit/jenkins/e0828dd7c85f0b0e874823dad625ebb0a6a17cd5
Log:
Revert "[FIXED JENKINS-21486] Merged #2172: enforce plugin dependencies."< /p>

This reverts commit fa39668b814a6c51e7c460f529692b149e835fc0, reversing
changes made to be9bc0dba552e271b47102292fc9f585afaaf212.

scm_issue_link@java.net (JIRA)

unread,
Apr 20, 2016, 2:02:06 AM4/20/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Kohsuke Kawaguchi


Path:
changelog.html
core/src/main/java/hudson/PluginManager.java
core/src/main/java/hudson/PluginWrapper.java
test/src/test/java/hudson/PluginManagerTest.java
test/src/test/java/hudson/PluginManagerUtil.java
test/src/test/java/hudson/PluginWrapperTest.java
test/src/test/resources/plugins/dependee-0.0.2.hpi
test/src/test/resources/plugins/depender-0.0.2.hpi
test/src/test/resources/plugins/mandatory-depender-0.0.2.hpi

http://jenkins-ci.org/commit/jenkins/b396deda7fd6b70557710df275d54d35d8f23cb5
Log:
Merge pull request #2278 from daniel-beck/1.x-JENKINS-34073

Revert "[FIXED JENKINS-21486] Merged #2172: enforce plugin dependenci…

Compare: https://github.com/jenkinsci/jenkins/compare/c51c7dcee272...b396deda7fd6

scm_issue_link@java.net (JIRA)

unread,
Apr 20, 2016, 2:02:06 AM4/20/16
to jenkinsc...@googlegroups.com
SCM/JIRA link daemon resolved as Fixed
 
Change By: SCM/JIRA link daemon
Status: In Progress Resolved
Resolution: Fixed

ssankara@cebglobal.com (JIRA)

unread,
May 25, 2016, 1:59:06 PM5/25/16
to jenkinsc...@googlegroups.com
Sree Sankara reopened an issue
 

I see this issue again with Jenkins 2.6 version...

May 25, 2016 1:43:54 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@63e9f9]: org.springframework.beans.factory.support.DefaultListableBeanFactory@9ac58a
May 25, 2016 1:43:54 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@9ac58a: defining beans [activeDirectory,authenticationManager]; root of factory hierarchy
May 25, 2016 1:43:55 PM org.jenkinsci.main.modules.sshd.SSHD start
INFO: Started SSHD at port 32612
May 25, 2016 1:43:55 PM jenkins.InitReactorRunner$1 onAttained
INFO: Completed initialization
May 25, 2016 1:43:55 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@1f6405c: display name [Root WebApplicationContext]; startup date [Wed May 25 13:43:55 EDT 2016]; root of context hierarchy
May 25, 2016 1:43:55 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@1f6405c]: org.springframework.beans.factory.support.DefaultListableBeanFactory@357129
May 25, 2016 1:43:55 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@357129: defining beans [filter,legacy]; root of factory hierarchy
May 25, 2016 1:43:55 PM hudson.WebAppMain$3 run
INFO: Jenkins is fully up and running
May 25, 2016 1:44:46 PM hudson.plugins.active_directory.ActiveDirectoryUnixAuthenticationProvider resolveGroups
WARNING: Group lookup via Active Directorys LDAP_MATCHING_RULE_IN_CHAIN extension matched users groups but took 21 seconds to run. Switching to recursive lookup for future group lookup queries
May 25, 2016 1:45:18 PM hudson.ExpressionFactory2$JexlExpression evaluate
WARNING: Caught exception evaluating: d.helpFile in /job/DXM-WebCQ-Dev/configure. Reason: java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor243.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125)
at org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectImpl.java:314)
at org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185)
at org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75)
at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83)
at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57)
at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51)
at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80)
at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:74)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:58)
at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
at org.apache.commons.jelly.tags.core.WhenTag.doTag(WhenTag.java:46)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
at org.apache.commons.jelly.tags.core.ChooseTag.doTag(ChooseTag.java:38)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95)
at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95)
at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)
at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)
at org.kohsuke.stapler.jelly.JellyFacet$1.dispatch(JellyFacet.java:95)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:233)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:135)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:126)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:49)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:499)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: hudson/plugins/gradle/Gradle
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
at org.kohsuke.stapler.ClassDescriptor.findMethods(ClassDescriptor.java:148)
at org.kohsuke.stapler.ClassDescriptor.<init>(ClassDescriptor.java:84)
at org.kohsuke.stapler.MetaClass.buildDispatchers(MetaClass.java:106)
at org.kohsuke.stapler.MetaClass.<init>(MetaClass.java:94)
at org.kohsuke.stapler.WebApp.getMetaClass(WebApp.java:203)
at org.kohsuke.stapler.jelly.groovy.GroovyFacet.createRequestDispatcher(GroovyFacet.java:106)
at org.kohsuke.stapler.RequestImpl.getView(RequestImpl.java:257)
at org.kohsuke.stapler.RequestImpl.getView(RequestImpl.java:252)
at hudson.model.Descriptor.getHelpFile(Descriptor.java:742)
at hudson.model.Descriptor.getHelpFile(Descriptor.java:724)
at hudson.model.Descriptor.getHelpFile(Descriptor.java:713)
... 150 more
Caused by: java.lang.ClassNotFoundException: hudson.plugins.gradle.Gradle
at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1376)
at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1326)
at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1079)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 164 more

Change By: Sree Sankara
Resolution: Fixed
Status: Resolved Reopened

ssankara@cebglobal.com (JIRA)

unread,
May 25, 2016, 2:12:52 PM5/25/16
to jenkinsc...@googlegroups.com
Sree Sankara commented on Bug JENKINS-21486
 
Re: Refuse to load a plugin if dependencies are disabled or outdated

Is this working? I see this crashing with the latest 2.6 Version

dbeck@cloudbees.com (JIRA)

unread,
May 25, 2016, 7:34:02 PM5/25/16
to jenkinsc...@googlegroups.com

This wasn't resolved, the stupid bot just resolved it again due to the 'Revert [FIXED JENKINS-21486]" commit message.

/me sighs.

ssankara@cebglobal.com (JIRA)

unread,
May 25, 2016, 8:36:02 PM5/25/16
to jenkinsc...@googlegroups.com

updating it to critical as this breaking jenkins configuration completely. hope this is fine.

ssankara@cebglobal.com (JIRA)

unread,
May 25, 2016, 8:36:06 PM5/25/16
to jenkinsc...@googlegroups.com

dbeck@cloudbees.com (JIRA)

unread,
May 26, 2016, 5:37:02 AM5/26/16
to jenkinsc...@googlegroups.com
Daniel Beck commented on Bug JENKINS-21486
 
Re: Refuse to load a plugin if dependencies are disabled or outdated

Sree Sankara Please note this is merely a robustness improvement. You're likely just facing https://www.jfrog.com/jira/browse/HAP-699 which is an Artifactory Plugin bug. Install Gradle Plugin and it resolves itself.

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:03 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:


core/src/main/java/hudson/PluginManager.java
core/src/main/java/hudson/PluginWrapper.java
test/src/test/java/hudson/PluginManagerTest.java
test/src/test/java/hudson/PluginManagerUtil.java
test/src/test/java/hudson/PluginWrapperTest.java
test/src/test/resources/plugins/dependee-0.0.2.hpi
test/src/test/resources/plugins/depender-0.0.2.hpi
test/src/test/resources/plugins/mandatory-depender-0.0.2.hpi

http://jenkins-ci.org/commit/jenkins/43ddbdfc1cd651e0430289766637a11717494e88
Log:
JENKINS-21486 Fix plugin dependencies resolution

  • Check that dependencies are enabled. A disabled optional dependency
    will not prevent a plugin from loading.
  • Check versions of dependencies declared by a plugin before loading it.
    If any dependency (even optional) is older than what is required,
    then the plugin isn't loaded.

This should prevent use cases where a plugin is loaded but one of its
dependencies is too old so that :

  • its @Extension annotated classes cannot be loaded, causing the full
    Jenkins to blow up with crapload of exceptions which are tedious to
    investigate to understand the root cause.
  • NoSuchMethodError and the likes at runtime even though boot has
    completed.

Version check (for setups where version list is manually crafted but yet
works) can be disabled by starting Jenkins with

-Dhudson.PluginWrapper.dependenciesVersionCheck.enabled=true

Minor fixes done while implementing this change :

  • Fix version parsing in PluginWrapper.Dependency
  • Dynamic plugin load didn't check for disabled flag
This message was sent by Atlassian JIRA (v7.1.7#71011-sha1:2526d7c)
Atlassian logo

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:05 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:

core/src/main/java/hudson/PluginWrapper.java
http://jenkins-ci.org/commit/jenkins/646969b690797bb289a558104109ec1fc92b38cf
Log:
JENKINS-21486 Refactoring

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:05 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:
core/src/main/java/hudson/PluginWrapper.java

core/src/main/resources/hudson/Messages.properties
core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.jelly
http://jenkins-ci.org/commit/jenkins/b8f26b34a29ab3e8d80e8c7be4df2232cee0169e
Log:
JENKINS-21486 Simplify dependency errors model and serve consistent
messages between console and administrative monitor

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:06 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:
core/src/main/java/hudson/PluginWrapper.java
core/src/main/resources/hudson/Messages.properties
core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.jelly

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:06 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:
core/src/main/java/hudson/PluginWrapper.java
core/src/main/resources/hudson/Messages.properties

http://jenkins-ci.org/commit/jenkins/99fa5f7a49ae06063c5306de877e1d5af3a56464
Log:
JENKINS-21486 Fix :ant from daniel and separate failed plugin from
missing

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:07 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:

core/src/main/java/hudson/PluginManager.java
http://jenkins-ci.org/commit/jenkins/8e3c9dadc1b09406ab6e77af33518ee3168470d4
Log:
JENKINS-21486 Mention both long name, short name and version in console

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:07 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:
core/src/main/java/hudson/PluginManager.java

core/src/main/resources/hudson/PluginManager/PluginCycleDependenciesMonitor/message.jelly
http://jenkins-ci.org/commit/jenkins/d8f3bfc8ed0f88e5bff757c0eec921d6c135d5b4
Log:
JENKINS-21486 Cycle monitor should display plugin long name and
version

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:08 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Daniel Beck
Path:
core/src/main/java/hudson/PluginManager.java
core/src/main/java/hudson/PluginWrapper.java
core/src/main/resources/hudson/Messages.properties
core/src/main/resources/hudson/PluginManager/PluginCycleDependenciesMonitor/message.jelly
core/src/main/resources/hudson/PluginWrapper/PluginWrapperAdministrativeMonitor/message.jelly
test/src/test/java/hudson/PluginManagerTest.java
test/src/test/java/hudson/PluginManagerUtil.java
test/src/test/java/hudson/PluginWrapperTest.java
test/src/test/java/hudson/model/UsageStatisticsTest.java
test/src/test/resources/plugins/dependee-0.0.2.hpi
test/src/test/resources/plugins/depender-0.0.2.hpi
test/src/test/resources/plugins/mandatory-depender-0.0.2.hpi
http://jenkins-ci.org/commit/jenkins/b27b15025748b37b018351256d2bc1d21e1b460a
Log:
Merge pull request #2487 from Vlatombe/JENKINS-21486

JENKINS-21486 Fix plugin dependencies resolution, second round.

Compare: https://github.com/jenkinsci/jenkins/compare/86e14ddffc5e...b27b15025748

scm_issue_link@java.net (JIRA)

unread,
Jul 30, 2016, 8:51:08 AM7/30/16
to jenkinsc...@googlegroups.com

Code changed in jenkins
User: Vincent Latombe
Path:
test/src/test/java/hudson/model/UsageStatisticsTest.java
http://jenkins-ci.org/commit/jenkins/dff8e806b9466652a351dd7fb7f742b6698140db
Log:
JENKINS-21486 Only consider plugins detached before the current
version

vincent@latombe.net (JIRA)

unread,
Aug 24, 2016, 3:26:02 AM8/24/16
to jenkinsc...@googlegroups.com
Vincent Latombe resolved as Fixed
 
Change By: Vincent Latombe
Status: Reopened Resolved
Resolution: Fixed

jnord@cloudbees.com (JIRA)

unread,
Oct 26, 2016, 5:58:02 AM10/26/16
to jenkinsc...@googlegroups.com
James Nord commented on Bug JENKINS-21486
 
Re: Refuse to load a plugin if dependencies are disabled or outdated

This fix seems to cause a regression when using optional dependencies and the variant plugin.
previously when tagged with OptionalExtension you could use a class that was only in a specific version of a plugin and then the code that depended on the "newer" plugin than was installed would not activate.

Whilst this is ok for the main running of Jenkins - it causes a massive headache when running tests and depending on a version of a plugin that is using newer optional dependencies than provided by Jenkins (ie previously bundled).

dbeck@cloudbees.com (JIRA)

unread,
Oct 26, 2016, 7:04:02 AM10/26/16
to jenkinsc...@googlegroups.com

James Nord Does this apply to (at)Extension(optional = true) the same way?

vincent@latombe.net (JIRA)

unread,
Oct 26, 2016, 7:11:03 AM10/26/16
to jenkinsc...@googlegroups.com

James Nord see this thread for the full background of the implementation regarding dealing with obsolete optional dependencies.

jnord@cloudbees.com (JIRA)

unread,
Oct 26, 2016, 7:29:04 AM10/26/16
to jenkinsc...@googlegroups.com

Daniel Beck yes - but the (at)Extension(optional = true) has no way to infer a version.
(infact I can forsee a version of the Variant plugin that allows to specify a specific version of a plugin.)

Mainly a headache at the moment due to what appears to be a bug in JenkinsRule (or the hpi plugin) and not loading the optional dependencies correctly for dependant plugins. (e.g. something like JENKINS-20412) - but to be investigated and filed separately.

jglick@cloudbees.com (JIRA)

unread,
Oct 26, 2016, 3:37:02 PM10/26/16
to jenkinsc...@googlegroups.com

JenkinsRule (or the hpi plugin) and not loading the optional dependencies correctly for dependant plugins

I think all you are seeing is that Maven does not traverse transitive dependencies past <optional>true</optional>.

Anyway I am not sure I am following what issue you are seeing.

newer optional dependencies than provided by Jenkins (ie previously bundled)

Are you referring to split plugins, à la ClassicPluginStrategy.DETACHED_LIST? Or what? It is up to the person defining tests to ensure that the plugins available in Maven’s test classpath are mutually compatible; if something is too old, you are obliged to either add <exclusions> for inappropriate dependency trails, or add explicit dependencies on a newer version. Now we may want to provide a friendlier system in the future, but for now that is how it is.

Reply all
Reply to author
Forward
0 new messages