Я пытаюсь изучить OSGi, и я сделал один простой проект, в котором он просто создаст таблицу в базе данных Sqlite. Я добавил «sqlite-jdbc-3.7.2.jar» в путь сборки. Но когда я запускаю этот проект, он говорит «ClassNotFoundException».
Я использую Eclipse IDE с BndTools.
Я искал другие сообщения, и некоторые люди сказали добавить банку в качестве другого пакета, а затем экспортировать его. Я пробовал. В рабочей области я выбрал «Импорт» -> «Плагины и фрагменты» -> «Выбрать каталог». Но он не отображает Jar (работает для других JAR, но не обнаруживает sqlite-jdbc-3.7.2.jar).
Я сделал, как показано ниже,
se.sample.sqlitedbconn.ConnActivator.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import se.sample.connproperties.CreateTable;
import aQute.bnd.annotation.component.*;
@Component
public class ConnActivator implements BundleActivator {
Connection connection;
Statement statement;
@Activate
public void start(BundleContext context) throws Exception {
System.out.println("Starting");
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite://home/raj/Desktop/EclipseProjectsWorkspace/ZWave.db");
} catch (Exception ex) {
System.err.println(ex.getClass().getName()+": "+ex.getMessage());
}
System.out.println("Connection To Database Successful");
CreateTable createTable = new CreateTable();
statement = connection.createStatement();
boolean isTableCreated = createTable.createANewTable(connection,statement);
if(isTableCreated){
System.out.println("Table Created Successfully!");
}else{
System.out.println("Table Creation Failed!");
}
statement.close();
}
@Deactivate
public void stop(BundleContext context) throws Exception {
System.out.println("Stopping");
if(connection != null){
connection.close();
}
System.out.println("Database Connection Closed!");
}
}
se.sample.connproperties.CreateTable.java
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateTable {
public boolean createANewTable(Connection connection, Statement statement) {
String sql = "CREATE TABLE Product " +
"(ProductId INT PRIMARY KEY NOT NULL,"+
"ProductName TEXT NOT NULL,"+
"ProductPrice REAL);";
try {
statement.executeUpdate(sql);
} catch (SQLException e) {
System.err.println(e.getClass().getName()+": "+e.getMessage());
return false;
}
return true;
}
}
Когда я запускаю это, я получаю следующую ошибку:
Starting
Connection To Database Successful
java.lang.ClassNotFoundException: org.sqlite.JDBC not found by se.sample.sqlitedbconn [8]
! Failed to start bundle se.sample.sqlitedbconn-0.0.0.201503241305, exception activator error null from: se.sample.sqlitedbconn.ConnActivator:start#34
____________________________
Welcome to Apache Felix Gogo
g!
Пожалуйста помоги мне с этим :)
bnd.bnd
вручную. Что-то вроде-buildpath: \ osgi.core,\ osgi.cmpn,\ biz.aQute.bnd.annotation,\ lib/sqllitexxx.jar;version=file
. Он должен работать. Извините, я не знаю больше об этом, так как старший парень создал для нас Framework, и мы используем его сейчас. - person Rajkishan Swami   schedule 05.05.2016sqllite
3.8.11.2
. Как упоминалось в ответе, эта версия упакована какBundle
. Попробуйте, может сработает. - person Rajkishan Swami   schedule 25.05.2016