com.smartdoc.util.MojoUtils Maven / Gradle / Ivy
package com.smartdoc.util;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.power.common.util.FileUtil;
import com.power.doc.model.ApiConfig;
import com.power.doc.model.ApiDataDictionary;
import com.power.doc.model.ApiErrorCodeDictionary;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.project.MavenProject;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
/**
* @author xingzi 2019/12/07 21:19
*/
public class MojoUtils {
/**
* Gson Object
*/
public final static Gson GSON = new GsonBuilder().addDeserializationExclusionStrategy(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes fieldAttributes) {
return false;
}
@Override
public boolean shouldSkipClass(Class> aClass) {
return false;
}
}).create();
/**
* Build ApiConfig
*
* @param configFile config file
* @param projectName project name
* @param project Maven project object
* @return com.power.doc.model.ApiConfig
*/
public static ApiConfig buildConfig(File configFile, String projectName, MavenProject project) {
try {
URL[] runtimeUrls;
List runtimeClasspathElements = project.getRuntimeClasspathElements();
runtimeUrls = new URL[runtimeClasspathElements.size()];
for (int i = 0; i < runtimeClasspathElements.size(); i++) {
String element = (String) runtimeClasspathElements.get(i);
runtimeUrls[i] = new File(element).toURI().toURL();
}
String data = FileUtil.getFileContent(new FileInputStream(configFile));
ApiConfig apiConfig = GSON.fromJson(data, ApiConfig.class);
List apiDataDictionaries = apiConfig.getDataDictionaries();
List apiErrorCodes = apiConfig.getErrorCodeDictionaries();
if (apiErrorCodes != null) {
apiErrorCodes.forEach(
apiErrorCode -> {
String className = apiErrorCode.getEnumClassName();
apiErrorCode.setEnumClass(getClassByClassName(className, runtimeUrls));
}
);
}
if (apiDataDictionaries != null) {
apiDataDictionaries.forEach(
apiDataDictionary -> {
String className = apiDataDictionary.getEnumClassName();
apiDataDictionary.setEnumClass(getClassByClassName(className, runtimeUrls));
}
);
}
if (!StringUtils.isBlank(apiConfig.getProjectName())) {
apiConfig.setProjectName(projectName);
}
return apiConfig;
} catch (FileNotFoundException | MalformedURLException | DependencyResolutionRequiredException e) {
e.printStackTrace();
return null;
}
}
/**
* 根据 com.xxx.AClass获取类Class
*
* @param className 类名
* @param runtimeUrls urls
* @return 类类型
*/
public static Class getClassByClassName(String className, URL[] runtimeUrls) {
try {
URLClassLoader newLoader = new URLClassLoader(runtimeUrls,
Thread.currentThread().getContextClassLoader());
return newLoader.loadClass(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy