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

Reb*_*son 15 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;
          ^
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

我在Mac上运行它,并且acm.jar的目录结构似乎是有效的:它包含一个acm/program目录,它有ConsoleProgram.class唯一的TestConsole扩展类.

javac -classpath ".:acm.jar" TestConsole.java 也行不通.

Bhu*_*han 23

javac -cp <jar you want to include>;<jar you want to include> <source.java> 
Run Code Online (Sandbox Code Playgroud)

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

如果不止一个罐子,分开 ,

更换;:unix

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


Mic*_*rdt 6

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

javac -classpath .;acm.jar TestConsole.java
Run Code Online (Sandbox Code Playgroud)

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


And*_*rew 3

检查清单:

  1. acm.jar 中的类显示为:

    acm/程序/CLASSX.class

    acm/程序/CLASSY.class

    当用罐子 tf acm.jar 倾析时

  2. 您将像这样导入它们:

导入 acm.program.CLASSX ;

或者

导入 acm.program.* ;