From 7cab8d8bd873f2341acab088e5bdad9c3e35640b Mon Sep 17 00:00:00 2001 From: Mike Samuel Date: Thu, 10 Mar 2016 15:39:37 -0500 Subject: [PATCH] use a BasicComponentConfigurator instead of asking plexus to inject one because it injects the wrong kind when debug trace is off --- .../security/fences/ConfigurationImport.java | 7 ++++++- .../security/fences/FencesMavenEnforcerRule.java | 15 +++++++++++++-- .../fences/FencesMavenEnforcerRuleTest.java | 7 +------ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/google/security/fences/ConfigurationImport.java b/src/main/java/com/google/security/fences/ConfigurationImport.java index 1eb8440..b96c85d 100644 --- a/src/main/java/com/google/security/fences/ConfigurationImport.java +++ b/src/main/java/com/google/security/fences/ConfigurationImport.java @@ -56,7 +56,7 @@ void configure( + " from " + key, ex); } - // TODO: is this right. + // TODO: Is this right? // Newer versions have a MavenProject.getClassRealm() says // """ // Warning: This is an internal utility method that is only public for @@ -64,7 +64,12 @@ void configure( // this method can be changed or deleted without prior notice and must // not be used by plugins. // """ + // so trying to get it directly seems dodgy. ClassRealm realm = null; + ClassLoader cl = configurable.getClass().getClassLoader(); + if (cl instanceof ClassRealm) { + realm = (ClassRealm) cl; + } try { configurator.configureComponent(configurable, configuration, realm); diff --git a/src/main/java/com/google/security/fences/FencesMavenEnforcerRule.java b/src/main/java/com/google/security/fences/FencesMavenEnforcerRule.java index e0bf611..b6ec96a 100644 --- a/src/main/java/com/google/security/fences/FencesMavenEnforcerRule.java +++ b/src/main/java/com/google/security/fences/FencesMavenEnforcerRule.java @@ -13,6 +13,7 @@ import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; import org.codehaus.classworlds.ClassRealm; +import org.codehaus.plexus.component.configurator.BasicComponentConfigurator; import org.codehaus.plexus.component.configurator.ComponentConfigurator; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; @@ -98,8 +99,18 @@ public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException { resolver = (ArtifactResolver) helper.getComponent(ArtifactResolver.class); treeBuilder = (DependencyTreeBuilder) helper.getComponent(DependencyTreeBuilder.class); - configurator = (ComponentConfigurator) helper.getComponent( - ComponentConfigurator.class); + if (false) { + // This seems "the right way" since plexus is supposed to inject + // dependencies, but when run without -X to turn on debugging, + // we get a MapOrientedComponentConfigurator which cannot configure + // this object. + // http://stackoverflow.com/questions/35919157/using-xmlplexusconfiguration-to-import-more-configuration-for-a-bean-style-maven + // explains the symptoms. + configurator = (ComponentConfigurator) helper.getComponent( + ComponentConfigurator.class); + } else { + configurator = new BasicComponentConfigurator(); + } } catch (ComponentLookupException ex) { throw new EnforcerRuleException( "Failed to locate component: " + ex.getLocalizedMessage(), ex); diff --git a/src/test/java/com/google/security/fences/FencesMavenEnforcerRuleTest.java b/src/test/java/com/google/security/fences/FencesMavenEnforcerRuleTest.java index ea99787..b993dcb 100644 --- a/src/test/java/com/google/security/fences/FencesMavenEnforcerRuleTest.java +++ b/src/test/java/com/google/security/fences/FencesMavenEnforcerRuleTest.java @@ -144,12 +144,7 @@ public final void testImports() throws Exception { verifyTestProject( "test-imports-project", Result.FAIL, - // HACK: If this is QUIET, then the test fails with an exception - // claiming the configurator is a MapOrientedConfigurator which - // expects a MapOrientedComponent to configure. - // See http://stackoverflow.com/questions/35919157 - // /importing-more-maven-configuration-from-xml-files - Debug.VERBOSE, + Debug.QUIET, "BUILD FAILURE",