Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
7b1e8fd9e5
@ -13,6 +13,7 @@ public class ShuiMuUrlConstant {
|
|||||||
public static final String getProjectVersion = "/api/project/code/getProjectVersion";
|
public static final String getProjectVersion = "/api/project/code/getProjectVersion";
|
||||||
public static final String buildAndSaveConfig = "/api/driverGeneration/buildAndSaveConfig";
|
public static final String buildAndSaveConfig = "/api/driverGeneration/buildAndSaveConfig";
|
||||||
public static final String getProjectById = "/api/project/";
|
public static final String getProjectById = "/api/project/";
|
||||||
|
public static final String getProjectResource = "/api/project/getProjectResource";
|
||||||
public static final String uploadWfuzzJson = "/api/project/code/uploadWfuzzJson";
|
public static final String uploadWfuzzJson = "/api/project/code/uploadWfuzzJson";
|
||||||
public static final String executeAllEntrypointsTest ="/api/driverGeneration/executeAllEntrypointsTest";
|
public static final String executeAllEntrypointsTest ="/api/driverGeneration/executeAllEntrypointsTest";
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
package cd.casic.ci.process.dto.resp.shuimu;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ShuiMuProjectResourceResp {
|
||||||
|
private Integer projectId;
|
||||||
|
private Integer workspaceResource;
|
||||||
|
private Integer buildResource;
|
||||||
|
private Integer testResource;
|
||||||
|
private Integer queueResource;
|
||||||
|
private Integer finishResource;
|
||||||
|
private Integer problemCount;
|
||||||
|
private Double coverage;
|
||||||
|
|
||||||
|
}
|
@ -1,12 +1,14 @@
|
|||||||
package cd.casic.ci.process.engine.worker.shuimu;
|
package cd.casic.ci.process.engine.worker.shuimu;
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
||||||
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectResourceResp;
|
||||||
import cd.casic.ci.process.engine.constant.ShuiMuConstant;
|
import cd.casic.ci.process.engine.constant.ShuiMuConstant;
|
||||||
import cd.casic.ci.process.engine.runContext.TaskRunContext;
|
import cd.casic.ci.process.engine.runContext.TaskRunContext;
|
||||||
import cd.casic.ci.process.engine.worker.base.BaseWorker;
|
import cd.casic.ci.process.engine.worker.base.BaseWorker;
|
||||||
import cd.casic.ci.process.engine.worker.base.SshWorker;
|
import cd.casic.ci.process.engine.worker.base.SshWorker;
|
||||||
import cd.casic.ci.process.process.dataObject.task.PipTask;
|
import cd.casic.ci.process.process.dataObject.task.PipTask;
|
||||||
import cd.casic.ci.process.process.service.shuimu.ShuiMuService;
|
import cd.casic.ci.process.process.service.shuimu.ShuiMuService;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@ -27,5 +29,15 @@ public class ShuiMuWorker extends BaseWorker {
|
|||||||
String projectId = (String)taskProperties.get(ShuiMuConstant.SHUI_MU_PROJECT_ID_KEY);
|
String projectId = (String)taskProperties.get(ShuiMuConstant.SHUI_MU_PROJECT_ID_KEY);
|
||||||
Integer fuzzMinutes = Integer.parseInt(String.valueOf(taskProperties.get(ShuiMuConstant.SHUI_MU_FUZZ_MINUTES)));
|
Integer fuzzMinutes = Integer.parseInt(String.valueOf(taskProperties.get(ShuiMuConstant.SHUI_MU_FUZZ_MINUTES)));
|
||||||
shuiMuService.executeAllEntrypointsTest(projectId,fuzzMinutes);
|
shuiMuService.executeAllEntrypointsTest(projectId,fuzzMinutes);
|
||||||
|
append(context,"水木模糊测试开始执行");
|
||||||
|
while (true){
|
||||||
|
ShuiMuProjectResourceResp projectResource = shuiMuService.getProjectResource(projectId);
|
||||||
|
append(context,"当前执行情况:");
|
||||||
|
append(context, JSON.toJSONString(projectResource));
|
||||||
|
if (projectResource.getTestResource()==0) {
|
||||||
|
append(context,"水木模糊测试执行完毕");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import cd.casic.ci.process.dto.req.shuimu.ShuiMuBuildAndSaveReq;
|
|||||||
import cd.casic.ci.process.dto.req.shuimu.ShuiMuProjectCreateReq;
|
import cd.casic.ci.process.dto.req.shuimu.ShuiMuProjectCreateReq;
|
||||||
import cd.casic.ci.process.dto.req.shuimu.ShuiMuUpdateWFuzzJsonReq;
|
import cd.casic.ci.process.dto.req.shuimu.ShuiMuUpdateWFuzzJsonReq;
|
||||||
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectInfoResp;
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectInfoResp;
|
||||||
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectResourceResp;
|
||||||
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectVersionResp;
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectVersionResp;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -30,4 +31,5 @@ public interface ShuiMuService {
|
|||||||
void buildAndSaveConfig(ShuiMuBuildAndSaveReq req);
|
void buildAndSaveConfig(ShuiMuBuildAndSaveReq req);
|
||||||
void uploadWfuzzJson(ShuiMuUpdateWFuzzJsonReq req);
|
void uploadWfuzzJson(ShuiMuUpdateWFuzzJsonReq req);
|
||||||
void executeAllEntrypointsTest(String projectId,Integer fuzzMinutes);
|
void executeAllEntrypointsTest(String projectId,Integer fuzzMinutes);
|
||||||
|
ShuiMuProjectResourceResp getProjectResource (String projectId);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import cd.casic.ci.process.dto.req.shuimu.ShuiMuBuildAndSaveReq;
|
|||||||
import cd.casic.ci.process.dto.req.shuimu.ShuiMuProjectCreateReq;
|
import cd.casic.ci.process.dto.req.shuimu.ShuiMuProjectCreateReq;
|
||||||
import cd.casic.ci.process.dto.req.shuimu.ShuiMuUpdateWFuzzJsonReq;
|
import cd.casic.ci.process.dto.req.shuimu.ShuiMuUpdateWFuzzJsonReq;
|
||||||
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectInfoResp;
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectInfoResp;
|
||||||
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectResourceResp;
|
||||||
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectVersionResp;
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuProjectVersionResp;
|
||||||
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuTokenResp;
|
import cd.casic.ci.process.dto.resp.shuimu.ShuiMuTokenResp;
|
||||||
import cd.casic.ci.process.engine.manager.RunContextManager;
|
import cd.casic.ci.process.engine.manager.RunContextManager;
|
||||||
@ -31,6 +32,8 @@ import org.springframework.web.client.RestTemplate;
|
|||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static cd.casic.ci.process.constant.ShuiMuUrlConstant.*;
|
import static cd.casic.ci.process.constant.ShuiMuUrlConstant.*;
|
||||||
@ -191,7 +194,9 @@ public class ShuiMuServiceImpl implements ShuiMuService {
|
|||||||
body.add("projectId",req.getProjectId());
|
body.add("projectId",req.getProjectId());
|
||||||
body.add("env",req.getEnv());
|
body.add("env",req.getEnv());
|
||||||
body.add("fileName",req.getFileName());
|
body.add("fileName",req.getFileName());
|
||||||
HttpEntity<MultiValueMap<String,String>> entity = new HttpEntity<>(body,getHeaders());
|
HttpHeaders headers = getHeaders();
|
||||||
|
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||||
|
HttpEntity<MultiValueMap<String,String>> entity = new HttpEntity<>(body, headers);
|
||||||
ResponseEntity<String> exchange = restTemplate.exchange(shuiMuProperties.getBaseUrl() + buildAndSaveConfig, HttpMethod.POST, entity, String.class, new HashMap<>());
|
ResponseEntity<String> exchange = restTemplate.exchange(shuiMuProperties.getBaseUrl() + buildAndSaveConfig, HttpMethod.POST, entity, String.class, new HashMap<>());
|
||||||
if (exchange.getStatusCode().isError()) {
|
if (exchange.getStatusCode().isError()) {
|
||||||
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"保存并且构建失败");
|
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"保存并且构建失败");
|
||||||
@ -207,16 +212,23 @@ public class ShuiMuServiceImpl implements ShuiMuService {
|
|||||||
restReq.put("product",projectInfo.getProduct());
|
restReq.put("product",projectInfo.getProduct());
|
||||||
restReq.put("language",projectInfo.getLanguage());
|
restReq.put("language",projectInfo.getLanguage());
|
||||||
restReq.put("build",req.getBuild());
|
restReq.put("build",req.getBuild());
|
||||||
ByteArrayOutputStream bis = new ByteArrayOutputStream();
|
String tempDir = System.getProperty("java.io.tmpdir");
|
||||||
|
|
||||||
|
File tempFile = new File(tempDir,"wfuzz.json");
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ObjectOutputStream oos =new ObjectOutputStream(bis);
|
FileOutputStream fos = new FileOutputStream(tempFile);
|
||||||
oos.writeObject(restReq);
|
fos.write(JSON.toJSONString(restReq).getBytes());
|
||||||
File tempFile = File.createTempFile(UUID.randomUUID().toString().replaceAll("-", ""), "");
|
fos.flush();
|
||||||
|
tempFile.setReadable(true,false);
|
||||||
FileSystemResource resource = new FileSystemResource(tempFile);
|
FileSystemResource resource = new FileSystemResource(tempFile);
|
||||||
MultiValueMap<String,Object> body = new LinkedMultiValueMap<>();
|
MultiValueMap<String,Object> body = new LinkedMultiValueMap<>();
|
||||||
body.add("projectId",req.getProjectId());
|
body.add("projectId",req.getProjectId());
|
||||||
body.add("file",resource);
|
body.add("file",resource);
|
||||||
HttpEntity<MultiValueMap<String,Object>> entity = new HttpEntity<>(body,getHeaders());
|
HttpHeaders headers = getHeaders();
|
||||||
|
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||||
|
HttpEntity<MultiValueMap<String,Object>> entity = new HttpEntity<>(body, headers);
|
||||||
ResponseEntity<String> exchange = restTemplate.exchange(shuiMuProperties.getBaseUrl() + uploadWfuzzJson, HttpMethod.POST, entity, String.class, new HashMap<>());
|
ResponseEntity<String> exchange = restTemplate.exchange(shuiMuProperties.getBaseUrl() + uploadWfuzzJson, HttpMethod.POST, entity, String.class, new HashMap<>());
|
||||||
if (exchange.getStatusCode().isError()) {
|
if (exchange.getStatusCode().isError()) {
|
||||||
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"更新配置文件失败");
|
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"更新配置文件失败");
|
||||||
@ -230,6 +242,8 @@ public class ShuiMuServiceImpl implements ShuiMuService {
|
|||||||
ShuiMuProjectVersionResp.Repo repo = projectVersion.getRepo();
|
ShuiMuProjectVersionResp.Repo repo = projectVersion.getRepo();
|
||||||
ShuiMuBuildAndSaveReq shuiMuBuildAndSaveReq = new ShuiMuBuildAndSaveReq();
|
ShuiMuBuildAndSaveReq shuiMuBuildAndSaveReq = new ShuiMuBuildAndSaveReq();
|
||||||
BeanUtils.copyProperties(repo,shuiMuBuildAndSaveReq);
|
BeanUtils.copyProperties(repo,shuiMuBuildAndSaveReq);
|
||||||
|
shuiMuBuildAndSaveReq.setProjectId(req.getProjectId());
|
||||||
|
shuiMuBuildAndSaveReq.setFileName(repo.getFilename());
|
||||||
buildAndSaveConfig(shuiMuBuildAndSaveReq);
|
buildAndSaveConfig(shuiMuBuildAndSaveReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,7 +261,24 @@ public class ShuiMuServiceImpl implements ShuiMuService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ShuiMuProjectResourceResp getProjectResource (String projectId) {
|
||||||
|
HttpEntity<String> entity = new HttpEntity<>(null,getHeaders());
|
||||||
|
String uriString = UriComponentsBuilder.fromUriString(shuiMuProperties.getBaseUrl() + getProjectResource ).queryParam("projectId",projectId)
|
||||||
|
.toUriString();
|
||||||
|
ResponseEntity<String> exchange = restTemplate.exchange(uriString, HttpMethod.GET, entity, String.class, new HashMap<>());
|
||||||
|
if (exchange.getStatusCode().isError()) {
|
||||||
|
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"获取项目执行信息失败");
|
||||||
|
}
|
||||||
|
String data = JSON.parseObject(exchange.getBody()).getString("data");
|
||||||
|
try {
|
||||||
|
List<ShuiMuProjectResourceResp> shuiMuProjectResourceResps = JSONArray.parseArray(data, ShuiMuProjectResourceResp.class);
|
||||||
|
|
||||||
|
return shuiMuProjectResourceResps.get(0);
|
||||||
|
} catch (Exception e){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
private HttpHeaders getHeaders(){
|
private HttpHeaders getHeaders(){
|
||||||
HttpHeaders httpHeaders = new HttpHeaders();
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
@ -7,6 +7,7 @@ import com.amazonaws.util.IOUtils;
|
|||||||
import com.jcraft.jsch.*;
|
import com.jcraft.jsch.*;
|
||||||
import jakarta.servlet.ServletOutputStream;
|
import jakarta.servlet.ServletOutputStream;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
@ -14,7 +15,7 @@ import java.io.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static com.fhs.common.utils.StringUtil.trim;
|
import static com.fhs.common.utils.StringUtil.trim;
|
||||||
|
@Slf4j
|
||||||
public class SftpUploadUtil {
|
public class SftpUploadUtil {
|
||||||
|
|
||||||
private static final int DEFAULT_SFTP_PORT = 22;
|
private static final int DEFAULT_SFTP_PORT = 22;
|
||||||
@ -584,8 +585,10 @@ public class SftpUploadUtil {
|
|||||||
// 获取远程文件名和目录
|
// 获取远程文件名和目录
|
||||||
String remoteDir = remoteFilePath.substring(0, remoteFilePath.lastIndexOf('/'));
|
String remoteDir = remoteFilePath.substring(0, remoteFilePath.lastIndexOf('/'));
|
||||||
String fileName = remoteFilePath.substring(remoteFilePath.lastIndexOf('/') + 1);
|
String fileName = remoteFilePath.substring(remoteFilePath.lastIndexOf('/') + 1);
|
||||||
|
String chmodDir = remoteFilePath.substring(0, remoteFilePath.indexOf("default"));
|
||||||
|
log.info("分配权限路径,{}",chmodDir);
|
||||||
// 切换目录并列出内容用于调试
|
// 切换目录并列出内容用于调试
|
||||||
|
sudoChmodORwx(session,chmodDir,password);
|
||||||
try {
|
try {
|
||||||
channelSftp.cd(remoteDir);
|
channelSftp.cd(remoteDir);
|
||||||
} catch (SftpException e) {
|
} catch (SftpException e) {
|
||||||
@ -1464,7 +1467,41 @@ public class SftpUploadUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void sudoChmodORwx(Session session, String remotePath, String sudoPassword) throws Exception {
|
||||||
|
String command = "sudo -S chmod -R o+rwx " + remotePath;
|
||||||
|
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
|
||||||
|
channelExec.setCommand(command);
|
||||||
|
|
||||||
|
OutputStream out = channelExec.getOutputStream();
|
||||||
|
InputStream in = channelExec.getInputStream();
|
||||||
|
channelExec.setErrStream(System.err);
|
||||||
|
|
||||||
|
channelExec.connect();
|
||||||
|
|
||||||
|
// 写入sudo密码
|
||||||
|
out.write((sudoPassword + "\n").getBytes());
|
||||||
|
out.flush();
|
||||||
|
|
||||||
|
// 读取命令输出
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
System.out.println(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 等待命令执行完成
|
||||||
|
while (!channelExec.isClosed()) {
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
int exitStatus = channelExec.getExitStatus();
|
||||||
|
channelExec.disconnect();
|
||||||
|
|
||||||
|
if (exitStatus != 0) {
|
||||||
|
throw new RuntimeException("sudo chmod 执行失败,退出码: " + exitStatus);
|
||||||
|
} else {
|
||||||
|
System.out.println("sudo chmod -R o+rwx 执行成功!");
|
||||||
|
}
|
||||||
|
}
|
||||||
private static boolean thisDirectory(ChannelSftp channelSftp, String fullPath) {
|
private static boolean thisDirectory(ChannelSftp channelSftp, String fullPath) {
|
||||||
try {
|
try {
|
||||||
SftpATTRS attrs = channelSftp.lstat(fullPath);
|
SftpATTRS attrs = channelSftp.lstat(fullPath);
|
||||||
|
@ -2,10 +2,19 @@ package cd.casic.server;
|
|||||||
|
|
||||||
import cd.casic.ci.process.engine.manager.LoggerManager;
|
import cd.casic.ci.process.engine.manager.LoggerManager;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import org.apache.hc.client5.http.classic.methods.HttpGet;
|
||||||
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
||||||
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
|
||||||
|
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||||
|
import org.apache.hc.core5.http.HttpResponse;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
@SpringBootTest(classes = {OpsServerApplication.class})
|
@SpringBootTest(classes = {OpsServerApplication.class})
|
||||||
@ActiveProfiles("local")
|
@ActiveProfiles("local")
|
||||||
public class SSETest {
|
public class SSETest {
|
||||||
@ -15,5 +24,22 @@ public class SSETest {
|
|||||||
public void subscribe(){
|
public void subscribe(){
|
||||||
loggerManager.subscribe("716299524330622976",null);
|
loggerManager.subscribe("716299524330622976",null);
|
||||||
}
|
}
|
||||||
|
@Test
|
||||||
|
public void shuimuSSE() throws IOException {
|
||||||
|
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||||
|
HttpGet request = new HttpGet("http://175.6.27.155:10200/api/driverGeneration/progress?uuid=6");
|
||||||
|
request.addHeader("Accept", "text/event-stream");
|
||||||
|
request.addHeader("Authorization", "Bearer xj76K1VJBMrKnCXAzTdPJUCp4B4");
|
||||||
|
|
||||||
|
try (CloseableHttpResponse response = client.execute(request)) {
|
||||||
|
BufferedReader reader = new BufferedReader(
|
||||||
|
new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
System.out.println("收到: " + line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ public class SftpTest {
|
|||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
public void ssh(){
|
public void ssh(){
|
||||||
System.out.println(CryptogramUtil.doDecrypt("cf917c4ff8463a54df75120e2ff802e8"));
|
System.out.println(CryptogramUtil.doDecrypt("b44a50e0cfb98f81c8c003330780c835923c2e5caa1738d61e27ee541be54e2e"));
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
public void getFileList(){
|
public void getFileList(){
|
||||||
@ -68,4 +68,8 @@ public class SftpTest {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@Test
|
||||||
|
public void test00(){
|
||||||
|
System.out.println("{\"code\":0,\"message\":\"OK\",\"data\":\"锟斤拷\\u0000\\u0005t\\u0000锟絳\\\"product\\\":\\\"code\\\",\\\"build\\\":\\\"{\\\\\\\"helper\\\\\\\":\\\\\\\"jar-analyzer\\\\\\\",\\\\\\\"config\\\\\\\":{\\\\\\\"root\\\\\\\":\\\\\\\"./test-1.0.jar\\\\\\\"}}\\\",\\\"project\\\":\\\"搴旂敤妫€娴媉76ce2c9dab224d8cbc79821bcc85b61b\\\",\\\"language\\\":\\\"java\\\"}\"}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user