如何将jar文件包含在Java文件中并在命令提示符下进行编译


121

我有3个jar文件和一个依赖于这些jar文件的.java文件。如何使用命令提示符使用这些jar文件编译.java文件?


9
类型“ javac -help”
肖恩·帕特里克·弗洛伊德


2
希望可以帮助你..
法希姆Parkar

2
自我注意:必须在要运行的Java文件名之前使用-cp / -classpath标志,否则它将忽略该标志。java -cp ".;magic.jar" Foo可以java Foo -cp ".;magic.jar",不是。
德米特里

Answers:


108

您可以使用“ -cp”选项将jar文件包含在“ javac”命令中。

javac -cp ".:/home/path/mail.jar:/home/path/servlet.jar;" MyJavaFile.java

除了“ -cp”,您还可以使用“ -classpath”

javac -classpath ".:/home/path/mail.jar:/home/path/servlet.jar:" MyJavaFile.java

您可以在每次编译时通过正确设置环境变量“ CLASSPATH”来包含jar。环境变量将存储需要用于编译/执行任何java文件的jar和类的路径。您不必在每次编译文件时都单独包含jar。

不同的机器使用不同的方法将类路径设置为环境变量。Windows,Linux等的命令不同。

您可以在此博客中找到更多详细信息。

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html

7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.java为我工作。我正在使用mac。我在某处读到':'用于Unix。
斯里兰卡

2
我已经使用了此命令,但是当尝试访问jar文件中存在的类时,我得到了ClassNotFoundException。
Mohammed Rampurawala

3
怎么.:办?抱歉,这是一个愚蠢的问题,但对我而言并不明显。
米兰达'18

1
@kensen。错字。用分号(;)替换:(冒号)
Pankaj Shinde

以上在ubuntu上对我不起作用。我尝试了不带引号的方法,但效果很好。例如 javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Alfaz Jikani


20

语法将在Windows dos命令上起作用:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java

4
成功执行以上命令后,如何运行java类文件?
Yash Agrawal

java -cp first.jar:second.jar:third.jar MyFile
Krsna Chaitanya

15

尝试通过环境变量设置将所有依赖项jar文件添加到类路径中,或使用以下步骤:

  1. 打开命令提示符。
  2. 将目录更改为要编译的Java文件的位置。
  3. 为依赖项jar文件设置类路径,如下所示:

    set classpath=C:\Users\sarath_sivan\Desktop\jars\servlet-api.jar; C:\Users\sarath_sivan\Desktop\jars\spring-jdbc-3.0.2.RELEASE; C:\Users\sarath_sivan\Desktop\jars\spring-aop-3.0.2.RELEASE;

  4. 现在,您可以编译Java文件了。(命令:javac YourJavaFile.java

希望这能解决您的依赖问题。


15

以下是步骤,

  1. 将所有jar和.java文件复制到同一文件夹中(用文件名代替长路径很容易。尽管可以将jar和.java放在单独的文件夹中)。

  2. 编译,

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. 执行,

    java -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>

我希望这有帮助!


1
感谢您也展示了如何执行。点冒号又会做什么?它是当前目录和文件分隔符吗?
ThisClark

是的,它是当前目录和Unix文件分隔符(在Windows中是分号)。
MathuSum Mut

6

这将创建.class文件:

javac -classpath "[jarname with specified path]" [java filename]

这将执行类文件:

java -cp [jarname with specified path]: [java filename]

1
Java命令显示错误原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory 我要编译** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.java和** run java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java also i tried java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile
Yash Agrawal

5

试试这个。

javac -cp .:jars/jar1:jars/jar2:jars/jar3 com/source/*.java

2

您需要在编译时和运行时指定依赖项

要编译使用此格式

javac -cp "*.jar;classfile_path" filename.java

例:

javac -cp "ojdbc6.jar;c:\programs" Main.java

这个答案虽然正确,但似乎并没有添加其他答案未说的任何内容。如果此答案与其他答案之间存在一些关键区别,则最好解释一下答案为何不同。
DaveyDaveDave

您提到了在运行时以及编译时指定依赖项,但没有解释如何在运行时指定依赖项。
迈克尔·富尔顿

1

有时需要进行以下更改:

java -cp ".;%CLASSPATH%" classfilename 

注意:在Windows上。对于Linux,请$CLASSPATH改用。


1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java

5
尽管这段代码可以解决问题,但包括解释如何以及为何解决该问题的说明,确实可以帮助提高您的帖子质量,并可能导致更多的投票。请记住,您将来会为读者回答问题,而不仅仅是现在问的人。请编辑您的答案以添加说明,并指出适用的限制和假设。
嘟嘟声

0

如果您使用的是Ubuntu:

/opt/JavaServices/sqlite $ export CLASSPATH=/opt/JarFiles/XXXX.jar:/opt/JarFiles/XXXX.jar:/opt/JavaServices/;javac SQLiteSample.java

转到文件夹位置(软件包结构外)

/opt/JavaServices $ export CLASSPATH=/opt/JarFiles/XXXXX.jar:/opt/JarFiles/XXXXX.jar:/opt/JavaServices/;java sqlite.SQLiteSample

注意:请查看文件位置和包名称


-1

对于窗户

  1. 连接到命令提示符下Java文件所在的目录。
  2. 设置类路径(这里d =文件夹名称)设置类路径= C:\ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. 按Enter和
  4. 现在编译Java文件javac filename.java
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.