Я пытаюсь запустить проект Maven, который использует объединение базы данных и делает некоторые вещи в базе данных. На самом деле мой код работает правильно на Eclipse, и я получаю вывод. Мой код выглядит следующим образом:Исключение из потока «main» java.lang.NoClassDefFoundError: org/apache/commons/dbcp2/BasicDataSource
package pack;
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class App {
private final String CONNECTION_URL = "jdbc:derby:memory:test;create=true";
private BasicDataSource ds;
//private Connection classicalWay() throws SQLException {
// return DriverManager.getConnection(CONNECTION_URL);
//}
public static void main(String[] args) {
final App app = new App();
app.process();
}
private Connection poolWay() throws SQLException {
if (ds == null) {
ds = new BasicDataSource();
ds.setUrl(CONNECTION_URL);
ds.setMaxTotal(10);
}
return ds.getConnection();
}
private Connection getConnection() throws SQLException {
return poolWay();
//return classicalWay();
}
private void createTable(final Statement stmt) throws SQLException {
stmt.execute("CREATE TABLE CUSTOMER (NAME VARCHAR(10))");
}
private void insertRecord(final Statement stmt) throws SQLException {
stmt.execute("INSERT INTO CUSTOMER (NAME) VALUES ('James')");
}
private void selectTable(Statement stmt) throws SQLException {
final ResultSet rs = stmt.executeQuery("SELECT * FROM CUSTOMER");
while (rs.next())
System.out.println(rs.getString(1));
}
public void process() {
try {
final Connection con = getConnection();
try {
final Statement stmt = con.createStatement();
try {
createTable(stmt);
insertRecord(stmt);
selectTable(stmt);
} finally {
stmt.close();
}
} finally {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Итак, я могу получить вывод «Джеймс» на консоли. Также у меня есть необходимые файлы .jar. Я уже ввезли котелок, derbyclient, Обще-dbcp2 (версия 2.1.1), Commons Logging (версия 1.2), Викисклада pool2, (версия 2.4.2) и мой pom.xml выглядит следующим образом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>oguzbayral.trial.dummy</groupId>
<artifactId>Dummy-Project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Dummy-Project</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<grenter code here`oupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<mainClass>list.Trial</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
Итак, я также добавил Викисклад dbcp2 как зависимость , но когда я пытаюсь запустить этот код на терминале (я работаю в макинтоше) Я получаю следующее сообщение об ошибке исключения:
Oguz-Bayral:Dummy-Project OguzBayral$ java -cp target/Dummy-Project-1.0-SNAPSHOT.jar oguzbayral.trial.dummy.Apply
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/dbcp2/BasicDataSource
at oguzbayral.trial.dummy.Apply.poolWay(Apply.java:19)
at oguzbayral.trial.dummy.Apply.getConnection(Apply.java:27)
at oguzbayral.trial.dummy.Apply.process(Apply.java:47)
at oguzbayral.trial.dummy.Apply.main(Apply.java:67)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at `enter code here`sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 4 more
не правда ли странно, я уже импортировал их? В чем проблема и как я могу это исправить? Заранее большое спасибо.
Когда вы запускаете его в терминале, вы должны добавить все банки зависимостей к пути к классам, а не только JAR вашей программы. – Jesper
@Jesper Я пробовал, но это не сработало. Я добавил банку Junit 3.8.1 в мой путь к классам, и я убедился в том, что версии других файлов jar точно совпадают. Теперь у меня есть junit 3.8.1, commons-pool2 2.4.2, commons-dbcp2 2.1.1 и commons, регистрирующий 1.2 в зависимостях maven, и я тоже их в ссылках. Также у меня есть некоторые другие .jar-файлы в них, такие как derby.jar, derbyLocale_esjar или derbyclient.jar и т. Д. Еще раз спасибо! – 88yomc
Чтобы быть ясным: вы должны добавить их все в командной строке в качестве аргументов для опции '-cp':' java -cp target/Dummy-Project-1.0-SNAPSHOT.jar: thislib.jar: thatlib.jar: anotherlib .jar ... ' – Jesper