登录 
欢迎来到陈冬冬(雪地里走)的学习天地 | 经验分享整理平台 | 陈冬冬
 服务器本次启动于:2个月前 

commons jci最佳实践(二)动态编译含包路径的java文件

2019-06-08 09:03:40 阅读:()

接前篇文章,主要是API的调用是debug出来的,现在看到的代码较为简单,但分析出来这么写的过程使复杂的,本篇文章意在实现带包路径的源文件编译,示例中给出一个主类SimpleTest.java和一个多线程的匿名内部类定义,我们知道编译后的Class文件应该是有两个,分别是SimpleTest.class和SimpleTest$1.class,详细代码及运行结果参考如下:

Test代码

package cn.chendd.example;

import junit.framework.TestCase;
import org.apache.commons.jci.compilers.CompilationResult;
import org.apache.commons.jci.compilers.JavaCompiler;
import org.apache.commons.jci.compilers.JavaCompilerFactory;
import org.apache.commons.jci.problems.CompilationProblem;
import org.apache.commons.jci.readers.FileResourceReader;
import org.apache.commons.jci.stores.FileResourceStore;

import java.io.File;
import java.util.Arrays;

/**
 * @author chendd
 * @date 2019/6/8 9:20
 *
包路径的java文件编译为class
 */
public class PackageClassCompiler extends TestCase {

   
/**
     * @author chendd
     * @date 2019/6/8 9:22
     *
方法的描述:在sourceDir目录下将一些含包路径的java源文件编译为class
     */
   
public void testSimpleTestCompiler() {

        String sources[] =
new String[] { "cn/chendd/examples/SimpleTest.java" };
        File sourceDir =
new File("D:\\test\\compiler");
        File targetDir =
new File("D:\\test\\compiler");
        JavaCompiler compiler =
new JavaCompilerFactory().createCompiler("eclipse");
        ClassLoader classloader = getClass().getClassLoader();
        CompilationResult result = compiler.compile(sources,
new FileResourceReader(sourceDir),
               
new FileResourceStore(targetDir) , classloader);
        CompilationProblem[] errors = result.getErrors();
        System.
out.println(errors.length + " errors");
       
if(errors.length > 1){
            System.
out.println(Arrays.toString(errors));
        }
        System.
out.println(result.getWarnings().length + " warnings");
    }

}

被编译的SimpleTest.java

blob.png

编译后的Class文件

blob.png




你可能感兴趣的:
      关键字:import(9)java(8)commons(7)jci(7)class(7)
      互动()
      评论()
      比起点赞,站长更喜欢登录后的评论
      • 0
      • 0
      • 0
      • 0
      • 0