The Jenkins core BOM currently defines versions for
spotbugs-annotations, jcip-annotations, and
access-modifier-annotation, and core ships JARs for
spotbugs-annotations and access-modifier-annotation (but not
jcip-annotations, which is inconsistent). plugin-pom depends on
spotbugs-annotations at version 4.5.1 (which doesn't make sense
because it also imports the core BOM which defines this version
already) with scope=provided (which makes sense because core ships the
JAR) and optional=true (which makes sense because this isn't needed at
runtime). plugin-pom depends on jcip-annotations without an explicit
version (which makes sense because a version is already defined in the
core BOM which is imported by plugin-pom) with scope=provided (which
doesn't make sense because core doesn't ship the JAR) and
optional=true (which makes sense because this isn't needed at
runtime). plugin-pom depends on access-modifier-annotation at version
1.25 (which doesn't make sense because it also imports the core BOM
which defines this version already), with scope=provided (which makes
sense because core ships the JAR) and optional=false (which doesn't
make sense because this isn't needed at runtime).

Clearly this is a mess. But how should we fix it? I can see us going
in two different directions.

1) We could remove spotbugs-annotations, jcip-annotations, and
access-modifier-annotation from the core BOM and stop shipping the
JARs in core. In plugin-pom, we'd depend on a specific version of each
of these without scope=provided (because these aren't shipped by core)
but with optional=true (because they aren't needed at runtime). This
means plugins would get the versions defined in the plugin parent POM.

2) We could also keep spotbugs-annotations, jcip-annotations, and
access-modifier-annotation in the core BOM, continue shipping the JARs
in core (adding jcip-annotations), and remove the dependency on
specific versions from plugin-pom (thus getting the version from the
core BOM). We'd set scope=provided (because they would be shipped by
core) and optional=true (because they aren't needed at runtime). This
means plugins would get the versions corresponding to their core
baseline.

Does anyone have a preference as to which direction we should go? I
suppose I have a slight preference for the former, because most
plugins update their plugin parent POM more often than their core
baseline, so it would be easier to push out changes to plugins if we
went in that direction.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/CAFwNDjqkfW2f_3YK1%2BWtMP_AGAjXNcpU3%2B%3DPc7xHdWWNSgR6KQ%40mail.gmail.com.

Reply via email to