2014-02-25 31 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文件中添加下列片段解决了这个问题

相关问题