package com.taobao.easyweb.core.app.deploy.process; import com.taobao.easyweb.core.Configuration; import com.taobao.easyweb.core.app.App; import com.taobao.easyweb.core.app.AppLogger; import com.taobao.easyweb.core.app.deploy.DeployException; import com.taobao.easyweb.core.app.deploy.DeployPhase; import com.taobao.easyweb.core.app.deploy.Deployer; import com.taobao.easyweb.core.app.scanner.ScanResult; import com.taobao.easyweb.core.groovy.groovyobject.AppClassLoaderFactory; import com.taobao.easyweb.core.groovy.groovyobject.GroovyObjectLoader; import groovy.lang.GroovyClassLoader; import org.codehaus.groovy.control.CompilerConfiguration; import org.codehaus.groovy.tools.FileSystemCompiler; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.io.File; import java.util.List; /** * User: jimmey/shantong * DateTime: 13-4-25 ����2:55 */ @Deployer(DeployPhase.COMPILE_GROOVY) @Component public class BizProcessor extends FileProcessor { @Resource private GroovyObjectLoader groovyObjectLoader; @Override public void process(ScanResult result) throws DeployException { App app = result.getApp(); List<String> groovyCode = result.getBizGroovyFiles(); String appClassPath = Configuration.getClasspath(app); // try { // FileUtils.deleteDirectory(new File(appClassPath)); // FileUtils.deleteQuietly(new File(appClassPath)); // FileUtils.forceDeleteOnExit(new File(appClassPath)); // } catch (Exception e) { // AppLogger.getAppLogger(app.getAppKey(), "Groovy-Compile").error(e); // } deleteDirectory(app, new File(appClassPath)); CompilerConfiguration configuration = new CompilerConfiguration(); configuration.setTargetDirectory(appClassPath); FileSystemCompiler compiler = new FileSystemCompiler(configuration); try { compiler.compile(groovyCode.toArray(new String[groovyCode.size()])); } catch (Exception e) { //todo ������������Ӧ������ʧ�� AppLogger.getAppLogger(app.getAppKey(), "Groovy-Compile").error(e); throw new DeployException("Complie Error", e); } try { /** * ����biz classloader��classpath */ GroovyClassLoader classLoader = AppClassLoaderFactory.getAppBizClassLoader(app); classLoader.addClasspath(appClassPath); /** * ��ʵ����groovy���� */ for (String file : groovyCode) { groovyObjectLoader.instanceObject(false, app, new File(file)); } /** * �������ע�� */ for (String file : groovyCode) { groovyObjectLoader.autowiredObject(false, app, new File(file)); } } catch (Exception e) { AppLogger.getAppLogger(app.getAppKey(), "Groovy-Init").error(e); throw new DeployException("Init Error", e); } } private void deleteDirectory(App app, File file) { try { if (file.isFile()) { file.delete(); } else { for (File c : file.listFiles()) { deleteDirectory(app, c); } } } catch (Exception e) { AppLogger.getAppLogger(app.getAppKey(), "Groovy-Compile").error(e); } } }