如何在 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文件名