2017-03-20 3 views
0

Ich implementiere den Datastax-Java-Treiber, der here in einem Maven-Projekt in Eclipse beschrieben wird. Ich habe die drei Abhängigkeiten in pom.xml wie beschrieben:Datastax-Java-Treiberimplementierung für Apache Cassandra

<dependency> 
    <groupId>com.datastax.cassandra</groupId> 
    <artifactId>cassandra-driver-core</artifactId> 
    <version>3.1.4</version> 
</dependency> 

<dependency> 
    <groupId>com.datastax.cassandra</groupId> 
    <artifactId>cassandra-driver-mapping</artifactId> 
    <version>3.1.4</version> 
</dependency> 

<dependency> 
    <groupId>com.datastax.cassandra</groupId> 
    <artifactId>cassandra-driver-extras</artifactId> 
    <version>3.1.4</version> 
</dependency> 

Dann habe ich die Klasse implementiert in this manual beschrieben.

package CasConnector.CasConnector; 
import com.datastax.driver.core.*; 

public class CasConnector { 

    public static void main(String[] args) { 

     Cluster cluster = null; 
     try { 
      cluster = Cluster.builder()             // (1) 
        .addContactPoint("127.0.0.1") 
        .build(); 
      Session session = cluster.connect();           // (2) 

      ResultSet rs = session.execute("select release_version from system.local"); // (3) 
      Row row = rs.one(); 
      System.out.println(row.getString("release_version"));       // (4) 
     } finally { 
      if (cluster != null) cluster.close();           // (5) 
     } 

    } 

} 

Und ich die folgenden JAR-Dateien in den "referenzierten Bibliotheken" Verzeichnis hinzugefügt (Pfad hinzufügen Build):

  • cassandra-Treiber-Core-3.1.4.jar
  • cassandra- Fahrer-extras-3.1.4.jar
  • cassandra-Treiber-Mapping-3.1.4.jar

Dann habe ich das Projekt als JAR-Datei unter Linux auszuführen exportiert, bu t Ich habe den Fehler unten erhalten. Scheint, dass die Cluster-Klasse nicht geladen werden kann, aber ich habe die Abhängigkeit cassandra-driver-core-3.1.4 im Maven-Projekt hinzugefügt, das sie enthält. Bitte schlagen Sie vor, was in meiner Konfiguration falsch oder fehlend sein könnte.

# java -jar test.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: com/datastax/driver/core/Cluster 
     at CasConnector.CasConnector.CasConnector.main(CasConnector.java:14) 
Caused by: java.lang.ClassNotFoundException: com.datastax.driver.core.Cluster 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 1 more 



LÖSUNG:

1. folgendes Plugin In den pom.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
         <mainClass>Path.to.Main.Class</mainClass> 
        </transformer> 
       </transformers> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 


2. Rechts auf Ihr Projekt klicken -> 'Ausführen als' -> 'Maven Build' -> Tippe "clean install" -> 'Apply' -> 'Run'.


Die resultierende JAR-Datei wird im Verzeichnis "target" erstellt, das alle erforderlichen Abhängigkeiten enthält.

+1

Mögliches Duplikat von [JAR-Datei mit mehreren Klassenpfadbibliotheken über die Eingabeaufforderung ausführen] (http://stackoverflow.com/questions/13018100/execute-jar-file-with-multiple-classpath-libraries-from-command-prompt) –

+0

@Ashraful Es ist nicht. –

Antwort

0

Ich denke, dass Sie einige 3rd Party Abhängigkeiten von Ihrem test.jar vermissen. Wenn Sie Maven verwenden, um Ihr Projekt zu erstellen, versuchen Sie, maven plugin zu verwenden, um das JAR zu erstellen, anstatt das Eclipse -Exportprojekt als jar Feature zu verwenden. Zu create an executable JAR with dependencies using Maven können Sie die maven-shade-plugin oder maven-assembly-plugin Maven Plugins verwenden.

+0

Warum brauchen wir ein Plugin, um eine JAR zu exportieren, die Abhängigkeiten enthält? Wird das nicht standardmäßig ohne Plugin unterstützt? –

+0

Wenn Sie angeben, dass das Exportieren einer JAR, die ihre Abhängigkeiten enthält, in Eclipse standardmäßig unterstützt wird, lautet die Antwort nein. Eclipse wird Ihr Projekt nur mit den von Ihnen bereitgestellten Gläsern verpacken. Ich habe aus Ihrem Post verstanden, dass Sie, obwohl Sie ein Maven-Projekt haben, die JAR-Dateien manuell zum Verzeichnis "Referenced Libraries" hinzugefügt haben (Add to Build Path) *, aber dies fügt auch nicht die transitiven Abhängigkeiten hinzu, die diese JARs benötigen. Mit Maven bauen und verpacken Sie Ihr Projekt, indem Sie den * Maven Dependency Resolution Mechanism * nutzen. – alien5

+0

Danke für die Klarstellung. Der Link, auf den Sie verwiesen haben, ist für mich nicht so klar. Kannst du mir sagen, wo ich die Plugin-Software (Download) finde und wie ich sie einstelle? Eine detaillierte Beschreibung wäre toll. –