java_基础——在代码里编译.java文件

  【本文介绍】  

  本文不是深入理解和使用java编译器,只是在代码里编译.java文件的helloWorld。这种技术还是蛮有意思的,说不定在将来的某些只能化项目会运用到!^_^

  【编译最基础的流程】

  

  【java代码】

 1 package com.zjm.www.test;
 2
 3 import java.io.IOException;
 4
 5 import javax.tools.JavaCompiler;
 6 import javax.tools.JavaCompiler.CompilationTask;
 7 import javax.tools.StandardJavaFileManager;
 8 import javax.tools.ToolProvider;
 9
10 public class Test {
11
12     public static void main(String[] args) {
13
14           // 获取.java文件路径
15           String fileName = System.getProperty("user.dir")+
16             "\\src\\com\\zjm\\www\\test\\TankTimeProxy.java";
17
18           /**
19            * ToolProvider类:该类是为查找工具提供者提供方法,例如,编译器的提供者。)
20            * getSystemJavaCompiler:获取此平台提供的 Java™ 编程语言编译器。
21            */
22           JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
23
24           /**
25             * getStandardFileManager: 为此工具获取一个标准文件管理器实现的新实例。
26             * 参数:
27             *    diagnosticListener - 用于非致命诊断信息的诊断侦听器;如果为 null,则使用编译器的默认方法来报告诊断信息
28             *    locale - 格式化诊断信息时要应用的语言环境;如果为 null,则使用默认语言环境。
29             *    charset - 用于解码字节的字符集;如果为 null,则使用平台默认的字符集
30             * 返回:
31             *    标准文件管理器
32             *
33            */
34           StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null,null,null);
35
36           /**
37                * getJavaFileObjects:获取表示给定文件的文件对象。
38                * 参数:
39             *    files - 文件数组
40             * 返回:
41             *    文件对象列表
42            */
43           Iterable units = fileMgr.getJavaFileObjects(fileName);
44
45           /**
46                * getTask:使用给定组件和参数创建编译任务的 future
47                * 参数:
48             *    out - 用于来自编译器的其他输出的 Writer;如果为 null,则使用 System.err
49             *    fileManager - 文件管理器;如果为 null,则使用编译器的标准文件管理器
50             *    diagnosticListener - 诊断侦听器;如果为 null,则使用编译器的默认方法报告诊断信息
51             *    options - 编译器选项;null 表示没有选项
52             *    classes - 类名称(用于注释处理),null 表示没有类名称
53             *    compilationUnits - 要编译的编译单元;null 表示没有编译单元
54             * 返回:
55             *    表示编译的对象
56            */
57           CompilationTask t = compiler.getTask(null,null,null,null,null,units);//编译任务
58
59           //6  开始编译
60           t.call();
61
62           //7  关闭“java编译器”
63           try {
64             fileMgr.close();
65         } catch (IOException e) {
66             e.printStackTrace();
67         }
68     }
69 }

java_基础——在代码里编译.java文件

时间: 2024-10-09 12:07:30

java_基础——在代码里编译.java文件的相关文章

Java千百问_08JDK详解(008)_通过代码如何编译java文件

点击进入_更多_Java千百问 1.通过代码如何编译java文件 编译器是一个命令行工具(jdk自带的编译工具javac,了解javac看这里:javac是什么),但也可以使用API来调用(一般的IDE都会使用这一组API来封装自己的编译功能).编译器遵循Java语言规范(The Java Language Specification,JLS)和Java虚拟机规范(The Java Virtual Machine Specification,JVMS). 在Java 6之后,提供了标准包来操作J

Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mvn clean compile 时出错如下: 原因是在eclipse中添加了 exteneral jar后,还需要在maven中再添加依赖的jar包 Maven手动添加第三方依赖包有两种方法: 参考:maven 添加第三方依赖              maven中把依赖的JAR包一起打包 第一种方法是使

【二】命令行编译Java文件

①运行→cmd→ ②常用指令:进入E盘是“e:”回车 打开文件夹是“cd 文件夹名”比如“cd work” “dir”是看当前文件夹下面的文件 编译java文件的命令是“javac XXXO.java”,会生成一个class文件, 执行class文件命令式“java XXXO”(无需后缀名) ③Java对大小写敏感,java文件名需和里面的类名一致 ④hello word代码: public class hello{ public static void main(String args [])

Eclipse不能自动编译 java文件的解决方案

前段时间出现了eclipse 不自动编译java文件的问题,在网上找了好长时间,总算把问题解决了,现在把这个问题的解决方法总结一下. 1,看看project -- Build Automatically有没有勾上?如果没有,勾上以后,clean一下,重启eclipse 2,看看你的lib里面有没有不用的jar包,看你的.classpath文件中有没有错误的路径. 3,这是最重要的一点,有problems视图中查看有没有关于本项目的错误信息,一般都会有这样的话: The project canno

在用mvn编译java文件时遇到问题

问题一:找不到加载主类 为什么会出现这类加载失败的问题那??? 一看这个问题就是环境变量配置有问题,找到问题解决就ok了!!! 问题二:无法用mvn编译java文件 这个问题是由于pom.xml文件出现了问题,我们把pom文件改好就ok了,pom文件对于maven很重要,所有的配置都在pom.xml文件中,一定要把它搞熟悉,那后面的工作也就很好做了. 刚来公司一个月,感觉越学东西越多,越学越感觉自己很无知,一个月以来我很浮躁,但慢慢的懂得了,知识就像我们每天吃饭一样,定时定量的吃,只有这样我们才

Eclipse不自动编译java文件的终极解决方案

最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般是如下几个步骤.但是还是不自动编译. 最基本的解决办法--这是前提 然后clean和refresh下项目.如果这样还是不行,用下面的方法吧,终极解决方案...... 1:去除项目中的jre的classpath 2:在将jre的包添加到classpath中来 OK,大功告成!再出现eclipse无法自

30天轻松学习javaweb_通过javac编译java文件

通过javac编译java文件1.先导入需要引用的包D:\Program Files (x86)\apache-tomcat-7.0.53\webapps\test\WEB-INF\classes>set classpath=%classpath%;D:\Program Files (x86)\apache-tomcat-7.0.53\lib\servlet-api.jar 2.将java文件按包名称编译到当前文件夹D:\Program Files (x86)\apache-tomcat-7.0

jdk编译java文件时出现:编码GBK的不可映射字符

出现此问题的几种解决办法: 1.cmd下使用javac编译java文件 如: javac test.java 解决办法:编译时加上encoding选项 javac -encoding UTF-8 test.java or javac -encoding UTF-8 -d . test.java 2.IntelliJ IDEA 导入单独的java文件时编译出现此错误   解决办法:由于IDEA不具有自动转换字符编码类型,所以需要先点击右下角的UTF-8保存为GBK类型保存,再次点击点击GBK保存为

JAVA核心技术I---JAVA基础知识(文件系统及java文件基本操作)

一:文件概述 文件系统是由OS(操作系统)管理的 文件系统和Java进程是平行的,是两套系统 文件系统是由文件夹和文件递归组合而成 文件目录分隔符 –Linux/Unix 用/隔开 –Windows用\隔开,涉及到转义,在程序中需用/或\\代替 文件包括文件里面的内容和文件基本属性 文件基本属性:名称.大小.扩展名.修改时间等 二:文件类File java.io.File是文件和目录的重要类(JDK6及以前是唯一) –目录也使用File类进行表示 File类与OS无关,但会受到OS的权限限制 常