2015-01-12 2 views
3

Я пытаюсь подключиться к Cassandra с драйвером datastax. До сих пор я просто пытался запустить приложение SimpleClient, доступное в учебниках, но у меня проблемы.java cassandra connection java.lang.ClassNotFoundException: com.datastax.driver.core.Cluster

Вот Exception

Exception in thread "main" java.lang.NoClassDefFoundError: com/datastax/driver/core/Cluster 
    at com.cass.App.connect(App.java:17) 
    at com.cass.App.main(App.java:34) 
Caused by: java.lang.ClassNotFoundException: com.datastax.driver.core.Cluster 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 2 more 

Вот мой файл Maven

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.cass</groupId> 
    <artifactId>Connector</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>Connector</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
<dependency> 
    <groupId>io.netty</groupId> 
    <artifactId>netty-all</artifactId> 
    <version>4.0.25.Final</version> 
</dependency> 
<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>18.0</version> 
</dependency> 
<dependency> 
    <groupId>com.yammer.metrics</groupId> 
    <artifactId>metrics-core</artifactId> 
    <version>2.2.0</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.7</version> 
</dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
<dependency> 
    <groupId>com.datastax.cassandra</groupId> 
    <artifactId>cassandra-driver-core</artifactId> 
    <version>2.0.1</version> 
</dependency> 

    </dependencies> 
<build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 
</project> 

Вот мой Java файл

package com.cass; 

import com.datastax.driver.core.Cluster; 
import com.datastax.driver.core.Host; 
import com.datastax.driver.core.Metadata; 

/** 
* Generate a unique number 
* 
*/ 
public class App 
{ 

    private Cluster cluster; 

public void connect(String node) { 
     cluster = Cluster.builder() 
      .addContactPoint(node).build(); 
     Metadata metadata = cluster.getMetadata(); 
     System.out.printf("Connected to cluster: %s\n", 
      metadata.getClusterName()); 
     for (Host host : metadata.getAllHosts()) { 
     System.out.printf("Datatacenter: %s; Host: %s; Rack: %s\n", 
       host.getDatacenter(), host.getAddress(), host.getRack()); 
     } 
    } 

    public void close() { 
     cluster.close(); 
    } 

    public static void main(String[] args) { 
     App client = new App(); 
     client.connect("127.0.0.1"); 
     client.close(); 
    } 
} 

Я новичок как Maven и Кассандрой.

Редактировать - это была глупая ошибка не включая снимок с зависимостями в ф java -cp target/CassandraTest2-1.0-SNAPSHOT-jar-with-dependencies.jar com.Test.App

+0

как вы его используете. –

+0

java -cp target/Connector-1.0-SNAPSHOT.jar com.cass.App – pJAEY

ответ

2

Ok проблема в том, что необходимом банк нет в пути к классам или когда вы работаете с команды подсказка, он не может найти эти банки.

Сепаратор ; для windows. На странице Unix systems вы должны использовать :

, пожалуйста, следуйте этим двум ссылкам, аналогичным вопросам с ответами.

java -cp jar1:jar2:jar3:dir1:. MyProgram 

Link1 и link2

+0

Не будет ли управлять maven зависимостями? – pJAEY

+1

@pJAEY Maven загрузит банки и зависимые баночки, но вам нужно указать его в вашем пути к классам. –

+0

Я бы рекомендовал заглянуть в плагин сборки maven и [jar-with-dependencies] (http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#jar-with-dependencies) для создания банки, которая включает все зависимости. Другой вариант - использовать maven для запуска вашего основного класса, используя цель [exec: java] (http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html) для запуска вашего основного класса. –

0

Я была такая же проблема. Единственным отличием была версия datastax - 2.1.1. Позже я понял, что эта версия имеет проблему. Мой проект начал работать после смены версии с 2.1.1 до 2.1.9 (на самом деле я тоже тестировал вашу версию, он работал. Другое, что эта версия работала на всех остальных. Strang!)

И для Maven. Да, он справляется с зависимостью. Обычно, если вы помещаете зависимость в файл pom и запускаете класс, который он обрабатывает. Это было для меня тоже.

Смежные вопросы