diff --git a/pom.xml b/pom.xml
index e35eedc..7208ef1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.daxiang
agent
- 0.7.5
+ 0.7.6
jar
diff --git a/src/main/java/com/daxiang/core/AgentStartRunner.java b/src/main/java/com/daxiang/core/AgentStartRunner.java
index f305879..af92195 100644
--- a/src/main/java/com/daxiang/core/AgentStartRunner.java
+++ b/src/main/java/com/daxiang/core/AgentStartRunner.java
@@ -6,7 +6,6 @@
import com.daxiang.core.mobile.appium.AppiumServer;
import com.daxiang.core.mobile.ios.IosDeviceChangeListener;
import com.daxiang.core.mobile.ios.IosDeviceMonitor;
-import com.daxiang.core.pc.web.Browser;
import com.daxiang.core.pc.web.BrowserInitializer;
import com.daxiang.model.action.Action;
import com.daxiang.server.ServerClient;
@@ -19,7 +18,6 @@
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
-import java.io.IOException;
import java.util.List;
/**
@@ -29,13 +27,15 @@
@Component
public class AgentStartRunner implements ApplicationRunner {
- public static final String BASIC_ACTION_PACKAGE = "com.daxiang.action";
-
@Autowired
private ServerClient serverClient;
@Value("${version}")
private String version;
+ @Value("${browserConfig}")
+ private String browserConfig;
+ @Value("${basicActionPackage}")
+ private String basicActionPackage;
@Autowired
private AndroidDeviceChangeListener androidDeviceChangeListener;
@@ -52,7 +52,7 @@ public class AgentStartRunner implements ApplicationRunner {
private boolean enablePcWeb;
@Override
- public void run(ApplicationArguments args) throws IOException, InterruptedException {
+ public void run(ApplicationArguments args) throws Exception {
System.setProperty("agent.version", version);
// 移动端
@@ -84,7 +84,7 @@ public void run(ApplicationArguments args) throws IOException, InterruptedExcept
// pc端
if (enablePcWeb) {
- browserInitializer.init(Browser.PROPERTIES_PATH);
+ browserInitializer.init(browserConfig);
} else {
log.info("未开启pc web功能");
}
@@ -101,7 +101,8 @@ public void run(ApplicationArguments args) throws IOException, InterruptedExcept
Terminal.execute("ffmpeg -version");
BasicActionScanner basicActionScanner = new BasicActionScanner();
- List basicActions = basicActionScanner.scan(BASIC_ACTION_PACKAGE);
+ List basicActions = basicActionScanner.scanRecursive(basicActionPackage);
+ log.info("scan: {}, basicActions: {}", basicActionPackage, basicActions);
serverClient.resetBasicAction(basicActions);
}
diff --git a/src/main/java/com/daxiang/core/action/BasicActionScanner.java b/src/main/java/com/daxiang/core/action/BasicActionScanner.java
index c480190..8e1e780 100644
--- a/src/main/java/com/daxiang/core/action/BasicActionScanner.java
+++ b/src/main/java/com/daxiang/core/action/BasicActionScanner.java
@@ -4,11 +4,15 @@
import com.daxiang.model.action.Action;
import com.daxiang.model.action.Param;
import com.daxiang.model.action.PossibleValue;
-import com.google.common.collect.ImmutableSet;
import com.google.common.primitives.Ints;
-import com.google.common.reflect.ClassPath;
import org.apache.commons.lang3.reflect.TypeUtils;
-import org.springframework.util.Assert;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
import java.io.IOException;
@@ -27,18 +31,28 @@ public class BasicActionScanner {
// basic action最大id
private static final int BASIC_ACTION_MAX_ID = 10000;
- public List scan(String packageName) throws IOException {
- Assert.hasText(packageName, "packageName must has text");
+ private PathMatchingResourcePatternResolver resourcePatternResolver;
+ private MetadataReaderFactory metadataReaderFactory;
+
+ public List scanRecursive(String basePackage) throws IOException, ClassNotFoundException {
+ if (resourcePatternResolver == null) {
+ resourcePatternResolver = new PathMatchingResourcePatternResolver();
+ }
+
+ String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ + ClassUtils.convertClassNameToResourcePath(basePackage)
+ + "/**/*.class";
+ Resource[] resources = resourcePatternResolver.getResources(packageSearchPath);
List actions = new ArrayList<>();
- // 扫描packageName目录及子目录
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- ImmutableSet classInfos = ClassPath.from(classLoader)
- .getTopLevelClassesRecursive(packageName);
+ if (metadataReaderFactory == null) {
+ metadataReaderFactory = new CachingMetadataReaderFactory();
+ }
- for (ClassPath.ClassInfo classInfo : classInfos) {
- Class clazz = classInfo.load();
+ for (Resource resource : resources) {
+ MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(resource);
+ Class clazz = Class.forName(metadataReader.getClassMetadata().getClassName());
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
Action action = createAction(clazz.getName(), method);
diff --git a/src/main/java/com/daxiang/core/pc/web/Browser.java b/src/main/java/com/daxiang/core/pc/web/Browser.java
index c255213..340ed0e 100644
--- a/src/main/java/com/daxiang/core/pc/web/Browser.java
+++ b/src/main/java/com/daxiang/core/pc/web/Browser.java
@@ -11,8 +11,6 @@
@Data
public class Browser extends BrowserJsonItem {
- public static final String PROPERTIES_PATH = "browser.json";
-
private Integer platform; // 1.windows 2.linux 3.macos
private Integer status;
private String username;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index da046d5..46eb4b3 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -12,4 +12,11 @@ spring.jackson.time-zone=GMT+8
#ip取代hostname
spring.boot.admin.client.instance.prefer-ip=true
-version=@project.version@
\ No newline at end of file
+#pom项目版本
+version=@project.version@
+
+#基础action包
+basicActionPackage=com.daxiang.action
+
+#浏览器配置文件
+browserConfig=browser.json
\ No newline at end of file