diff --git a/ContentGrabbingJi-Event/pom.xml b/ContentGrabbingJi-Event/pom.xml new file mode 100644 index 0000000..c45cf82 --- /dev/null +++ b/ContentGrabbingJi-Event/pom.xml @@ -0,0 +1,32 @@ + + + + + + ContentGrabbingJi + net.lamgc + 3.0.0-alpha-SNAPSHOT + + 4.0.0 + + ContentGrabbingJi-Event + + + \ No newline at end of file diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/AbstractEventObject.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/AbstractEventObject.java new file mode 100644 index 0000000..8697cc9 --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/AbstractEventObject.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import java.util.UUID; + +/** + * 抽象事件对象. + *

已完成对 {@link EventObject#getEventId()} 的实现. + * @author LamGC + */ +public abstract class AbstractEventObject implements EventObject { + + private final UUID eventId = UUID.randomUUID(); + + @Override + public UUID getEventId() { + return eventId; + } + +} diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/Cancelable.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/Cancelable.java new file mode 100644 index 0000000..53b835e --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/Cancelable.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import java.util.Observer; + +/** + * 可取消接口. + *

实现了该接口的事件可对其处理进行取消. + *

取消状态不可撤回. + * @author LamGC + */ +public interface Cancelable { + + /** + * 检查事件是否已被取消. + * @return 如果事件已被取消, 返回 true. + */ + boolean canceled(); + + /** + * 注册事件取消监听器. + *

注意: 如果发生取消事件, 无论 {@link java.util.Observable} 是否为事件对象本身, 参数 {@code arg} 都必须传递事件对象自身! + * @param cancelObserver 观察者对象. + * @throws UnsupportedOperationException 当该可取消对象不支持 {@link java.util.Observable} 时抛出, + * 既然不支持观察取消事件, 那么 {@link #observableCancel()} 应当返回 {@code false}, 否则该方法不允许抛出该异常. + */ + void registerCancelObserver(Observer cancelObserver) throws UnsupportedOperationException; + + /** + * 是否可观察取消事件. + *

如果本方法返回 {@code true}, + * 那么 {@link #registerCancelObserver(Observer)} 不允许抛出 {@link UnsupportedOperationException} 异常. + * @return 如果可以, 返回 true. + */ + boolean observableCancel(); + +} diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventExecutor.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventExecutor.java new file mode 100644 index 0000000..5072944 --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventExecutor.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +/** + * 事件执行器. + * @author LamGC + */ +public interface EventExecutor { + + /** + * 执行事件. + * @param event 事件对象. + */ + void execute(EventObject event); + + /** + * 是否为异步事件执行器. + * @return 如果为异步事件执行器, 返回 {@code true}, 如果为同步事件执行器, 返回 {@code false}. + */ + boolean isAsync(); + +} diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventHandler.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventHandler.java new file mode 100644 index 0000000..8090350 --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventHandler.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 事件处理器注解. + *

