package proxy;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLClassLoader;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class MyCompiler {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
//编译java源代码
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
null, null, null);
String fileName = System.getProperty("user.dir")+"/src/proxy/Hello.java";
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(fileName);
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
null, null, null, compilationUnits);
Boolean success = task.call();
fileManager.close();
System.out.println("Success: " + success);
//load into memory and instance
URL[] urls = new URL[]{new URL("file:/"+ System.getProperty("user.dir")+"/src")};
System.out.println(urls[0]);
URLClassLoader ucl = new URLClassLoader(urls);
Class c = ucl.loadClass("proxy.Hello");
System.out.println(c);
Constructor constructor = c.getConstructor(null);
Hello o = (Hello)constructor.newInstance(null);
//调用具体的方法
o.test();
}
}
分享到:
相关推荐
在Java编程中,有时我们需要在运行时动态地编译源代码文件,并将其打包成可执行的JAR(Java Archive)文件。这样的需求通常出现在我们希望根据用户输入或特定条件生成并执行新的代码逻辑时。本教程将深入讲解如何...
这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...
然后,我们可以调用`compiler.compile()`方法来编译这些源代码: ```java Iterable<? extends JavaFileObject> compilationUnits = ...; // 包含源代码的JavaFileObjects compiler.compile(compilationUnits, ...
Java动态编译是一种技术,允许程序在运行时将源代码转换为字节码并加载到JVM(Java虚拟机)中。这种能力使得Java应用程序能够根据需要编译和执行新的代码,增强了软件的灵活性和可扩展性。在给定的场景中,用户通过...
首先,Java的`javac`命令行工具是用于编译Java源代码的标准方式,但在程序中实现动态编译则需要使用`javax.tools`包中的接口和类。这个包提供了一组API,允许我们直接在程序中进行编译操作,而无需调用外部的`javac`...
Java动态编译指的是在程序运行时将Java源代码编译为字节码并加载到Java虚拟机(JVM)中的过程。这种技术在许多场景下非常有用,例如在开发环境中进行快速迭代、AOP(面向切面编程)或运行时代码生成等。Java的`javax...
6. **类库引用处理**:在反编译过程中,需要识别并处理类库中的方法调用,确保生成的源代码能够正确引用相关的类和方法。 7. **用户界面**:【小颖 Java 反编译专家】提供直观易用的用户界面,允许用户选择要反编译...
3. 编译源代码文件:使用Java编译器(如javac)对源代码文件进行编译,将它们编译成.class字节码文件,并将这些文件存放在classes目录下。 4. 载入并执行编译后的代码:编译完成后,通过类加载器将这些.class文件...
本篇文章将深入探讨如何在Java中调用动态库,并提供相关的源代码示例。 首先,Java提供了Java Native Interface (JNI) 这一框架,允许Java代码与本地代码(如C/C++)进行交互。当我们需要调用DLL时,可以借助JNI...
Java提供了一个名为`javax.tools.JavaCompiler`的API,它允许我们在程序运行时编译源代码。这个API是Java 6引入的,包含在`tools.jar`中,因此需要确保该库在类路径中。以下是一个基本的动态编译示例: ```java ...
标题中的"C调用Java详解和源代码"涉及的是一个跨语言编程的话题,即如何通过C或C++程序来调用Java编写的功能。这种技术主要基于Java Native Interface(JNI),它是Java平台标准版的一部分,用于创建混合(本地和...
Java调用DLL是Java开发中一个重要的技术主题,它允许Java程序与本地操作系统API或者其他C/C++编写的动态链接库进行交互。在Java中,有多种方法可以实现这个功能,其中最常用的是Java Native Interface (JNA) 和 ...
然而,在某些情况下,我们可能希望在运行时动态地生成或修改源代码并立即编译为可执行的字节码。这可以通过Java的`javax.tools.JavaCompiler` API来实现,该API允许我们在程序运行时调用标准Java编译器。 `Class...
而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,...
这个API允许我们在运行时将字符串形式的源代码编译成字节码,并加载到JVM中。使用`JavaCompiler`需要配置编译任务( CompilationTask),并提供一个编译任务的监听器来跟踪编译过程。 另外,有一些库如ASM、...
6. **编译源代码**: 使用`CompilationTask`的`call()`方法执行编译任务。如果成功,编译后的`.class`文件会存储在内存中。 7. **加载并实例化Class对象**: 编译完成后,我们可以通过`ClassLoader`加载这个新...
Java源代码经过编译器转化为字节码,这是一种中间语言,独立于特定平台。JVM通过类加载器加载这些字节码,并由解释器将其转换为机器码执行。然而,这种解释执行模式在性能上不如直接执行机器码。 2. **即时编译...
在Java编程环境中,有时我们需要在程序运行时动态地编译.java源代码文件并执行新生成的类。这种功能在处理代码生成、插件系统或测试自动化等场景中非常有用。本篇文章将深入探讨如何实现Java的动态编译与运行。 1. ...
11. **反射**:Java的反射机制允许在运行时动态地获取类的信息(如类名、方法名)并调用方法,增加了程序的灵活性。 12. **模块系统(Module System)**:Java 9引入的模块系统有助于大型项目的组织和管理,提高...
11. **反射与注解**:Java反射机制可以动态地获取类信息和调用方法,注解提供元数据,用于编译时和运行时的处理,源代码中可能有相关应用。 12. **泛型**:泛型提供类型安全,防止在集合中插入不兼容的类型,源代码...