The problem here is that a plugin that's executed from a forked lifecycle doesn't get the pluginManagement information injected into its configuration. The reason is the lifecycle executor doesn't use the executionProject (the forked lifecycle's version of the project instance) when it verifies the plugin in the plugin manager. This means the pluginManagement information is never injected into the executionProject, but ONLY into the main project instance (for a given POM, I know it's confusing). Later, when the plugin manager tries to use the executionProject to configure the plugin, it's missing critical information from the pluginManagement section.

This is a particular problem when reports like the javadoc:test-aggregate report runs. This report forks the lifecycle up to the generate-test-sources phase, which includes compile. When the project sources use 1.5 syntax, such as generics, the 1.5 source/target configuration for the compiler plugin isn't injected into the forked lifecycle, and the compile phase fails.