如何在Windows命令提示符中无需Maven编译运行带依赖的Java程序?
我正在使用一个依赖Java Stream Player库的jar文件,该库托管在GitHub上。这个jar文件名为musicplayer-1.0.0.jar,其清单文件(MANIFEST.MF)内容如下:
Manifest-Version: 1.0 Created-By: Maven Jar Plugin 3.2.0 Build-Jdk-Spec: 17 Class-Path: lib/slf4j-api-1.7.31.jar lib/logback-classic-1.2.3.jar lib/l ogback-core-1.2.3.jar lib/java-stream-player-10.0.0.jar lib/mp3spi-1.9. 5.4.jar lib/jlayer-1.0.1.4.jar lib/junit-3.8.2.jar lib/jflac-codec-1.5. 2.jar lib/vorbis-support-1.1.0.jar lib/tritonus-all-0.3.7.2.jar lib/jor bis-0.0.17-2.jar lib/jaudiotagger-2.2.7.jar lib/commons-io-2.6.jar Implementation-Title: musicplayer Implementation-Version: 1.0.0 Main-Class: gr.hua.dit.oop2.musicplayer.MusicPlayerApp
对应的Maven仓库配置:
<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories>
依赖定义:
<dependency> <groupId>com.github.goxr3plus</groupId> <artifactId>java-stream-player</artifactId> <version>Tag</version> </dependency>
我想在Windows命令提示符下不使用Maven或其他工具,仅用简单命令编译运行自己的代码,执行的命令如下:
javac -classpath musicplayer-1.0.0.jar Jukebox.java java Jukebox Vivaldi-Storm.mp3
其中musicplayer-1.0.0.jar是依赖上述库的jar文件,Jukebox.java是我的Java源码文件,Vivaldi-Storm.mp3是程序运行需要的参数。
但执行第二条命令时抛出异常:
java.lang.ClassNotFoundException: com.goxr3plus.streamplayer.stream.StreamPlayerListener
另外我无法直接导入外部源码包,比如:
import com.goxr3plus.streamplayer.stream.*;
请问该如何解决?
出现ClassNotFoundException的核心原因是运行时类路径中缺少Java Stream Player库本身以及它依赖的其他第三方jar包。以下是具体解决步骤:
1. 准备所有依赖jar包
从MANIFEST.MF的Class-Path字段可以看到,musicplayer-1.0.0.jar依赖多个jar包,其中核心的java-stream-player-10.0.0.jar是你当前缺失的关键依赖:
- 在
musicplayer-1.0.0.jar所在目录下创建lib文件夹 - 下载
Class-Path中列出的所有jar包,放入lib文件夹内。java-stream-player-10.0.0.jar可从对应仓库的release版本获取,其他jar包可从Maven仓库下载。
2. 修正编译与运行命令
编译命令
编译时需要将musicplayer-1.0.0.jar和所有依赖jar加入类路径:
javac -cp "musicplayer-1.0.0.jar;lib/*" Jukebox.java
注意:Windows系统类路径分隔符为
;,若使用其他系统需替换为:。
运行命令
运行时必须包含当前目录(存放编译生成的Jukebox.class)、musicplayer-1.0.0.jar以及所有依赖jar:
java -cp ".;musicplayer-1.0.0.jar;lib/*" Jukebox Vivaldi-Storm.mp3
3. 解决导入问题
如果无法导入com.goxr3plus.streamplayer.stream.*,说明编译时类路径未正确包含java-stream-player-10.0.0.jar。检查lib文件夹是否存在该jar,并且编译命令的lib/*已覆盖到它即可。
内容的提问来源于stack exchange,提问作者John Zacharakis

