如何在 java 文件中包含 jar 文件并在命令提示符下编译

Posted

技术标签:

【中文标题】如何在 java 文件中包含 jar 文件并在命令提示符下编译【英文标题】:How to include jar files with java file and compile in command prompt 【发布时间】:2012-03-12 19:19:24 【问题描述】:

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

【问题讨论】:

输入“javac -help” docs.oracle.com/javase/6/docs/technotes/tools/index.html#basic 希望this能帮到你.. 自我注意:必须在要运行的java文件名前使用-cp/-classpath标志,否则会忽略该标志。 java -cp ".;magic.jar" Foo 可以 java Foo -cp ".;magic.jar" 不行。 【参考方案1】:

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

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

你也可以使用“-classpath”来代替“-cp”

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

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

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

您可以在this blog找到更多详细信息。

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

【讨论】:

javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.java 为我工作。我用的是mac。我在某处读到 ':' 用于 unix。 我使用过这个命令,但是当试图访问 jar 文件中的类时,我得到了 ClassNotFoundException。 .: 是做什么的?对不起,如果这是一个愚蠢的问题,但对我来说并不明显。 @kensen。错字。用分号 (;) 替换 : (冒号) 以上在 ubuntu 上对我不起作用。我试过不带引号,它起作用了。前任。 javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java【参考方案2】:

请在 Linux 上尝试

javac -cp jarfile source file 

示例:-

javac  -cp .:/jars/* com/template/*.java

【讨论】:

当我尝试 EXAMPLE :- 并将 .:/jars 替换为我的 JAR 文件所在的目录时,我收到错误消息 javac: invalid flag: /location/of/first/jar/file.jar。跨度> ***.com/questions/27915204/…请参考这个,它可能会解决你的问题 .:./jars/* 在尝试指向本地项目目录 jar/ 时有效。【参考方案3】:

语法适用于 windows dos 命令:

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

【讨论】:

上述命令执行成功后如何运行java类文件? java -cp first.jar:second.jar:third.jar MyFile【参考方案4】:

以下是步骤,

    将所有 jars 和您的 .java 文件复制到同一个文件夹中(提及文件名而不是提及长路径会很容易。尽管您可以将 jar 和 .java 保存在不同的文件夹中)。

    编译,

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

    执行,

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

我希望这会有所帮助!

【讨论】:

感谢您还展示了如何执行。点冒号又做了什么?是当前目录和文件分隔符吗? 是的,它是当前目录和 Unix 文件分隔符(在 Windows 上是分号)。 当然目的或 javac -cp libs/xxx.jar program.java 将构建一个最终的独立输出文件,因此您在运行时不再需要使用 -cp 因为这意味着我需要将我的 libs 文件夹复制到我希望运行应用程序的位置?【参考方案5】:

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

    打开命令提示符。 将目录更改为 java 所在的位置 您要编译的文件。

    为你的依赖 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;

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

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

【讨论】:

【参考方案6】:

这将创建 .class 文件:

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

这将执行类文件:

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

【讨论】:

java 命令显示错误原因:java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 我想编译** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.java 和**运行 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【参考方案7】:

试试这个。

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

【讨论】:

【参考方案8】:

需要在编译时和运行时指定依赖关系

要编译使用这种格式

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

例子:

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

【讨论】:

这个答案虽然正确,但似乎并没有添加其他答案尚未说明的任何内容。如果此答案与其他答案之间存在一些关键区别,最好解释一下您的答案为何不同。 您提到了在运行时和编译时指定依赖关系,但没有解释如何在运行时指定它们。【参考方案9】:

有时进行以下更改会起作用:

java -cp ".;%CLASSPATH%" classfilename 

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

【讨论】:

【参考方案10】:

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

使用 -cp 命令,我们指定在哪里可以找到编译类所需的附加库的路径。 jar1、jar2、jar3,在jars文件夹中,用于编译abc.java类。

【讨论】:

虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。【参考方案11】:

如果您使用的是 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

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

【讨论】:

以上是关于如何在 java 文件中包含 jar 文件并在命令提示符下编译的主要内容,如果未能解决你的问题,请参考以下文章

如何把java项目完整的上传到linux服务器上去,项目中包含jar包?

linux下如何查找当前目录下所有jar包中包含AAA内容的class文件名

在可执行的 .jar 文件中包含 excel

如何在我的 gradle java 项目中包含外部 .jar? [复制]

在应用程序包中包含 JVM 副本

如何在可执行文件中包含带有 pyinstaller 的特定 .jar 文件?