[ 
https://issues.apache.org/jira/browse/SUREFIRE-1396?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16107883#comment-16107883
 ] 

ASF GitHub Bot commented on SUREFIRE-1396:
------------------------------------------

Github user Tibor17 commented on a diff in the pull request:

    https://github.com/apache/maven-surefire/pull/161#discussion_r130447743
  
    --- Diff: 
maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
 ---
    @@ -2755,7 +2755,16 @@ public Classpath getProviderClasspath()
                 throws ArtifactResolutionException, ArtifactNotFoundException
             {
                 final Map<String, Artifact> pluginArtifactMap = 
getPluginArtifactMap();
    -            Artifact plugin = pluginArtifactMap.get( 
"org.apache.maven.plugins:maven-surefire-plugin" );
    +            Class<?> c = AbstractSurefireMojo.this.getClass();
    +            Artifact plugin;
    +            if ( c.getName().equals( 
"org.apache.maven.plugin.failsafe.IntegrationTestMojo" ) )
    --- End diff --
    
    I guess this is in method `getProviderClasspath()`
    Please split the method in two. First it would call `protected abstract 
Artifact getMojoArtifact()` and then the original statement `return 
dependencyResolver.addProviderToClasspath( pluginArtifactMap, plugin );` where 
`plugin` is `Artifact`. Then force both subclasse to implement 
`getMojoArtifact` which means surefire mojo will implement it as follows:
    `final Map<String, Artifact> pluginArtifactMap = getPluginArtifactMap();
                Artifact plugin = pluginArtifactMap.get( 
"org.apache.maven.plugins:maven-surefire-plugin" );`.


> Provider class path is incorrect for custom provider in Failsafe
> ----------------------------------------------------------------
>
>                 Key: SUREFIRE-1396
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1396
>             Project: Maven Surefire
>          Issue Type: Bug
>            Reporter: Jonathan Bell
>
> Hi,
> When using a custom Surefire provider with Surefire (not Failsafe), the 
> "provider classpath" contains only the provider and surefire-api. However, 
> when using a custom provider with Failsafe, the provider class path ends up 
> including a lot more... it seems like perhaps all plugins that are loaded? 
> This has caused some mayhem for me when using a custom provider in projects 
> that use a specific version of SLF4J... because then failsafe forces 1.5.6 to 
> be loaded (from this process of incorrectly finding the custom provider), 
> causing a crash.
> It is a simple fix (3 lines in AbstractSurefireMojo - it had the name of the 
> Surefire plugin hardcoded, which isn't correct when it's actually Failsafe). 
> I've got a patched fork of master on GitHub 
> (https://github.com/jon-bell/maven-surefire/commit/04f66cdd828d131a028eb400d1ed26fe104fe3f2)
>  that fixes it and an integration test that demonstrates the flaw. I am not 
> 100% sure on the formatting of the integration test (i.e., I am opening a 
> JIRA ticket so that I suppose I can name it under the JIRA issue? How should 
> I specify the current version of surefire in the integration test package?) - 
> if the fix is welcome against master I'd be happy to open a PR on GitHub. I 
> am also happy to merge against a different branch if it's more helpful.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to