如何使用javac从.jar导入编译.java文件?

时间:2015-07-18 20:27:09

标签: java

我需要编译一个.java文件,该文件从.jar文件导入类而不反编译.jar。 Javac在编译时给出了错误,因为它无法找到我要导入的类的源代码。我不想反编译.jar只是为了获取导入的源代码。我可以做些什么来编译它们?

2 个答案:

答案 0 :(得分:0)

回答标题问题:

  

如何在没有javac的情况下将.java文件编译为.class?

第一个解决方案:您可以简单地将javac文件重命名为dragon_compiler之类的其他内容,因此现在您可以使用dragon_compiler编译java文件,而不是javac < / p>

第二个解决方案:实现自己的java编译器并根据需要命名,也许toastc

<小时/> 你首先质问身体:

  

我需要编译.java文件而不反编译整个.jar

编译java文件和jar文件之间没有任何关系,jar文件是一堆编译/未编译的java文件。

  

只需编辑几个类,Javac就会给我错误,我能做到   要编译它们吗?

老实说没有得到这个,但你可能会得到你想要编辑的任何类的签名(方法,字段),现在创建一个具有相同名称和包的新类文件,并将该类实现为您的业务,这这不是一个很好的做法,在某些情况下它不起作用。

<小时/> 建议:

您可以使用Java DJ Decompiler试图反编译已编译的类和jar文件,只需复制代码,编辑并重新编译它们,但这个工具并不像它应该的那样聪明,但是给出了一些手。

如果你熟悉反射api,那么这个api会在运行时提供一些帮助。

最好的解决方案是找到所需类/ jar文件的来源,99%的java库都是开放课程,除非你从1%获得一个。

答案 1 :(得分:0)

我将对你在这里的意思做一些假设。首先,我会假设你想要做的事情是有道理的,即使它没有特别清楚地写出来。这个假设和你的评论让我相信你有一个.java文件,它有一些import语句,并且一些(或所有)导入的类来自这个.jar文件。

这通常不是问题。您通常不需要java.util.HashMap的源代码,以便在您自己的代码中使用它。您所要做的就是确保java编译器可以看到您要导入的类的.class文件,它只是有效。

所以现在这个问题简化为:“如何在类路径上获取.jar文件,以便javac能够使用它?”所以我们假设这个.jar文件名为myjar.jar,你的类名为myclass.java。 ...

在unix或windows系统上输入命令shell

javac -classpath myjar.jar myclass.java

如果这些文件不在当前目录中,则必须提供这些文件的路径。

还有其他方法可以做到这一点:CLASSPATH环境变量(Oracle似乎不喜欢),或者使用像Eclipse或NetBeans这样的IDE。如果您需要更多相关信息,请告诉我们。

您可以查看http://docs.oracle.com/javase/8/docs/technotes/tools/unix/classpath.html#CBHHCGFB(对于unix系统)或http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html#CBHHCGFB(对于Windows系统)以了解更多信息。不要忽略http://docs.oracle.com/javase/8/作为资源,以获取有关许多java主题的更多信息。