java动态编译java文件,java动态生成方法

1,java动态生成方法可以的 , 我说说大概思路,很简单 , 你自己具体实现吧,把代码写给你没意义的: 1.将你这段字符串输出到一个文件里 , 用Java类文件的方式命名 。2.调用外部javac命令将该文件编译 。3.用类加载器(ClassLoad)动态加载新的class文件并用Class.forName()注册该类,然后就可以正常使用了 。上面的每一步都能在baidu中找到实现方法,自己发挥吧 。求采纳这个也能实现的,这就得利用java的动态编译,java中可以利用代码临时生成java文件,并且执行编译,运行,但这个有一点麻烦,还要用到java中的反映机制.apache的commons-beanutils包中就有这样的方法,hibernate中映射类中的get与set方法是存在的.最好不要用临时生成java文件,动态编译.
2,在java代码中实现动态编译java文件12345678910111213141516171819import javax.tools.*;import java.io.*;/** * @author hardneedl */final public class MyCompile /** * @param args 命令行参数只有1个,即待编译的源代码文件的绝对路径 * @throws FileNotFoundException */ public static void main(String... args) throws FileNotFoundException JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int r = compiler.run(null,null,null,args[0]); System.out.println(r == 0? "成功":"失败"); } }
3,在java代码中实现动态编译java文件import javax.tools.*;import java.io.*;/** * @author hardneedl */final public class MyCompile /** * @param args 命令行参数只有1个,即待编译的源代码文件的绝对路径 * @throws FileNotFoundException */ public static void main(String... args) throws FileNotFoundException JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int r = compiler.run(null,null,null,args[0]); System.out.println(r == 0? "成功":"失败"); }}【java动态编译java文件,java动态生成方法】
4,如何用javac 和java 编译运行整个Java工程前言 本文教你怎么用javac和java命令 以及如何利用脚本(shell或bat)方便处理 并用简单的实例展示这些用法IDE是把双刃剑 它可以什么都帮你做了 你只要敲几行代码 点几下鼠标 程序就跑起来了 用起来相当方便 你不用去关心它后面做了些什么 执行了哪些命令 基于什么原理 然而也是这种过分的依赖往往让人散失了最基本的技能 当到了一个没有IDE的地方 你便觉得无从下手 给你个代码都不知道怎么去跑 好比给你瓶水 你不知道怎么打开去喝 然后活活给渴死之前用惯了Myeclipse Java文件编译运行的命令基本忘得一干二净 现在项目出了原型 放到服务器上去测试 SSH一登陆上服务器就傻眼了 都是命令行 以前程序图标什么的都成了浮云 程序放上去了不知道怎么去编译运行 只能补补课了 下面做下补课笔记一 javac命令javac 用于编译Java文件 格式为 java [options][sourcefiles] [@files]其中 options 命令行选项 sourcefiles 一个或多个要编译的源文件 @files 一个或多个对源文件进行列表的文件 有时候要编译的文件很多 一个个敲命令会显得很长 也不方便修改 可以把要编译的源文件列在文件中 在文件名前加@ 这样就可以对多个文件进行编译 对编译一个工程很有用 方便 省事有几个比较重要的选项 d 用于指定编译成的class文件的存放位置 缺省情况下不指定class文件的存放目录 编译的class文件将和源文件在同一目录下 classpath 可以简写成 cp 用于搜索编译所需的class文件 指出编译所用到的class文件的位置 如jar zip或者其他包含class文件的目录 指定该选项会覆盖CLASSPATH的设定 sourcepath用于搜索编译所需的源文件(即java文件) 指定要搜索的源文件的位置 如jar zip或其他包含java文件的目录 需要注意windows下和linux下文件路径分隔符和文件列表(即 classpath和 sourcepath指定的文件)分隔符的区别 windows下文件路径分隔符用 \ 文件列表分隔符用分号 linux下文件路径分隔符用 / 文件列表分隔符用冒号 二 java命令java 用于执行程序 格式如下 java [options] classfile options 命令行选项 一般用于 classpath 指定要执行的文件所在的位置以及需要用到的类路径 包括jar zip和class文件目录 会覆盖CLASSPATH的设定三 脚本如果要敲的命令很长 每次要编译运行的时候都要重新敲一遍 这是一件很痛苦的事情 所以用脚本可以大大方便你的工作量 在linux下用shell脚本 windows下用bat批处理程序 因为是在linux下 我这里只是简单介绍一下shell 关于bat批处理程序的语法自己百度一下 不难开头linux有很多不同的shell 通常使用bash(bourne again shell) 程序必须以下面的行开始 #!/bin/sh #!用来告诉系统用后面的参数来执行程序 这里使用的是/bin/sh要使你的脚本能够执行 还必须让这个文件有可执行权限 使用下面命令更改文件权限 chmod +x filename 注释以#开始的句子表示注释 一直到这行结束 多写注释有利于以后重新看的时候知道自己在做什么 变量shell的脚本的变量都是字符串 不用申明类型 定义的时候直接变量=值即可 用到变量的的时候用 $变量 或者 $view plain #!/bin/sh # Define some constants ONSSERVER=ONSServer PROJECT_PATH=/root/iot oid JAR_PATH=$PROJECT_PATH/lib BIN_PATH=$PROJECT_PATH/bin SRC_PATH=$PROJECT_PATH/src/$ONSSERVER# First remove the sources list file if it exists and then create the sources file of the project rm f $SRC_PATH/sources find $SRC_PATH/ name * java > $SRC_PATH/sources list# First remove the ONSServer directory if it exists and then create the bin directory of ONSServer rm rf $BIN_PATH/$ONSSERVER mkdir $BIN_PATH/$ONSSERVER# Compile the project javac d $BIN_PATH/$ONSSERVER classpath $JAR_PATH/jdom jar $JAR_PATH/oro jar @$SRC_PATH/sources list下面是文件run 用于执行程序 view plain #!/bin/sh# Define some constants ONSSERVER=ONSServer PROJECT_PATH=/root/iot oid JAR_PATH=$PROJECT_PATH/lib BIN_PATH=$PROJECT_PATH/binlishixinzhi/Article/program/Java/hx/201311/270245 , 如何编译一个java文件javac 用于编译Java文件 , 格式为:java [options][sourcefiles] [@files]其中:options:命令行选项;sourcefiles:一个或多个要编译的源文件;@files:一个或多个对源文件进行列表的文件,有时候要编译的文件很多,一个个敲命令会显得很长,也不方便修改,可以把要编译的源文件列在文件中,在文件名前加@,这样就可以对多个文件进行编译 , 对编译一个工程很有用,方便,省事 。有几个比较重要的选项:-d 用于指定编译成的class文件的存放位置,缺省情况下不指定class文件的存放目录 , 编译的class文件将和源文件在同一目录下;-classpath 可以简写成-cp,用于搜索编译所需的class文件,指出编译所用到的class文件的位置,如jar、zip或者其他包含class文件的目录,指定该选项会覆盖CLASSPATH的设定;-sourcepath用于搜索编译所需的源文件(即java文件),指定要搜索的源文件的位置 , 如jar、zip或其他包含java文件的目录;需要注意windows下和linux下文件路径分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的区别:windows下文件路径分隔符用 \ ,文件列表分隔符用分号 ;linux下文件路径分隔符用 / ,文件列表分隔符用冒号 :首先你要配置好环境变量JAVA_HOME和CLASSPATH两个环境变量然后在命令行进入你的java文件的路径输入javac 你的文件名.javacd 文件所在目录如果不是当前根目录要切换 。比如在d:/programs/java/下,打开cmd默认是c盘,你就应该输入:d:cd d:/programs/javajavac xxxx.javajava xxxx就行了 。6 , 怎么动态编译Java源文件(Write once, run anywhere)” 的目标 。Java类文件中包含的字节代码可以被不同平台上的JVM所使用 。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中 。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出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 CompilerTestpublic static void main(String[] args) throws ExceptionString source = "public class MainJavaCompiler 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) {

    推荐阅读