【问题标题】:Liferay MVC Portlet java.lang.ClassNotFoundException [duplicate]Liferay MVC Portlet java.lang.ClassNotFoundException [重复]
【发布时间】:2018-03-15 12:52:48
【问题描述】:

我的 Liferay 门户 7 ga4 在 Wildfly 10 上运行。我创建了一个 Liferay MVC portlet 并进行了部署。我正在尝试连接到 MySql 数据库但收到此错误:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

我通过(右键单击项目>构建路径>配置构建路径>添加 JAR 导入 mysql-connector-java-5.1.42-bin.jar。它位于“引用的库”下。

这是 view.jsp 的代码

try{
    String connectionURL = "jdbc:mysql://localhost/employees";

    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    connection = DriverManager.getConnection(connectionURL, "root", "");
    statement = connection.createStatement();

    if(!connection.isClosed()){
        out.println("Successfully connected to MySQL server" + "<br/>");
    }

} catch(Exception ex){    

    out.println("Unable to connect to database: "+ ex);  

}   

有人可以帮帮我吗?我对 Liferay 和 Java 完全陌生。

谢谢。

【问题讨论】:

  • 好像没有重复,这个问题好像和gradle config和OSGi环境有关。你能显示你的 gradle 配置吗?

标签: java osgi mysql-connector liferay-7


【解决方案1】:

根据给出的信息,您可能在 gradle.build 中缺少一个依赖项

添加:

// https://mvnrepository.com/artifact/mysql/mysql-connector-java
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.42'

右键单击您的项目,然后在 Gradle 中刷新 gradle 项目。

另外,请记住,如果您的 portlet 在基于 OSGi 的新结构下运行,您的环境将需要有一个捆绑包,为您提供来自该 Jar 的包。 Tomcat自带的不考虑。

由于这个版本的 MySQL 是一个 OSGi 包,您可以将其放入您的部署文件夹或简单地将其放入您的模块文件夹中。

如果您愿意,也可以使用其他版本... https://www.e-systems.tech/web/guest/blog/-/blogs/liferay-with-mysql-5-7-driver-changes


有 3 个问题与此问题相关

  1. 构建环境配置
  2. 运行时环境配置
  3. 运行时配置

要修复 1,上面提到的 Gradle 配置就足够了。

要修复 2,请确保已安装 MySQL 的捆绑包,您可以将其放入部署文件夹或 osgi/modules 文件夹中。

要修复 3,您需要在 bnb.bnd 文件中声明包级别的依赖项。

3 真的很奇怪,因为当您使用 bndtools 时,您通常会要求该工具使用

来检测您的依赖关系

进口包装:*

但在这种情况下,依赖项是由按名称加载的类创建的,在字符串中,这会迫使您使用显式声明的依赖项

导入包:com.mysql.jdbc, *

【讨论】:

  • 嗨 Victor,我在 build.gradle 文件中包含了依赖项并刷新了 gradle 项目。我可以在项目和外部依赖项中看到 mysql_connector jar 文件,但错误仍然是相同的“java.lang.ClassNotFoundException:com.mysql.jdbc.Driver”。
  • 红色感叹号消失了吗?您在这个问题中有 2 个问题,而不仅仅是一个
  • 完美!但是您服务器中的 jar 与此问题无关。现在,您修复了构建问题,最后一步是修复运行时。当您将两者都放入部署文件夹时,您的环境应该很好。很抱歉你在第一次接触这个技术集时遇到了这个棘手的例子......由于 OSGi 需要知道包依赖关系,你需要在你的 bnd.bnd -> Import-Package 上声明它:* 通常这会检测到您所有的依赖项,但在 Mysql 的情况下,您使用的是字符串来加载一个类,因此不会自动检测到它。
  • 将 Import-Package: com.mysql.jdbc, * 添加到 bnd.bnd 后,终于成功了。非常感谢您的帮助。
  • 伟大的,棘手的!我的荣幸!
猜你喜欢
  • 1970-01-01
  • 2019-02-16
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多