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.