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

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

2019-06-08 08:38:52 阅读:()

本来准备简单整理一下Commons Compress项目示例的,却在浏览Commons项目列表的时候看到了JCI,对于它的将Java源文件编译成Class的实现倒是没那么感兴趣,让我入手实践的是它提供的监听文件夹、文件发生变更的实现,换句话说,就是可以实现对于某个文件(或文件夹)的创建、修改、删除动作后的监听,我猜它提供的这个功能应该是为实现热部署的,但是本篇文章还是先从将Java源文件编译成Class文件开始说起,把监听这个实现放在最后。

有可能你知道将Java源文件编译成Class的实现我们完全可以调用jdk/bin/jvac.exe命令去实现,但这里说的不是这种实现,实现比较简单,但却是官网(整个网络上)给出少有示例的分享,包括了完整的示例代码调用,这都是花费了许多时间debug出来的,不废话,开始实现,通过调用代码实现将d:\test\compiler文件夹中的SimpleNoPackage.java编译成对应的Class文件

maven坐标

<dependency>
  <
groupId>junit</groupId>
  <
artifactId>junit</artifactId>
  <
version>4.12</version>
  <
scope>test</scope>
</
dependency>
<!-- jci-core -->

<dependency>
  <
groupId>org.apache.commons</groupId>
  <
artifactId>commons-jci-eclipse</artifactId>
  <
version>1.1</version>
</
dependency>

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 8:03
 *
无包路径的java文件编译为class
 */
public class NoPackageClassCompiler extends TestCase {

   
/**
     * @author chendd
     * @date 2019/6/8 8:17
     *
方法的描述:在sourceDir目录下将一些java源文件编译为class
     */
   
public void test() throws Exception {
        String sources[] =
new String[] { "SimpleNoPackage.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");
    }

}

被编译的SimpleNoPackage.java文件

blob.png

编译后的Class文件

blob.png

参考官网项目介绍

http://commons.apache.org/proper/commons-jci/usage.html

http://commons.apache.org/proper/commons-jci/xref/org/apache/commons/jci/examples/commandline/CommandlineCompiler.html

http://commons.apache.org/proper/commons-jci/xref/org/apache/commons/jci/examples/serverpages/ServerPageServlet.html

示例代码下载(后面几篇文章相同)

https://gitee.com/88911006/chendd-examples

你可能感兴趣的:
      关键字:commons(18)jci(15)org(12)apache(12)java(11)
      互动()
      评论()
      比起点赞,站长更喜欢登录后的评论
      • 0
      • 0
      • 0
      • 0
      • 0