From f8e20c73f2b0455d30fe9fd6e94c2007b684a5a3 Mon Sep 17 00:00:00 2001
From: jiangyitao <451988022@163.com>
Date: Tue, 28 Jul 2020 23:10:12 +0800
Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8Dspringboot=E6=89=93?=
=?UTF-8?q?=E5=8C=85=E8=BF=90=E8=A1=8C=EF=BC=8C=E6=89=AB=E6=8F=8F=E5=9F=BA?=
=?UTF-8?q?=E7=A1=80action=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98=202.?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=8F=90=E5=8F=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../com/daxiang/core/AgentStartRunner.java | 15 ++++----
.../core/action/BasicActionScanner.java | 36 +++++++++++++------
.../java/com/daxiang/core/pc/web/Browser.java | 2 --
src/main/resources/application.properties | 9 ++++-
5 files changed, 42 insertions(+), 22 deletions(-)
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