You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已配置SQLite JDBC依赖的JAR在命令行无法运行问题排查

问题分析与解决办法

核心问题:依赖未被正确打包或路径不匹配

当前使用的maven-jar-plugin仅会打包项目自身的代码,依赖的第三方JAR(比如sqlite-jdbc、slf4j-api)并没有被包含在生成的JAR里。Manifest中的Class-Path只是声明了依赖的相对路径,但如果这些依赖JAR没有放在与生成JAR同级的目录(或指定路径)下,命令行运行时就会出现类找不到的错误。

关于slf4j的疑问

slf4j-api只是日志接口,必须搭配具体的日志实现(比如slf4j-simple、logback)才能正常工作,否则运行时会抛出NoClassDefFoundError或日志警告。另外它出现在Class-Path但不在pom.xml里,说明可能是NetBeans自动引入的,但Maven构建时不会自动处理这个依赖,导致打包后如果没有手动放置相关JAR,必然会出问题。

两种可行解决方案

方案一:构建可独立运行的胖JAR(推荐)

使用maven-shade-plugin将所有依赖打包到同一个JAR中,这样不需要额外的依赖文件,直接运行即可。修改pom.xml的<build>部分:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.5.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.myorg.myproj.myclass</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn package后,target目录下会生成一个带-shaded后缀的JAR文件,直接用java -jar xxx-shaded.jar就能运行。

方案二:分离依赖并自动复制到指定目录

如果不想打包成胖JAR,可以用maven-dependency-plugin将依赖复制到JAR同级的lib目录,同时修改Manifest的Class-Path指向lib下的文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix> <!-- 指定依赖在lib目录下 -->
                        <mainClass>com.myorg.myproj.myclass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.6.1</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory> <!-- 复制到target/lib -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn package后,把target目录下的JAR文件和lib文件夹一起放到任意目录,运行java -jar xxx.jar即可。

补充:修复slf4j依赖问题

建议直接在pom.xml中添加slf4j的依赖,避免依赖缺失:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
</dependency>
<!-- 添加简单的日志实现,比如slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.36</version>
    <scope>runtime</scope>
</dependency>

内容的提问来源于stack exchange,提问作者BusterZo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:58:11