【问题标题】:Help to launch java app on linux帮助在 linux 上启动 java 应用程序
【发布时间】:2010-11-25 22:11:11
【问题描述】:

我有这样的 bash 脚本 start.sh:

export JAVA_HOME=/home/qds/bin/jdk1.6.0_22
export QDS_HOME=/home/qds
$JAVA_HOME/bin/java -classpath $QDS_HOME/lib/*:$QDS_HOME/lib/commons/* com.qds.Main $@

在目录 /home/qds/lib 我有必要的库和我的 jar 文件,其中包含:

com\qds\config
com\qds\entities
com\qds\休眠
com\qds\协议
com\qds\util
com\qds\Main.class

但是当我运行 ./start.sh 时,我有:

./start.sh 线程“主”java.lang.NoClassDefFoundError 中的异常:com/qds/Main(错误名称:Main) 在 java.lang.ClassLoader.defineClass1(Native Method)

【问题讨论】:

    标签: java linux


    【解决方案1】:

    您必须以多种方式之一指定您的主类将是什么

    1. 将主类名指定为 java 命令的参数(只需将主类添加到 java 命令的末尾)
    2. 在主 jar 的清单中定义它

    【讨论】:

      【解决方案2】:

      Java 不支持选项 -classpath 中的通配符。尝试从 $QDS_HOME/lib/* 和 $QDS_HOME/lib/commons/* 中删除 *

      顺便说一句,这也适用于 Windows。

      类路径应该包含 1.目录 2.显式编写的jar文件。

      如果您有许多 jar 文件,您可以创建组成命令行选项的脚本。 例如在 linux 上

      -classpath `ls -1|tr '\n' :`
      

      组成用冒号分隔的类路径

      【讨论】:

      • 但是shell不应该为他扩展通配符。因此,尽管在 shell 扩展通配符之后涉及到 java 命令,但类路径不能包含通配符,但它只是一个文件列表
      • 但是我刚刚看到他有多个条目,由: 分隔,这意味着外壳想要扩展任何东西,随身携带:)
      猜你喜欢
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多