【问题标题】:Java code not working in OSX MavericksJava 代码在 OSX Mavericks 中不起作用
【发布时间】:2014-09-23 17:20:53
【问题描述】:

我正在尝试运行一个 java 库,以便可以在它的基础上进行构建并进行自定义。该库称为 jayu 解析 ASN 文件,以便您可以解码它们。可以下载here

在“test”文件夹和Readme.txt文件中提到的库中有一些测试数据。 windows 有一个 asn2csv 批处理文件,但我使用的是 OSX 小牛。根据Readme文件,我需要通过调用命令来运行它:

ls $ASN_DATA_DIR/*.dat | xargs java -cp "./*.jar:."  Path/To/Stream1.txt  test.testdata.Stream1 $OUTPUT_DIR

java -cp "*.jar;$PATH_TO_TEST_DIR" Stream1.txt test.testdata.Stream1  . Path/To/Stream1.dat

但无论我尝试什么,我总是得到Error: Could not find or load main class Stream1.txt

我不是 Java 程序员。我在这里做错了什么?这个开发最近似乎不活跃,但它仍然有用。所以,我把它贴在这里,希望有人能帮我运行这个例子。

编辑:我添加了目录和文件的树形结构

+ jayu
     |--Readme.txt           
     |--commons-compiler.jar
     |--janino.jar
     |--jayu.jar             (ASN parser)
     |--AsnToCsv.bat         (Command line Tool)
     +--test                 (Contains test data for examples)
         |
         + testdata         
              |
              Stream1.txt   (Grammar File)
              Stream1.dat   (ASN Data File)
              Stream1.java  {mapFile}
              ...

【问题讨论】:

  • 您确定您的参数配置正确吗? “Stream1.txt”在我看来不像是一个类名。
  • @MarsAtomic 我刚刚按照 jayu_0.4.zip 中 Readme.txt 中的说明进行操作。我也尝试将 Stream1.java 作为第一个参数。也没有用:)。
  • 使用 Stream1.java 作为第一个参数是不正确的。您需要类的名称,而不是文件的名称。但 sparc_spread 的回答应该能让你走上正确的道路。

标签: java macos decode asn.1


【解决方案1】:

它将Stream1.txt 解释为您尝试执行的Java 类,因为它将at 视为java 的第一个参数。您的第一个参数应该是包含main() 的类的名称,或者必须使用-jar 选项指示可执行JAR。

这似乎表明"*.jar;$PATH_TO_TEST_DIR" 正在评估为空白。您能否查看当前工作目录中是否有任何.jar 文件?还有$PATH_TO_TEST_DIR的值是多少?

另一件事是,如果您在 OS X 上使用第二种形式,则应该使用 : 而不是 ;,因为它是基于 Unix 的操作系统,而不是 Windows。


更新1

我对如何运行可执行 JAR 的描述有一点错误。您使用-jar 选项,而不是-cp(我在上面更正了它)。由于他们将-cp 放在他们的调用中,我猜他们不打算以可执行JAR 为目标,而是命名主类。对我来说,test.testdata.Stream1 是主要课程,这意味着他们给你的命令是错误的。试试这个:

java -cp "*.jar:$PATH_TO_TEST_DIR" test.testdata.Stream1 Stream1.txt . Path/To/Stream1.dat

或其他以:

开头的排序

java -cp "*.jar:$PATH_TO_TEST_DIR" test.testdata.Stream1 ..........

也就是说,这使得test.testdata.Stream1 成为java 的第一个命令行参数。

【讨论】:

  • 我已将文件夹结构添加到问题中。我正在从最顶层的 jayu/ 文件夹中运行代码。因此,$PATH_TO_TEST_DIR 是 java 文件所在的 test/testdata。但根据说明 Stream1.txt 是第一个参数。你是对的,不知何故,jar 没有从类路径中读取。我也尝试过使用:而不是;,没有运气。
  • asn2csv.bat 中,是否有一条相对清晰的行调用java?如果是这样,您可以将其发布在问题中吗?
  • 毫无疑问,Stream1.txt 不应该是第一个参数。您可以查看docs.oracle.com/javase/8/docs/technotes/tools/unix/… 以了解“java”参数的解释。一般形式是 java [options] classname [args],其中 [options] 是 java 本身的选项(例如 -cp),[args] 是传递给实现 main() 的 Java 类的参数。
最近更新 更多