标记了该注解的方法, 如符合处理方法条件, 则会被 {@link EventHandlerRegistry} 注册为事件处理方法. + * @author LamGC + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface EventHandler { + + /** + * 是否接受事件对象的子类. + *

当该选项为 {@code true} 时, 子类事件也会传递到该方法进行处理. + * 例如事件 Parent, 和它的子类 Child, 处理方法: {@code handler(Parent event)}; + * 如果该选项为 {@code true}, 那么 Child 也会传递到该方法进行处理, 反之, 如果该选项为 {@code false}, + * 那么该方法只会接收 Parent 事件, 而不会接收它的子类 Child. + *

默认值: {@code false} + * @return 返回该方法是否支持继承性. + */ + boolean inheritable() default false; + +} diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventHandlerRegistry.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventHandlerRegistry.java new file mode 100644 index 0000000..caa71a0 --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventHandlerRegistry.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import java.lang.reflect.Method; +import java.util.Map; + +/** + * 事件处理注册器. + *

实现了该接口的类将允许注册事件处理方法. + * @author LamGC + */ +public interface EventHandlerRegistry { + + /** + * 注册对象中的事件处理方法. + * @param handlerObject 包含事件处理方法的对象.\ + * @return 返回已成功添加的方法数. + */ + int registerHandler(Object handlerObject); + + /** + * 获取能处理指定事件的所有方法. + * @param event 待匹配的事件对象. + * @return 返回一个集合, 集合存储了可处理该事件的所有方法. + */ + Map getMatchedHandlerMethod(EventObject event); + +} diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventObject.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventObject.java new file mode 100644 index 0000000..66a65f6 --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventObject.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import java.util.UUID; + +/** + * 事件对象. + * @author LamGC + */ +public interface EventObject { + + /** + * 获取事件 UUID. + *

需保证 UUID 对应了唯一的事件对象, 即使内容重复. + * @return 返回事件Id. + */ + UUID getEventId(); + +} diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventUtils.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventUtils.java new file mode 100644 index 0000000..6132cb1 --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/EventUtils.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashSet; +import java.util.Set; + +/** + * 事件处理工具类. + * @author LamGC + */ +public final class EventUtils { + + /** + * 检查 {@link EventExecutor} 是否支持取消事件. + * @param executor 事件执行器. + * @return 如果支持, 返回 {@code true} + */ + public static boolean isSupportedCancel(EventExecutor executor) { + return executor instanceof SupportedCancel; + } + + /** + * 检查方法是否符合事件处理方法条件. + * @param method 待检查的方法. + * @return 如果符合, 返回 true. + */ + public static boolean checkEventHandlerMethod(Method method) { + int modifiers = method.getModifiers(); + // 新版事件系统将不再允许静态方法作为事件处理方法, 以降低管理难度. + if (!Modifier.isPublic(modifiers) || Modifier.isAbstract(modifiers) || Modifier.isStatic(modifiers)) { + return false; + } + if (!method.isAnnotationPresent(EventHandler.class) || method.getParameterCount() != 1) { + return false; + } + + Class param = method.getParameterTypes()[0]; + if (!EventObject.class.isAssignableFrom(param)) { + return false; + } + return method.getReturnType().equals(Void.TYPE); + } + +} diff --git a/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/SupportedCancel.java b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/SupportedCancel.java new file mode 100644 index 0000000..c0bba9a --- /dev/null +++ b/ContentGrabbingJi-Event/src/main/java/net/lamgc/cgj/bot/event/SupportedCancel.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import java.util.NoSuchElementException; +import java.util.UUID; + +/** + * 支持取消接口. + *

实现了该接口的 {@link EventExecutor} 可对已投递执行的事件进行取消, 以阻止事件被执行. + * @author LamGC + */ +public interface SupportedCancel { + + /** + * 通过 EventId 取消事件的处理. + * @param eventId 事件Id. + * @return 如果成功, 返回 true, 如果事件已执行完成, 返回 false. + * @throws UnsupportedOperationException 当事件未实现 {@link Cancelable} 接口时抛出. + * @throws NoSuchElementException 当 EventId 所属事件在 {@link SupportedCancel} 中无法找到时抛出. + */ + boolean cancelEvent(UUID eventId) throws UnsupportedOperationException, NoSuchElementException; + + /** + * 通过 Event 对象取消事件的处理. + * @param event 事件对象. + * @return 如果成功, 返回 true, 如果事件已执行完成, 返回 false. + * @throws UnsupportedOperationException 当事件未实现 {@link Cancelable} 接口时抛出. + * @throws NoSuchElementException 当 EventId 所属事件在 {@link SupportedCancel} 中无法找到时抛出. + */ + boolean cancelEvent(EventObject event) throws UnsupportedOperationException, NoSuchElementException; + + /** + * 对可取消对象执行取消处理操作. + * @param cancelableEvent 可取消对象事件. + * @return 如果成功, 返回 true, 如果事件已执行完成, 返回 false. + * @throws NoSuchElementException 当 EventId 所属事件在 {@link SupportedCancel} 中无法找到时抛出. + */ + boolean cancelEvent(Cancelable cancelableEvent) throws NoSuchElementException; + +} diff --git a/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/EventUtilsTest.java b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/EventUtilsTest.java new file mode 100644 index 0000000..32fbe17 --- /dev/null +++ b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/EventUtilsTest.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event; + +import net.lamgc.cgj.bot.event.handler.IllegalHandler; +import net.lamgc.cgj.bot.event.handler.StandardHandler; +import net.lamgc.cgj.bot.event.object.TestEvent; +import org.junit.Assert; +import org.junit.Test; + +import java.lang.reflect.Method; +import java.util.NoSuchElementException; +import java.util.UUID; + +public class EventUtilsTest { + + @Test + public void supportedCancelCheckTest() { + class NonSupportedCancelClass implements EventExecutor { + @Override + public void execute(EventObject event) { + + } + + @Override + public boolean isAsync() { + return false; + } + } + class SupportedCancelClass implements SupportedCancel, EventExecutor { + + @Override + public boolean cancelEvent(UUID eventId) throws UnsupportedOperationException, NoSuchElementException { + return false; + } + + @Override + public boolean cancelEvent(EventObject event) throws UnsupportedOperationException, NoSuchElementException { + return false; + } + + @Override + public boolean cancelEvent(Cancelable cancelableEvent) throws NoSuchElementException { + return false; + } + + @Override + public void execute(EventObject event) { + + } + + @Override + public boolean isAsync() { + return false; + } + } + + Assert.assertTrue(EventUtils.isSupportedCancel(new SupportedCancelClass())); + Assert.assertFalse(EventUtils.isSupportedCancel(new NonSupportedCancelClass())); + } + + @Test + public void standardHandlerMethodCheckTest() throws NoSuchMethodException { + Method targetMethod = StandardHandler.class.getMethod("standardHandle", TestEvent.class); + Assert.assertTrue(EventUtils.checkEventHandlerMethod(targetMethod)); + } + + @Test + public void invalidHandlerMethodCheckTest() { + for (Method method : IllegalHandler.class.getDeclaredMethods()) { + Assert.assertFalse(EventUtils.checkEventHandlerMethod(method)); + } + } + +} diff --git a/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/handler/IllegalHandler.java b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/handler/IllegalHandler.java new file mode 100644 index 0000000..1193dba --- /dev/null +++ b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/handler/IllegalHandler.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event.handler; + +import net.lamgc.cgj.bot.event.EventHandler; +import net.lamgc.cgj.bot.event.object.TestEvent; + +public abstract class IllegalHandler { + + @EventHandler + public void nonArgumentHandleMethod() { + + } + + @EventHandler + public abstract void abstractHandleMethod(TestEvent event); + + @EventHandler + public static void staticHandleMethod(TestEvent event) { + + } + + @EventHandler + private void privateHandleMethod(TestEvent event) { + + } + + public void nonAnnotationHandle() { + + } + + @EventHandler + public void multiArgumentsHandleMethod(TestEvent event, Object object) { + + } + + @EventHandler + public void invalidArgumentMethod(Object object) { + + } + + @EventHandler + public Object invalidReturnTypeMethod(TestEvent event) { + return null; + } + +} diff --git a/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/handler/StandardHandler.java b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/handler/StandardHandler.java new file mode 100644 index 0000000..6a4de5a --- /dev/null +++ b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/handler/StandardHandler.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event.handler; + +import net.lamgc.cgj.bot.event.EventHandler; +import net.lamgc.cgj.bot.event.object.TestEvent; + +public class StandardHandler { + + @EventHandler + public void standardHandle(TestEvent event) { + + } + +} diff --git a/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/object/TestEvent.java b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/object/TestEvent.java new file mode 100644 index 0000000..2a1247f --- /dev/null +++ b/ContentGrabbingJi-Event/src/test/java/net/lamgc/cgj/bot/event/object/TestEvent.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2020 LamGC + * + * ContentGrabbingJi is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ContentGrabbingJi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.lamgc.cgj.bot.event.object; + +import net.lamgc.cgj.bot.event.AbstractEventObject; + +public class TestEvent extends AbstractEventObject { + + private final String content; + + public TestEvent(String content) { + this.content = content; + } + + public String getContent() { + return content; + } +} diff --git a/ContentGrabbingJi-core/pom.xml b/ContentGrabbingJi-core/pom.xml index eb873ef..0cc0c22 100644 --- a/ContentGrabbingJi-core/pom.xml +++ b/ContentGrabbingJi-core/pom.xml @@ -49,6 +49,11 @@ ContentGrabbingJi-pixiv 3.0.0-alpha-SNAPSHOT + + net.lamgc + ContentGrabbingJi-Event + 3.0.0-alpha-SNAPSHOT + com.google.code.gson diff --git a/ContentGrabbingJi-framework-api/pom.xml b/ContentGrabbingJi-framework-api/pom.xml index 8acbff6..e2a529a 100644 --- a/ContentGrabbingJi-framework-api/pom.xml +++ b/ContentGrabbingJi-framework-api/pom.xml @@ -39,6 +39,17 @@ gson 2.8.6 + + + net.lamgc + ContentGrabbingJi-Event + 3.0.0-alpha-SNAPSHOT + + + net.lamgc + ContentGrabbingJi-common + 3.0.0-alpha-SNAPSHOT + \ No newline at end of file diff --git a/pom.xml b/pom.xml index a8006c1..9c1ba67 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ ContentGrabbingJi-CacheStore-redis ContentGrabbingJi-CacheStore-local ContentGrabbingJi-common + ContentGrabbingJi-Event