java - 我可以以某种方式从新的 Java 程序运行以前编译的 Java 字节码吗?

标签 java bytecode

是否可以首先将一组 Java 源代码文件编译为字节码,然后运行该字节码——不是直接运行,而是通过向另一个 java 程序添加命令——这样这个新的 java 程序(在其各个类中)/functions) 运行之前编译的 java 字节码?

如果这是可能的,那么执行此操作所需的命令是什么?

最佳答案

当然 - 这就是图书馆的全部意义!它们通常作为 jar 文件分发,但您不必使用 jar 文件来重用代码。

您需要做的就是确保它在编译时和执行时都位于类路径中。

例如,创建以下文件:

lib\p1\Hello.java:

package p1;

public class Hello {
    public static void sayHi(String name) {
        System.out.println("Hi " + name + "!");
    }
}

app\p2\Greeter.java:

package p2;

import p1.Hello;

public class Greeter {
    public static void main(String[] args) {
        Hello.sayHi(args[0]);
    }
}

现在让我们编译我们的“库”:

$ cd lib
$ javac -d . p1/Hello.java
$ cd ..

现在,通过将其添加到类路径中,我们可以在我们的“应用程序”中使用它:

$ javac -d . -cp ../lib p2/Greeter.java
$ java -cp .:../lib p2.Greeter Jon
Hi Jon!

(这一切都适用于 Windows,只是在最后一行的联合类路径中使用“;”而不是“:”。)

关于java - 我可以以某种方式从新的 Java 程序运行以前编译的 Java 字节码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295169/

相关文章:

java - 如何以自定义格式在 JSF 按钮上显示日期作为标签?

java - 我可以强制执行额外的计划执行吗?

java - 用于访问 Azure Data Lake 的客户端 ID、身份验证 token 端点、客户端 key 是什么?

java - 删除 LineNumberTable 并过滤 LocalVariableTable?

python - 有没有办法以编程方式生成 Python 字节码?

java - Android:抑制方法调用时的警告

java - 使用 Hibernate 和 Java 删除多对多关联中的对象

java - 如何使用 ASM 生成模拟 invokevirtual 的 invokedynamic 调用

Java 虚拟机和 CLR

java - java .class 文件在不同编译器、版本、依赖项之间的差异是什么?