# aardio 范例: 运行 jar 程序



```aardio
//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();
```

