| The following example
Jenkins.instance.pluginManager.plugins.sort(false, {it.shortName}).each {p ->
println(p.shortName);
println(" dependencies:");
println(" unspecified: ${p.dependencies*.shortName.sort()}");
println(" optional: ${p.optionalDependencies*.shortName.sort()}");
println(" mandatory: ${(p.dependencies - p.optionalDependencies)*.shortName.sort()}");
println(" dependents:");
println(" unspecified: ${p.dependents.sort()}");
println(" optional: ${p.optionalDependents.sort()}");
println(" mandatory: ${(p.dependents - p.optionalDependents).sort()}");
}; null
reveals a mess:
antisamy-markup-formatter
dependencies:
unspecified: [bouncycastle-api, command-launcher, jdk-tool, junit]
optional: [bouncycastle-api, command-launcher, jdk-tool, junit]
mandatory: []
dependents:
unspecified: [greenballs, uno-choice]
optional: []
mandatory: [greenballs, uno-choice]
bouncycastle-api
dependencies:
unspecified: [command-launcher, jdk-tool]
optional: [command-launcher, jdk-tool]
mandatory: []
dependents:
unspecified: [antisamy-markup-formatter, credentials, external-monitor-job, greenballs, junit, ldap, mailer, matrix-project, windows-slaves]
optional: []
mandatory: [antisamy-markup-formatter, credentials, external-monitor-job, greenballs, junit, ldap, mailer, matrix-project, windows-slaves]
command-launcher
dependencies:
unspecified: [jdk-tool, script-security]
optional: [jdk-tool]
mandatory: [script-security]
dependents:
unspecified: [antisamy-markup-formatter, bouncycastle-api, config-file-provider, credentials, external-monitor-job, greenballs, junit, ldap, mailer, matrix-project, scm-api, ssh-credentials, structs, uno-choice, windows-slaves]
optional: []
mandatory: [antisamy-markup-formatter, bouncycastle-api, config-file-provider, credentials, external-monitor-job, greenballs, junit, ldap, mailer, matrix-project, scm-api, ssh-credentials, structs, uno-choice, windows-slaves]
config-file-provider
dependencies:
unspecified: [command-launcher, credentials, jdk-tool, ssh-credentials, structs, token-macro]
optional: [cloudbees-folder, command-launcher, jdk-tool]
mandatory: [credentials, ssh-credentials, structs, token-macro]
dependents:
unspecified: [job-dsl]
optional: [job-dsl]
mandatory: []
credentials
dependencies:
unspecified: [bouncycastle-api, command-launcher, jdk-tool, structs]
optional: [bouncycastle-api, command-launcher, jdk-tool]
mandatory: [structs]
dependents:
unspecified: [config-file-provider, ssh-credentials]
optional: []
mandatory: [config-file-provider, ssh-credentials]
display-url-api
dependencies:
unspecified: [jdk-tool]
optional: [jdk-tool]
mandatory: []
dependents:
unspecified: [mailer]
optional: []
mandatory: [mailer]
external-monitor-job
dependencies:
unspecified: [bouncycastle-api, command-launcher, jdk-tool]
optional: [bouncycastle-api, command-launcher, jdk-tool]
mandatory: []
dependents:
unspecified: [greenballs]
optional: []
mandatory: [greenballs]
greenballs
dependencies:
unspecified: [antisamy-markup-formatter, bouncycastle-api, command-launcher, external-monitor-job, jdk-tool, junit, ldap, mailer, matrix-auth, matrix-project, pam-auth, windows-slaves]
optional: [antisamy-markup-formatter, bouncycastle-api, command-launcher, external-monitor-job, jdk-tool, junit, ldap, mailer, matrix-auth, matrix-project, pam-auth, windows-slaves]
mandatory: []
dependents:
unspecified: []
optional: []
mandatory: []
jdk-tool
dependencies:
unspecified: []
optional: []
mandatory: []
dependents:
unspecified: [antisamy-markup-formatter, bouncycastle-api, command-launcher, config-file-provider, credentials, display-url-api, external-monitor-job, greenballs, junit, ldap, mailer, matrix-project, scm-api, script-security, ssh-credentials, structs, uno-choice, windows-slaves]
optional: []
mandatory: [antisamy-markup-formatter, bouncycastle-api, command-launcher, config-file-provider, credentials, display-url-api, external-monitor-job, greenballs, junit, ldap, mailer, matrix-project, scm-api, script-security, ssh-credentials, structs, uno-choice, windows-slaves]
job-dsl
dependencies:
unspecified: [config-file-provider, script-security, structs]
optional: [config-file-provider, configuration-as-code, managed-scripts, vsphere-cloud]
mandatory: [script-security, structs]
dependents:
unspecified: []
optional: []
mandatory: []
junit
dependencies:
unspecified: [bouncycastle-api, command-launcher, jdk-tool, script-security, structs, workflow-api, workflow-step-api]
optional: [bouncycastle-api, command-launcher, jdk-tool]
mandatory: [script-security, structs, workflow-api, workflow-step-api]
dependents:
unspecified: [antisamy-markup-formatter, greenballs, matrix-project]
optional: []
mandatory: [antisamy-markup-formatter, greenballs, matrix-project]
ldap
dependencies:
unspecified: [bouncycastle-api, command-launcher, jdk-tool, mailer]
optional: [bouncycastle-api, command-launcher, jdk-tool]
mandatory: [mailer]
dependents:
unspecified: [greenballs]
optional: []
mandatory: [greenballs]
mailer
dependencies:
unspecified: [bouncycastle-api, command-launcher, display-url-api, jdk-tool]
optional: [bouncycastle-api, command-launcher, jdk-tool]
mandatory: [display-url-api]
dependents:
unspecified: [greenballs, ldap]
optional: []
mandatory: [greenballs, ldap]
matrix-auth
dependencies:
unspecified: []
optional: [cloudbees-folder, configuration-as-code]
mandatory: []
dependents:
unspecified: [greenballs]
optional: []
mandatory: [greenballs]
matrix-project
dependencies:
unspecified: [bouncycastle-api, command-launcher, jdk-tool, junit, script-security]
optional: [bouncycastle-api, command-launcher, jdk-tool]
mandatory: [junit, script-security]
dependents:
unspecified: [greenballs]
optional: []
mandatory: [greenballs]
pam-auth
dependencies:
unspecified: []
optional: []
mandatory: []
dependents:
unspecified: [greenballs]
optional: []
mandatory: [greenballs]
scm-api
dependencies:
unspecified: [command-launcher, jdk-tool, structs]
optional: [command-launcher, jdk-tool]
mandatory: [structs]
dependents:
unspecified: [workflow-api]
optional: []
mandatory: [workflow-api]
script-security
dependencies:
unspecified: [jdk-tool]
optional: [jdk-tool]
mandatory: []
dependents:
unspecified: [command-launcher, job-dsl, junit, matrix-project, uno-choice]
optional: []
mandatory: [command-launcher, job-dsl, junit, matrix-project, uno-choice]
ssh-credentials
dependencies:
unspecified: [command-launcher, credentials, jdk-tool]
optional: [command-launcher, jdk-tool]
mandatory: [credentials]
dependents:
unspecified: [config-file-provider]
optional: []
mandatory: [config-file-provider]
structs
dependencies:
unspecified: [command-launcher, jdk-tool]
optional: [command-launcher, jdk-tool]
mandatory: []
dependents:
unspecified: [config-file-provider, credentials, job-dsl, junit, scm-api, token-macro, workflow-api, workflow-step-api]
optional: []
mandatory: [config-file-provider, credentials, job-dsl, junit, scm-api, token-macro, workflow-api, workflow-step-api]
token-macro
dependencies:
unspecified: [structs, workflow-step-api]
optional: []
mandatory: [structs, workflow-step-api]
dependents:
unspecified: [config-file-provider]
optional: []
mandatory: [config-file-provider]
uno-choice
dependencies:
unspecified: [antisamy-markup-formatter, command-launcher, jdk-tool, script-security]
optional: [command-launcher, jdk-tool, scriptler]
mandatory: [antisamy-markup-formatter, script-security]
dependents:
unspecified: []
optional: []
mandatory: []
windows-slaves
dependencies:
unspecified: [bouncycastle-api, command-launcher, jdk-tool]
optional: [bouncycastle-api, command-launcher, jdk-tool]
mandatory: []
dependents:
unspecified: [greenballs]
optional: []
mandatory: [greenballs]
workflow-api
dependencies:
unspecified: [scm-api, structs, workflow-step-api]
optional: []
mandatory: [scm-api, structs, workflow-step-api]
dependents:
unspecified: [junit]
optional: []
mandatory: [junit]
workflow-step-api
dependencies:
unspecified: [structs]
optional: []
mandatory: [structs]
dependents:
unspecified: [junit, token-macro, workflow-api]
optional: []
mandatory: [junit, token-macro, workflow-api]
First of all, dependencies usually includes those entries in optionalDependencies, but not in all cases. More to the point for this issue, dependents in fact includes optional dependents. Also, optionalDependents for detached plugins lacks implied optional dependencies. Also I think I saw that some of the values change from a Jenkins session in which a plugin is newly installed from the update center and dynamically loaded to a session after the restart. I am removing the newbie-friendly label since it seems to be anything but: the GUI actually looks OK, it is the data model which is all wrong. |