如何使用.jar库编译Java程序

时间:2011-05-20 00:21:16

标签: java compiler-construction

我无法让javac识别外部.jar文件,我试图扩展其类。我在同一目录中有两个文件:TestConsole.java和acm.jar。我正在使用以下命令从同一目录编译:

javac -classpath .:acm.jar TestConsole.java

但似乎javac只是忽略了acm.jar。它给了我错误:

TestConsole.java:1: package acm does not exist
import acm.program;
          ^

当然,acm.program是acm.jar中的一个包。 acm.jar中的所有类都已编译;我只是想在我的课程中使用它们,而不是编译它们。

我做错了什么?

我在Mac上运行它,并且acm.jar的目录结构似乎是有效的:它包含acm/program目录,其中ConsoleProgram.classTestConsole唯一的类javac -classpath ".:acm.jar" TestConsole.java } extends。

{{1}}也不起作用。

6 个答案:

答案 0 :(得分:23)

javac -cp <jar you want to include>;<jar you want to include> <source.java> 

<jar you want to include>如果在同一目录中,只需jar的名称即可,如果没有,则指定完整路径或相对路径

如果有多个罐子,请与,

分开

;替换为:

上的unix

如果可能,请使用Eclipse之类的IDE。我曾经在类似的事情上花了很多时间,但在工业界,你几乎不会以这种方式去做。

答案 1 :(得分:6)

您是否在Windows计算机上运行这些命令?在Windows上,类路径的元素由分号分隔,而不是冒号。所以:

javac -classpath .;acm.jar TestConsole.java

另一种可能性:acm.jar的结构是错误的。内部的类文件是从声明package acm.program的文件中编译的还不够 - 包结构也必须表示为目录层次结构,因此acm.jar必须包含目录acm,并且一个子目录program,其中包含TestConsole中使用的类的实际类文件。

答案 2 :(得分:3)

检查清单:

  1. 您在acm.jar中的课程显示为:

    ACM /编程/ CLASSX.class

    ACM /程序/ CLASSY.class

    用jar tf acm.jar滗析

  2. 您输入的内容如下:

  3. import acm.program.CLASSX;

    import acm.program。*;

答案 3 :(得分:1)

无论谁试图编译,但在奋战了几个小时后仍然遇到问题,我一直遵循上面的所有答案,但由于一个小问题,它仍然无法运行该程序。

毫无疑问的问题是,每包包装后都会出现半冒号。我不确定Mac或Linux,但对于Windows命令提示符,情况就是这样

javac -cp mysql-connector-java-8.0.12.jar; Testing.java

java -cp mysql-connector-java-8.0.12.jar; Testing

应同时进行案例编译或运行。

答案 4 :(得分:-1)

我只是为那些在编译成功后仍在寻找相同问题答案的人添加。

编译时使用@Michael Borgwardt建议的命令:

javac -classpath .;acm.jar TestConsole.java

对于执行,您还需要指定类路径:

java -classpath .;acm.jar TestConsole

答案 5 :(得分:-1)

落后很多年,但我在使用这种语法时遇到了困难,这对我来说可以将所有 jar 文件添加到主类中,并将程序中的所有类编译到主类中

我的文件树: 存储类 .java 文件 jars .jar 文件
图片 .PNG 文件

命令行:

C:\Store>javac -cp "jars/" classes/.java classes/storeMain.java