2014-02-25 35 views
0

在Eclipse中構建了一個使用netflix astyanax驅動程序的簡單Cassandra客戶端應用程序。這裏是pom.xml文件:構建環境之外的ClassLoader執行jar中的異常

<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>CCL1</groupId> 
    <artifactId>CCL10</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>CassandraCL1</name> 
    <description>Cassandra Client 1</description> 

    <dependencies> 
     <dependency> 
      <groupId>com.netflix.astyanax</groupId> 
      <artifactId>astyanax</artifactId> 
      <version>1.56.44</version> 
     </dependency> 
    </dependencies>  

</project> 

從Eclipse啓動時,該應用工作正常。但是,當jar文件複製到外部機器就無法啓動,但以下情況除外:

[email protected]:~/tmp$ java -cp ./CCL10-0.0.1-SNAPSHOT.jar AppCCL1 
Exception in thread "main" java.lang.NoClassDefFoundError: com/netflix/astyanax/connectionpool/exceptions/ConnectionException 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
     at java.lang.Class.getMethod0(Unknown Source) 
     at java.lang.Class.getMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.getMainMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: com.netflix.astyanax.connectionpool.exceptions.ConnectionException 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 6 more 

外部機器是亞馬遜t1.micro Ubuntu的12實例。這裏唯一安裝的軟件是Oracle的Java運行時環境1.7。 它看起來像缺少一些依賴項,但我甚至看不到缺失類的名稱。

爲什麼Maven無法在jar中插入一些依賴項?如何解決和解決此類問題?

回答

0

事實證明,Maven並沒有在jar中包含所有的依賴關係。 (我假定Maven會自動完成此操作)。包括罐子所有的依賴在此說明:

<build> 
    <plugins> 
<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <archive> 
     <manifest> 
     <mainClass>AppCCL1</mainClass> 
     </manifest> 
    </archive> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- bind to the packaging phase --> 
     <goals> 
     <goal>single</goal> 
     </goals> 
    </execution> 
    </executions> 
    </plugin> 
    </plugins> 
</build> 

How can I create an executable JAR with dependencies using Maven?

所以我在我的XML文件中添加下列片段解決了這個問題

相關問題