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