2014-06-29 54 views
0

我使用Eclipse和Eclipse Maven Plugin(m2e)。Java程序在eclipse中执行,但不在终端中

我的java程序编译并从eclipse界面正确运行,但我无法从终端编译和运行它。

我的Eclipse环境:

我用两个第三方的API,为此,在Eclipse构建路径,我添加

  1. “/家/赛义德/工作区/ FirstMaven /目标/资源/保险丝 - JNA主/建造/类” (如外部类文件夹)
  2. “/home/syed/workspace/FirstMaven/target/resources/apache-jena-2.11.1/lib” (如外部罐)

套餐:

package org.organization.upesh.FirstMaven; 

我的项目路径:

[email protected]:~/workspace/FirstMaven$ 

源代码目录路径:

[email protected]:~/workspace/FirstMaven/src/main/java/org/organization/upesh/FirstMaven$ 

classes目录:

[email protected]:~/workspace/FirstMaven/target/classes/org/organization/upesh/FirstMaven$ 

当我尝试通过执行myProgram以下命令

[email protected]:~/workspace/FirstMaven/target/classes$ java org.organization.upesh.FirstMaven.myProgram 

它给了我这些错误:

Exception in thread "main" java.lang.NoClassDefFoundError: net/fusejna/util/FuseFilesystemAdapterFull 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
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) 
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 
    Caused by: java.lang.ClassNotFoundException: net.fusejna.util.FuseFilesystemAdapterFull 
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) 
... 13 more 

但不使用第三方API我的测试程序中通过正常运行:

[email protected]:~/workspace/FirstMaven/target/classes$ java org.organization.upesh.FirstMaven.test 

我认为myProgram没有执行,因为我使用了两个API(class文件夹和jar文件夹)。

我已经加入的API来的/ etc /环境(如下所示)的类和JAR文件夹的路径和休息我的电脑,但仍是同样的错误

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/syed/workspace/FirstMaven/target/resources/apache-jena-2.11.1/lib:/home/syed/workspace/FirstMaven/target/resources/fuse-jna-master/build/classes" 

请指导我如何运行我的程序正确

回答

1

JVM不会从PATH获取库。它使用特殊的环境变量CLASSPATH,该变量可以包含由Unix上的冒号或Windows上的分号分隔的目录或jar文件的列表。

因此,只需定义CLASSPATH并将参考引用到您的所有库中。

java -cp mylib1.jar:mylib2.jar com.mycompany.Main 
+0

'赛@ ubuntu的:〜/工作区/ FirstMaven /目标/类$ java的org.organization

Aleternatively(和IMHO更好)运行Java当使用命令行开关-classpath(或其别名-cp) .upesh。FirstMaven.SFS_360'给出了与我上面提到的问题相同的错误,并且包含路径为'syed @ ubuntu:〜/ workspace/FirstMaven/target/classes $ java -cp/home/syed/workspace/FirstMaven/target/resources/fuse-jna-master/build/classes org.organization.upesh.FirstMaven.SFS_360'然后给出新的错误 '错误:无法找到或加载主类org.organization.upesh.FirstMaven.SFS_360' –

+0

如果你的主类在jar中,那么jar必须在类路径中。如果它是一个不在jar中的类文件,那么它必须位于与其包相对应的目录中,并且该包的根目录必须位于类路径中。 – arcy

相关问题