【问题标题】:Java - Executing jar fails because of Prohibited package name: java.sqlJava - 由于禁止的包名称:java.sql,执行 jar 失败
【发布时间】:2018-08-07 08:21:51
【问题描述】:

我正在使用 sqlite-jdbc-3.21.0.jar 驱动程序进行多项选择测验。你可以在这里找到它: https://bitbucket.org/xerial/sqlite-jdbc/downloads/

我创建了一个名为 Database 的类来处理与 SQLite 相关的所有内容:

   package quizpack;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;

    public class Database {
    Console cnsl = new Console();
    ResultSet rs = null;
    Connection connection = null;
    Statement stmt = null;

    public Connection connect() {
        try {
            connection = DriverManager.getConnection("jdbc:sqlite:./data/data.db");
            Class.forName("org.sqlite.JDBC");
        } catch (Exception e) {
            cnsl.println("connect() error: " + e.getMessage());
        }
        return connection;
    }
}

当我在 Eclipse 中运行我的测验时,它不会给出任何错误。当我编译它时,它不会给出任何错误(打包所需的库)。一旦我在命令提示符中启动 jar 文件,我就会收到消息:禁止的包名称:java.sql。 那将是:java.lang.SecurityException:禁止的包名称:java.sql

这是 connect() 错误的堆栈跟踪:

connect() error: Prohibited package name: java.sql
java.lang.SecurityException: Prohibited package name: java.sql
    at java.base/java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
    at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)

    at java.base/java.net.URLClassLoader.defineClass(Unknown Source)
    at java.base/java.net.URLClassLoader.access$100(Unknown Source)
    at java.base/java.net.URLClassLoader$1.run(Unknown Source)
    at java.base/java.net.URLClassLoader$1.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.net.URLClassLoader.findClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    at quiz.Database.connect(Database.java:21)
    at quiz.Database.buildQuery(Database.java:51)
    at quiz.Quiz.<init>(Quiz.java:22)
    at quiz.Main.main(Main.java:13)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ
e Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknow
n Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Un
known Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)

我尝试了什么: 更改包名称。 更改我的构建路径的顺序。 尝试了几个我将驱动程序 jar 放在我的源文件夹中的位置。 签署我导出的 jar。 将 jar 添加到我的类路径变量中: database connection not working in jar, but does work in eclipse

现在我是一名初级 Java 程序员,我可能在上面的列表中做错了什么。但我希望有人能阐明究竟是什么导致了这个错误的发生。

【问题讨论】:

  • 检查您的项目是否没有名称为java 的包。将其更改为 quadrivics 或其他内容。
  • 我检查了我的项目没有包含 java 的包名。我已经把它改成了“quizpack”。

标签: java sqlite jdbc


【解决方案1】:

这似乎是 Prohibited package name: java 的重复,但您说您更改了包名称。

如果您没有将包名从 java 更改为其他名称,请尝试更改它。否则,请删除您的 jar 文件并重新构建。

【讨论】:

  • 我建议你也删除所有已编译的 .class 文件,即 bin 或目标文件夹。
  • 我已经在不同的工作区和新项目中多次重建我的整个项目,但这也不能解决问题。我已经查看了链接,它指的是我已经尝试过的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2012-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多