问题描述:java
项目开始启动的时候,没问题。工具
修改代码后jetty启动报错,说是ActionKey已经存在了,检查后发现,RouteBind类的config()中。debug
List<Class<? extends Controller>> controllerClasses = ClassSearchKit.of(Controller.class) .includepaths(includeClassPaths).search();
问题出在这段代码。code
debug进去WebAppClassLoader类中的getResources()方法里面。发现。rem
classes路径保存了两个同样的,致使后面扫描的时候,class文件保存了两份。
get
进入ClassSearchKit 类里面查看search()方法it
return extraction(target, classFileList);
这个方法返回了最终的classFileList。io
启动时:class
修改代码重启时:List
classFileList中每一个controller都重复了。
因此,写一个工具类,将生成的list中,重复的Controller去掉就能够了。
public class CollectionKit { public static List<Class<? extends Controller>> removeDuplicate(List<Class<? extends Controller>> list){ HashSet<Class<? extends Controller>> h = new HashSet<Class<? extends Controller>>(list); list.clear(); list.addAll(h); return list; } }
以后RouteBind类的config()方法掉调用一下就能够了。
public void config() { List<Class<? extends Controller>> controllerClasses = ClassSearchKit .of(Controller.class).includepaths(includeClassPaths).search(); controllerClasses=CollectionKit.removeDuplicate(controllerClasses); ControllerKey controllerKey = null; …… ……
问题解决。