auto copy testable agent to target folder

This commit is contained in:
金戟 2020-07-20 21:53:59 +08:00
parent d1d34cae1c
commit c449649679
4 changed files with 63 additions and 42 deletions

View File

@ -5,7 +5,7 @@
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>testable-agent</artifactId> <artifactId>testable-agent</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.2-SNAPSHOT</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>

View File

@ -1,39 +0,0 @@
package com.alibaba.testable.generator;
import com.alibaba.testable.model.TestableContext;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* Generate global n.e class code
*
* @author flin
*/
public class StaticNewClassGenerator extends BaseGenerator {
public StaticNewClassGenerator(TestableContext cx) {
super(cx);
}
public String fetch() {
InputStream in = getClass().getResourceAsStream("/e.java");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
try {
String line;
StringBuffer buffer = new StringBuffer();
while ((line = reader.readLine()) != null)
{
buffer.append(line).append('\n');
}
reader.close();
return buffer.toString();
} catch (IOException e) {
cx.logger.error("Failed to generate testable new stand-in.");
return "";
}
}
}

View File

@ -1,10 +1,10 @@
package com.alibaba.testable.processor; package com.alibaba.testable.processor;
import com.alibaba.testable.annotation.EnableTestableInject; import com.alibaba.testable.annotation.EnableTestableInject;
import com.alibaba.testable.generator.StaticNewClassGenerator;
import com.alibaba.testable.translator.EnableTestableInjectTranslator; import com.alibaba.testable.translator.EnableTestableInjectTranslator;
import com.alibaba.testable.translator.MethodRecordTranslator; import com.alibaba.testable.translator.MethodRecordTranslator;
import com.alibaba.testable.util.ConstPool; import com.alibaba.testable.util.ConstPool;
import com.alibaba.testable.util.ResourceUtil;
import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree;
@ -17,7 +17,9 @@ import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement; import javax.lang.model.element.TypeElement;
import javax.tools.FileObject; import javax.tools.FileObject;
import javax.tools.JavaFileObject; import javax.tools.JavaFileObject;
import javax.tools.StandardLocation;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer; import java.io.Writer;
import java.util.Set; import java.util.Set;
@ -48,7 +50,8 @@ public class EnableTestableInjectProcessor extends BaseProcessor {
private void createStaticNewClass() { private void createStaticNewClass() {
if (!isStaticNewClassExist()) { if (!isStaticNewClassExist()) {
try { try {
writeSourceFile(ConstPool.NE_PKG_CLS, new StaticNewClassGenerator(cx).fetch()); writeSourceFile(ConstPool.NE_PKG_CLS, ResourceUtil.fetchText("e.java"));
writeBinaryFile("testable", "agent.jar", ResourceUtil.fetchBinary("testable-agent.jar"));
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -82,7 +85,16 @@ public class EnableTestableInjectProcessor extends BaseProcessor {
JavaFileObject jfo = cx.filter.createSourceFile(fullQualityTypeName); JavaFileObject jfo = cx.filter.createSourceFile(fullQualityTypeName);
Writer writer = jfo.openWriter(); Writer writer = jfo.openWriter();
writer.write(content); writer.write(content);
writer.flush();
writer.close(); writer.close();
} }
private void writeBinaryFile(String path, String fileName, byte[] content) throws IOException {
FileObject resource = cx.filter.createResource(StandardLocation.SOURCE_OUTPUT, path, fileName);
OutputStream out = resource.openOutputStream();
out.write(content);
out.flush();
out.close();
}
} }

View File

@ -0,0 +1,48 @@
package com.alibaba.testable.util;
import java.io.*;
/**
* Generate global n.e class code
*
* @author flin
*/
public class ResourceUtil {
public static String fetchText(String fileName) {
InputStream in = ResourceUtil.class.getResourceAsStream("/" + fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder buffer = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null)
{
buffer.append(line).append('\n');
}
reader.close();
return buffer.toString();
} catch (IOException e) {
System.err.println("Failed to fetch text file: " + fileName);
return "";
}
}
public static byte[] fetchBinary(String fileName) {
InputStream in = ResourceUtil.class.getResourceAsStream("/" + fileName);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
final int bufLen = 4 * 1024;
byte[] buf = new byte[bufLen];
int readLen;
try {
while ((readLen = in.read(buf, 0, bufLen)) != -1) {
buffer.write(buf, 0, readLen);
}
buffer.close();
return buffer.toByteArray();
} catch (IOException e) {
System.err.println("Failed to fetch text file: " + fileName);
return new byte[] {};
}
}
}