android 错误:(32,13)错误:无法访问javax.naming的可引用类文件,未找到可引用项

ttcibm8c  于 2023-03-06  发布在  Android
关注(0)|答案(2)|浏览(188)

我得到了上面的错误和下面是我的代码我做错了什么?错误引用到数据源.什么是问题?

public class DBConnector {
private Connection dbConn = null;
private FileLogger fileLogger = new FileLogger("./logs/logfile.txt");
private ConfigurationReader conf = new ConfigurationReader("./config.sys");
private Logger logger = fileLogger.getLogger();

/**
 * Attempts to establish a connection with a test MySQL database.
 */
public DBConnector() {

    MysqlDataSource dataSource = new MysqlDataSource();
    dataSource.setUser(conf.getConfigString("username"));
    dataSource.setPassword(conf.getConfigString("password"));
    dataSource.setServerName(conf.getConfigString("dbhost"));
    dataSource.setDatabaseName(conf.getConfigString("dbname"));
    dataSource.setPort(conf.getConfigInt("dbport"));

    try {
        dbConn = dataSource.getConnection();

        logger.info("Succesful connection with database!");
    } catch (Exception ex) {
        logger.info("Error: DBConnector(): problem creating database connection");
    }
    logger.info("Database connection = " + dbConn);
}
7cwmlq89

7cwmlq891#

我得到了同样的错误(在Java 9或更高版本上)。对我来说,问题是由于我的模块(访问Referenceable的模块)的module-info.java中缺少requires java.naming;指令。添加此指令修复了它:

module MyModule {
   requires java.naming;  // Java Naming and Directory Interface (JNDI) API.
   …
}

此模块适用于Java Naming and Directory Interface (JNDI)API,如Module java.naming的Javadoc中所述。

fzsnzjdm

fzsnzjdm2#

正如Sander Mak在这里解释的那样,当你的代码依赖于没有模块描述符的东西,并且这个依赖的依赖性是无法解析的时候,这种情况通常会发生(例如,你正在使用Hibernate,它没有模块描述符,但是它需要java.naming)。
在这种情况下,Sander建议使用以下方法将传递依赖项添加到模块图中,而不是用传递依赖项污染您自己的模块描述符

--add-modules java.naming

这样,当Hibernate将来有了自己的模块描述符时,您只需删除上面的行,在您的模块info.java中只保留您的直接依赖项。

相关问题