java动态编译多个代码 java动态编译多个代码的方法

怎么动态编译Java源文件(Write once, run anywhere)” 的目标 。Java类文件中包含的字节代码可以被不同平台上的JVM所使用 。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中 。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类 。在某些情况下,可能会需要动态的生成 Java字节代码,或是对已有的Java字节代码进行修改 。这个时候就需要用到本文中将要介绍的相关技术 。首先介绍一下如何动态编译Java源文件 。
【java动态编译多个代码 java动态编译多个代码的方法】动态编译Java源文件
在一般情况下,开发人员都是在程序运行之前就编写完成了全部的Java源代码并且成功编译 。对有些应用来说,Java源代码的内容在运行时刻才能确定 。这个时候就需要动态编译源代码来生成Java字节代码 , 再由JVM来加载执行 。典型的场景是很多算法竞赛的在线评测系统(如PKU JudgeOnline) , 允许用户上传Java代码,由系统在后台编译、运行并进行判定 。在动态编译Java源文件时,使用的做法是直接在程序中调用Java编译器 。
 JSR 199引入了Java编译器API 。如果使用JDK 6的话,可以通过此API来动态编译Java代码 。比如下面的代码用来动态编译最简单的Hello World类 。该Java类的代码是保存在一个字符串中的 。
 public class CompilerTest {
public static void main(String[] args) throws Exception {
String source = "public class Main { public static void main(String[] args) {System.out.println(\"Hello World!\");} }";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
StringSourceJavaObject sourceObject = new CompilerTest.StringSourceJavaObject("Main", source);
Iterable extends JavaFileObject fileObjects = Arrays.asList(sourceObject);
CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileObjects);
boolean result = task.call();
if (result) {
Java 同一个包在cmd上多文件编译javac的编译单位其实就是单个的java文件java动态编译多个代码,为了达到同时编译多个java文件的目的,可以将所需编译的java文件路径保存在一个txt中,比如sourcelist.txt,以换行为分隔符(这个过程称为类文件注册) 。这些java文件没有彼此联系的必要,它们可以是隶属不同的包、在不同的文件夹下(当然建议包路径相同的java类文件放在同一文件路径下),javac命令只会一行一行地读取其中的记录 , 作为一个单位进行类编译 。
举例说明 。假设java动态编译多个代码你的这个包放在src文件夹下,src的父目录为project,sourcelist.txt也事先新建在project文件夹下 。首先将这个包中你需要编译的java文件相对于src的路径(如src\com\test\Test.java)注册到sourcelist.txt文件中;接着在project文件夹中新建一个bin文件夹(或者class文件夹,命名随你乐意?。?nbsp;, 用以编译后class文件的放置(这个配以javac命令中-d选项去理解);如果还有其java动态编译多个代码他类库(如jxl.jar或者mysql.jar),建议在project目录下新建一个lib(同样命名不限)文件夹,然后复制到该文件夹下(配以-classpath选项理解);最后检查上述准备工作都完成,winR、输入cmd都不用讲,现在在cmd中用cd命令切换到project目录,然后输入命令:
javac -classpath lib/jxl.jar -sourcepath src @sourcelist.txt -d bin
现在就很好理解了 。-d选项就是destination的意思 , 即生成class文件被送到该选项后面的bin文件夹;-classpath就是将你要用到的jar包注册到类加载路径中;-sourcepath就是告诉javac命令去哪里找类文件 。
最后呢,为了方便,可以在project文件夹下新建一个bat文件,并输入以下内容:
javac -classpath lib/jxl.jar -sourcepath src @sourcelist.txt -d bin
@pause
这样每次直接点击即可,而你需要编译其java动态编译多个代码他包的或者其他java文件 , 直接在sourcelist.txt文件中添加或修改 。这其实也是一种“弱耦合”、模块化的表现 。
javac一次可同时编译数个Java源文件吗这个是可以的 。
解释 :javac可以编译多个文件,通过 “javac *.java"实现,前提是这些java文件都要在此编译路径下,如果不在的话 , 先通过cd命令进行位置切换即可 。
java 同时编译多个类的问题通常情况下使用工具进行Java开发不会出现这样的问题,
当你每次保存*.java文件时, JavaIDE会自动删除原来的文件并再次编译新的*.class文件
在工作中不存在说用记事本程序开发Java程序的, 除非你已经强大到不需要IDE等工具做Java开发
希望对你有帮助
关于java动态编译多个代码和java动态编译多个代码的方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读