maven surefire:是马车吗?

maven surefire:是马车吗?,maven,classnotfoundexception,surefire,Maven,Classnotfoundexception,Surefire,注意:我已经为此提交了一份正式的JIRA文件,因为我很确定这是maven中的一个bug。这个问题的答案我将在这两个地方进行评估和更新,因为我很确定其他人在复杂代码基础上执行排除过滤器时会遇到这个问题 我的完整pom文件在这里供参考:(这是我在源代码中使用的hadoop版本) 我在surefire中发现了一些非常奇怪的行为: mvn test 在“excludes”标记下使用以下排除过滤器: 换句话说:当排除筛选器与任何内容都不匹配时,排除筛选器可能会导致NoClassDefFoundError

注意:我已经为此提交了一份正式的JIRA文件,因为我很确定这是maven中的一个bug。这个问题的答案我将在这两个地方进行评估和更新,因为我很确定其他人在复杂代码基础上执行排除过滤器时会遇到这个问题

我的完整pom文件在这里供参考:(这是我在源代码中使用的hadoop版本)

我在surefire中发现了一些非常奇怪的行为:

mvn test
在“excludes”标记下使用以下排除过滤器:

换句话说:当排除筛选器与任何内容都不匹配时,排除筛选器可能会导致NoClassDefFoundError消息

我的问题:maven surefire排除过滤器如何导致ClassNotFound错误出现?如果有的话,我希望它能减少加载类的次数,而不是增加

仅供参考,这里有一些颜色:类本身是一个内部类:

public static final class EmptyRequestProto extends com.google.protobuf.GeneratedMessage

我见过‎, 它可能是相关的,但我发现我的“排除”过滤器与代码库中的任何类都不匹配,它可能是不同的。

这是我的surefire配置。我包含了一个排除项,它肯定与任何内容都不匹配。这对我有用。我无法复制你的例外情况。也许你在pom中错误地配置了它

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>2.16</version>
     <configuration>
        <excludes>
            <exclude>abcdefghijk</exclude>
        </excludes>
            <forkMode>once</forkMode>
     </configuration>
</plugin>

org.apache.maven.plugins
maven surefire插件
2.16
abcdefghijk
一旦

请显示完整的pom文件。此外,您的项目是否有静态内部类?该bug由静态内部类触发,如classnotfound异常。我认为所有的类都会在运行时被扫描并以某种方式被解析,然后当它们被surefire中的某个魔术检查时,就会尝试加载一个类,这会失败,因为FQ类名丢失。或者类似的东西。参见与此相关的jira。但是感谢您在一个更简单的系统上测试这个,这有助于证实我的怀疑。我非常确定我有内部静态类。但为了确定我明天必须检查,我的项目中肯定没有静态的内部类。我纠正了这一点,并在我的源代码和测试类中包含了一些赝品。当然火还是管用的。
public static final class EmptyRequestProto extends com.google.protobuf.GeneratedMessage
<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>2.16</version>
     <configuration>
        <excludes>
            <exclude>abcdefghijk</exclude>
        </excludes>
            <forkMode>once</forkMode>
     </configuration>
</plugin>