• java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter


      今天想写个随笔,最近经常遇到使用junit的时候报java.lang.NoClassDefFoundError,今天算是恍然大悟了,原来junit虽然在gradle里面配置了,也在Project and External Dependencies中看到了junit的jar包,并能在这个junit的jar包里面找到org/junit/runner/manipulation/Filter这个类,但是run as junit test的时候就偏偏要报java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter。

      以为是gradle配置问题,testImplementation、implementation、api都不行  

      后来想想,出现这种情况无外乎gradle中引入的jar包(即Project and External Dependencies中的jar包)在run as junit test的时候并没有被jvm加载,所以才会出现这种现象,解决办法就是在build path 中add library,加入junit

      下面附上在main里面打出已加载的class:

    package proxy;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Proxy;
    import java.util.Vector;
    
    import org.junit.Test;
    
    /**
    * Created by 136187300@qq.com on 2018年6月9日.
    */
    
    public class TestProxy {
    
    	@Test
    	public void test1() {
    		
    		TestLog testLog = new TestLogImpl();
    		TestLogInterceptor testLogInterceptor = new TestLogInterceptor();
    		testLogInterceptor.setTarget(testLog);
    		TestLog proxy = (TestLog)Proxy.newProxyInstance(testLog.getClass().getClassLoader()
    				, testLog.getClass().getInterfaces(), testLogInterceptor);
    		proxy.print();
    	}
    	
    	public static void main(String[] args) {
    		TestLog testLog = new TestLogImpl();
    		TestLogInterceptor testLogInterceptor = new TestLogInterceptor();
    		testLogInterceptor.setTarget(testLog);
    		TestLog proxy = (TestLog)Proxy.newProxyInstance(testLog.getClass().getClassLoader()
    				, testLog.getClass().getInterfaces(), testLogInterceptor);
    		proxy.print();
    		try {
    			new TestProxy().printClass();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public void printClass() throws Exception {
    		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            Class cla = classLoader.getClass();
            while (cla != ClassLoader.class)
                cla = cla.getSuperclass();
            Field field = cla.getDeclaredField("classes");
            field.setAccessible(true);
            Vector v = (Vector) field.get(classLoader);
            for (int i = 0; i < v.size(); i++) {
                System.out.print(((Class)v.get(i)).getName()+",");
                if(i%10 == 0)System.out.println("");
            }
    	}
    }
    

      

      

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/xiaodebing/p/9164675.html
Copyright © 2020-2023  润新知