1、简介 {#1简介}
在开发 Java 项目时,我们经常依赖外部库来开发应用。
本文将带你了解把这些第三方库作为 JAR 添加到 classpath 下的不同方法。
2、在命令行中使用 -cp 或 -classpath 选项 {#2在命令行中使用--cp-或--classpath-选项}
如果我们从命令行启动程序,那么可以在命令中指定 JAR 依赖:
java -cp /path/to/jar/file.jar com.example.MyClass
如上,/path/to/jar/file.jar
是 JAR 文件的路径,com.example.MyClass
是要执行的类。
还可以添加多个 jar:
java -cp "lib/jar1.jar:lib/jar2.jar" com.example.MyClass
3、在命令行中使用 CLASSPATH {#3在命令行中使用-classpath}
在某些情况下,在同一台机器上运行的多个 Java 程序可能需要用同一个 JAR。
在这种情况下,我们可以在 macOS/Linux 中设置 CLASSPATH 环境变量,而不是在每条命令中指定 classpath:
export CLASSPATH=/path/to/jar/file.jar
Windows 系统的设置方法如下:
set CLASSPATH=C:\path\to\jar\file.jar
设置 CLASSPATH 后,我们就可以直接运行 Java 程序,而无需指定 -classpath 选项。
注意,如果我们以这种方式设置 CLASSPATH ,它只对该终端会话有效。一旦终端关闭,设置就会丢失。所以,我们可以将 classpath 添加到环境变量,使其永久有效。
4、在 MANIFEST.MF 文件中指定 Classpath {#4在-manifestmf-文件中指定-classpath}
当我们创建一个独立可执行的应用时,最佳实践是将所有依赖的 JAR 都打包到一个 JAR 中。
为此,我们需要在 JAR 文件的 MANIFEST.MF 文件中配置 classpath:
Manifest-Version: 1.0
Class-Path: lib/jar1.jar lib/jar2.jar
Main-Class: com.example.MainClass
然后,在创建应用 JAR 时添加此清单:
jar cvfm app.jar MANIFEST.MF -C /path/to/classes .
接着,就可以直接运行它了:
java -jar app.jar
classpath 上包括了 lib/jar1.jar 和 lib/jar2.jar。
注意,Class-Path 选项优先于 CLASSPATH 环境变量和 -classpath 命令行选项。
5、将 JAR 添加到 lib/ext 目录 {#5将-jar-添加到-libext-目录}
在 Java 安装的 lib/ext 目录中添加 JAR 是一种传统机制,其中放置的 JAR 文件会自动添加到 classpath 中。不过,对于大多数用例来说,这种方法并不推荐。
由于这些 JAR 由外部类加载器加载,因此它们的优先级高于 CLASSPATH 环境变量中指定的 JAR 或 -classpath 或 -cp 选项中指定的目录。
6、在 Eclipse/Intellij IDE 中添加 JAR 文件 {#6在-eclipseintellij-ide-中添加-jar-文件}
使用 Eclipse 或 IntelliJ 等常用的 IDE,我们可以轻松地将 JAR 文件添加到项目的 CLASSPATH 中。这两种集 IDE 都提供了友好的用户界面,可以在项目中包含外部库。
有关详细说明,可以参考 IDE 专用文档,以获得最准确和最新的指导。
7、使用构建工具 {#7使用构建工具}
上述方法适用于小型项目,对于大中型项目更推荐使用构建工具,如 Maven 和 Gradle。
以 Maven 为例,假设我们的项目遵循标准的 Maven 项目结构,我们可以在项目中的 pom.xml
中添加一个依赖项(这会包括其传递依赖项):
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>example-library</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
运行打包命令:
mvn package
Maven 会为我们在类路径中包含这些 JAR。
我们还可以将构建工具与 IDE 相结合,进一步简化在类路径中添加 JAR 的过程。
8、总结 {#8总结}
本文介绍了添加外部依赖库到 CLASSPATH 中的几种方式,这取决于项目的复杂性和要求。对于快速测试或脚本,一个简单的命令行选项可能就足够了。对于大型项目,则可能需要使用 Maven 或 Gradle 等强大的工具来管理项目依赖关系。
Ref:https://www.baeldung.com/java-classpath-include-jars