在Eclipse中构建最小化可运行Jar包的问题
解决Eclipse导出仅含项目代码与HSQLDB JDBC驱动的可运行Jar包问题
方法一:Eclipse手动导出时筛选依赖类
- 右键你的Java项目 → 选择「导出」→ 依次展开「Java」→ 「可运行JAR文件」,点击「下一步」
- 在「处理所需库的方式」中,选择将所需库提取到生成的JAR中(此方式会把依赖类合并到你的Jar里,避免外部依赖问题)
- 点击「下一步」进入库选择界面,找到HSQLDB的依赖Jar并展开:
- 只勾选
org.hsqldb.jdbc包下的所有类,以及驱动入口类org.hsqldb.jdbc.JDBCDriver - 取消勾选嵌入式服务器相关的包(比如
org.hsqldb.server、org.hsqldb.persist、org.hsqldb.script等)
- 只勾选
- 确认导出路径后点击「完成」,生成的Jar就仅包含你的项目代码和必要的JDBC驱动类,无冗余的嵌入式服务器代码
解决外部依赖时「找不到合适的驱动」异常
如果你坚持用外部依赖(把HSQLDB Jar放在项目Jar外),必须确保运行时驱动Jar在类路径中:
- 用命令行运行时,通过
-cp参数指定完整类路径:# Windows系统 java -cp 你的项目.jar;./lib/hsqldb.jar com.yourpackage.YourMainClass # Linux/macOS系统 java -cp 你的项目.jar:./lib/hsqldb.jar com.yourpackage.YourMainClass - 也可以写批处理(.bat)或shell脚本封装上述命令,避免手动输入出错
- 另外,代码里尽量用JDBC 4.0+的自动加载机制,不要硬编码
Class.forName("org.hsqldb.jdbc.JDBCDriver")(如果用旧版JDBC则仍需手动加载,但必须保证驱动类在类路径内)
方法二:用Maven精准打包(推荐)
如果你的项目用Maven管理,可通过maven-shade-plugin实现精准打包,只保留需要的类:
在pom.xml中添加插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>org.hsqldb:hsqldb</artifact> <includes> <include>org/hsqldb/jdbc/**</include> </includes> <excludes> <exclude>org/hsqldb/server/**</exclude> <exclude>org/hsqldb/persist/**</exclude> <exclude>org/hsqldb/script/**</exclude> <exclude>org/hsqldb/util/**</exclude> <!-- 不需要工具类可取消 --> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.yourpackage.YourMainClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
执行mvn package后,target目录下的shaded Jar就是仅含你的代码和JDBC驱动的可运行Jar。
内容的提问来源于stack exchange,提问作者John Kraynack
相关产品推荐
相关产品推荐

