aardio 文档

aardio 范例: 运行 jar 程序

//aardio 运行 jar 程序
import java;
import console; 
import java.yuiCompressor;//下载一个jar用于测试

/*
实际上调用Java虚拟机,
并且调用 main函数也可以运行 jar 程序,例如:

import java;
java.addClassPath("~\lib\java\yuiCompressor\.res\yuicompressor.jar")

var jvm = java(); 
YUICompressor = jvm.import( "com.yahoo.platform.yui.compressor.YUICompressor");  
var ret = YUICompressor.main({"d:\test.js", "-o","d:\testmin.js"})

但是这样运行有一个问题, jar中的 main 函数通常会假设自己是一个独立进程,
这样例如上面的 YUICompressor ,他在出错时就会调用 System.exit() 关闭当前进程.
对于这类程序就可以考虑用下面的方法创建子进程,关闭子进程不会影响到父进程
*/
var prcs = java.popenProcess( 
    "-verbose:class",//记录类载入信息
    "-jar",//运行jar
    io.fullpath( "~\lib\java\yuiCompressor\.res\yuicompressor.jar" ),
    "d:\test.js"
); 

var tOutBuffer = {}; 
for( all,out,err in prcs.each() ){
    console.log( out,err );
    table.push( tOutBuffer,all);
}

//在输出结果中搜索类加载信息
var outBuffer = string.join( tOutBuffer );
var logClass = {}
for classPath,filePath in string.gmatch(outBuffer 
    ,"\[Loaded\s+(.+?)\s+from\s+([^\]]+)" ) { 
    logClass[classPath] = filePath;
}

//这个就是得到的结果了
for(classPath,filePath in logClass){
    console.log(classPath) 
    console.log( " =>",fsys.shortpath(filePath),'\n' ) 
}

console.pause();
Markdown 格式