【发布时间】:2015-05-18 15:32:02
【问题描述】:
我正在尝试使用 OSGi-Bundle 中的 mysql-connector 连接到 MySQL 数据库。不幸的是,当我试图在我的包中获取数据库驱动程序时,我总是得到 NoClassDefFoundError。
我已经在这里坐了两天,头撞墙。我尝试了所有我发现的东西(我知道在 stackoverflow 上已经有类似的问题了)但我现在完全迷失了。
该项目是一个 gradle 项目,我正在使用 Intellij。这是捆绑包的 build.gradle:
defaultTasks 'clean', 'build'
apply plugin: 'java'
apply plugin: 'osgi'
apply plugin: 'maven'
sourceCompatibility = 1.6
targetCompatibility = 1.6
version = '0.0.1'
def bundleSymbolicName = 'at.my.test.drivers.mysqldb'
def bundleName = 'Driver - MySql Database Drive'
repositories {
mavenCentral()
}
configurations {
embed
}
dependencies {
compile group: 'org.osgi', name: 'org.osgi.core', version: '4.3.1'
compile group: 'org.osgi', name: 'org.osgi.compendium', version: '4.3.1'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.2'
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.35'
embed group: 'mysql', name: 'mysql-connector-java', version: '5.1.35'
}
jar {
into('lib') {
from configurations.embed
}
}
jar {
manifest {
version = project.version.replace('-','.');
symbolicName = bundleSymbolicName
name = bundleName
instruction 'Bundle-ClassPath', '.,lib/mysql-connector-java-5.1.35.jar'
instruction 'Service-Component', 'OSGI-INF/components.xml'
}
}
mysql-connector-java-5.1.35.jar 文件被 gradle 正确下载并添加为模块的依赖项:
这就是我尝试创建数据库连接的方式:
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
sqlConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","usr","pwd");
}
catch(Exception e) {
e.printStackTrace();
logger.error("unable to create database connection");
}
当我尝试启动模块时,我只得到这个异常:
java.sql.SQLException: java.lang.NoClassDefFoundError: javax/naming/RefAddr
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:937)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:872)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:904)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:894)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java
:
请帮忙:(
【问题讨论】:
标签: java mysql intellij-idea osgi apache-felix