Skip to content
This repository was archived by the owner on Oct 5, 2023. It is now read-only.

Commit

Permalink
1.修复springboot打包运行,扫描基础action失效问题 2.配置提取
Browse files Browse the repository at this point in the history
  • Loading branch information
jiangyitao committed Jul 28, 2020
1 parent 9f0a2ea commit f8e20c7
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 22 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.daxiang</groupId>
<artifactId>agent</artifactId>
<version>0.7.5</version>
<version>0.7.6</version>
<packaging>jar</packaging>

<properties>
Expand Down
15 changes: 8 additions & 7 deletions src/main/java/com/daxiang/core/AgentStartRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -19,7 +18,6 @@
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.List;

/**
Expand All @@ -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;
Expand All @@ -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);

// 移动端
Expand Down Expand Up @@ -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功能");
}
Expand All @@ -101,7 +101,8 @@ public void run(ApplicationArguments args) throws IOException, InterruptedExcept
Terminal.execute("ffmpeg -version");

BasicActionScanner basicActionScanner = new BasicActionScanner();
List<Action> basicActions = basicActionScanner.scan(BASIC_ACTION_PACKAGE);
List<Action> basicActions = basicActionScanner.scanRecursive(basicActionPackage);
log.info("scan: {}, basicActions: {}", basicActionPackage, basicActions);
serverClient.resetBasicAction(basicActions);
}

Expand Down
36 changes: 25 additions & 11 deletions src/main/java/com/daxiang/core/action/BasicActionScanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -27,18 +31,28 @@ public class BasicActionScanner {
// basic action最大id
private static final int BASIC_ACTION_MAX_ID = 10000;

public List<Action> scan(String packageName) throws IOException {
Assert.hasText(packageName, "packageName must has text");
private PathMatchingResourcePatternResolver resourcePatternResolver;
private MetadataReaderFactory metadataReaderFactory;

public List<Action> 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<Action> actions = new ArrayList<>();

// 扫描packageName目录及子目录
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
ImmutableSet<ClassPath.ClassInfo> 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);
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/com/daxiang/core/pc/web/Browser.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
9 changes: 8 additions & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,11 @@ spring.jackson.time-zone=GMT+8
#ip取代hostname
spring.boot.admin.client.instance.prefer-ip=true

version=@project.version@
#pom项目版本
version=@project.version@

#基础action包
basicActionPackage=com.daxiang.action

#浏览器配置文件
browserConfig=browser.json

0 comments on commit f8e20c7

Please sign in to comment.