我可以编译依赖于.class文件的Java代码,但是没有源.java文件吗?

时间:2019-04-30 19:45:57

标签: java

我正在尝试将两个.class文件添加到来自要修改的Vendor SDK的.jar中。当我编译依赖于.jar中的类的两个新的.java文件时,我可以使用-cp blahblahblah.jar进行编译,还是需要使用这些类本身进行编译?

作为后续,我是否可以编译与file_2.java相同的程序包中的file_1.java,但是我只有file_2.class?

我将使用.jar编译的两个.class文件放入.jar本身,但这看起来像是一个破坏性循环,在其中使用自身进行编译。我觉得我需要使用软件包来编译它们,但是我没有.java文件,只有.class文件。

1 个答案:

答案 0 :(得分:0)

从技术上讲,您可以使用-cp选项执行javac。但是,由于javac和java对类路径和依赖项非常挑剔,因此,如果使用诸如Ant,Maven或Gradle之类的构建工具,效果会更好。

编辑-添加了示例

这是它在普通javac中的工作方式

导入的类

public class ImportedClass {
    public static void doThis() {
        System.out.println("This is from the Imported Class");
    }
}

MainClass

public class MainClass {
  public static void main(String... args) {
    System.out.println("started");
    ImportedClass.doThis();
    System.out.println("Hurray!!!");
  }
}

首先使用javac ImportedClass.java编译ImportedClass.java 然后将创建ImportedClass.class文件。不要将其保留在同一目录中,因为默认情况下,javac将当前目录用作类路径。

如果您尝试在类路径中没有MainClass.java的情况下编译ImportedClass.class,则会失败。

如果我们尝试使用-cp <folder>进行编译,则会对其进行编译。

enter image description here

但是,这是一个非常基本的示例。对于大于此的任何内容,您可能必须使用Apache Maven。蚂蚁太老了,gradle比maven复杂一点,所以我对Apache Maven的两分钱