使用sqlite-jdbc驱动打包Jar运行报错:Prohibited package name: java.sql
嘿,这个问题我之前帮不少开发者解决过!出现Prohibited package name: java.sql错误的核心原因很明确——Java的安全机制禁止我们自己编写的类使用以java.开头的包名,这是JDK核心API的专属命名空间,防止用户代码篡改或混淆系统核心类。你的Database类大概率是不小心放在了java.sql包下,虽然Eclipse编译时可能没拦截,但命令行运行JVM会严格执行这个限制。
下面是具体的解决步骤:
检查并修改
Database类的包名
打开你的Database.java文件,把顶部的package java.sql;声明改成自定义的非java.开头的包名,比如com.yourquiz.db、org.yourproject.database这类符合你项目结构的名称。同时要在Eclipse里调整对应的文件夹结构(Java包和文件夹路径是一一对应的,比如com.yourquiz.db对应src/com/yourquiz/db)。重新编译并打包项目
修改完包名后,先在Eclipse里重新编译项目,确保没有编译错误。然后重新导出可运行Jar文件,导出时注意选择正确的打包方式(比如将依赖的sqlite-jdbc库一起打包或提取到Jar中)。验证Jar包内容(可选但推荐)
用命令行执行jar tf your-quiz-app.jar,查看输出的类路径列表,确认没有java/sql/Database.class这类用户自定义类,只有org/sqlite/开头的驱动类和你自定义包下的类。再次命令行运行Jar
执行java -jar your-quiz-app.jar,应该就能正常启动程序了。
补充说明:sqlite-jdbc驱动本身的类是在
org.sqlite包下,完全符合Java的命名规则,所以问题肯定出在你自己编写的Database类的包名上,只要修正包名就能解决这个报错。
内容的提问来源于stack exchange,提问作者Quadrivics

