我正试图从一个.jar shell脚本文件中为我的java代码运行.sh文件。jar文件名包含“。这使得Cygwin终端认为它是一个目录。这是命令和结果:
java -jar ./lib/javax.json-1.0.jar结果:
没有主清单属性,在lib\javax.json-1.0.jar中
然后:
错误:包javax.json不存在 进口javax.json.Json;
使用此标记^低于句点(就在javax之后)。
我该怎么解决呢?我正在Windows 10上工作。谢谢!
编辑:
我已经编写了许多形式的.sh文件来让它运行,但是它不会运行。目前的情况是:
# !bin/bash
java -jar ./lib/javax.json-1.0.jar
java -jar ./lib/javax.json-api-1.0.jar
javac ./src/TimeTester.java
java TimeTester 这个好看吗?
我得到了以下错误:
.\src\TimeTester.java:22:错误:包javax.json不存在 导入javax.json.Json;(此^在‘.’之下) 以及: .\src\TimeTester.java:159:错误:找不到符号 私有静态JsonObject getJsonFromString(String jsonStr){
还有许多类似的错误..。有什么帮助吗?
编辑2:
这是我的当前文件:
javac -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar ./src/TimeTester.java
java -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar:./src TimeTester 但我得到了:
.\src\TimeTester.java:22:错误:包javax.json不存在 进口javax.json.Json; ^
在最后一个点(.Json)下面加上这个(^)
编辑3:
当前的.sh文件是:
#!/usr/bin/env bash
cd src
javac -cp '../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester.java
java -cp '../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester 第一个命令(javac)工作并生成.class文件。但是,第二个命令(java)不起作用,它会产生以下错误:
错误:找不到或加载主类TimeTester
你的帮助真的很感激!
最后编辑:
谢谢Jim,shell脚本现在起作用了。现在我得到了一个java执行错误:
java.io.FileNotFoundException:.\in_input\in.txt (系统找不到指定的路径)
谢谢
发布于 2016-07-16 01:40:57
TL;博士由于bash和cmd.exe之间的命令行shell约定相互冲突,在为cmd.exe编写的程序中使用Cygwin是件很痛苦的事情。要编译和运行Java程序,最好使用IDE,如Eclipse或Netbeans。
但是如果你必须..。
所有这些都不起作用,因为您试图将Linux样式的路径传递给Windows。然而,你似乎有一个更基本的误解:
# !bin/bash
java -jar ./lib/javax.json-1.0.jar
java -jar ./lib/javax.json-api-1.0.jar
javac ./src/TimeTester.java
java TimeTester 我推测,您认为前两个语句使编译器可以使用第三个javac行的库。这不是真的,这两行试图执行jar文件,当然,由于jar不包含主类,jar将失败。
您应该做的是将这两个库路径作为参数提供给javac命令的javac选项。
这是一个非常棘手的问题,因为您正在将Linux风格的shell模拟器与Windows混合在一起。用于shell的路径必须保持Linux样式,而JVM将要使用的路径必须转换为Windows格式,JVM的路径字符串必须用分号(Windows样式)而不是冒号(Linux样式)分隔。这带来了进一步的复杂性,因为Cygwin (Linux)中的分号是一行上多个命令的分隔符,因此必须引用路径字符串来防止分号破坏事物。
同样有问题的是要编译的类的命名。您还没有向我们展示Java文件的包声明,但我假设它在默认包中(即没有包声明,也没有package src;)。在这种情况下,您应该位于src目录中,而不是上面的一个目录。
最后,一旦指定了-cp,如果希望包含当前目录,还必须将当前目录添加到Windows上的类路径中,否则它将找不到新编译的.class文件。
因此,编译和执行命令应该是
javac -cp '../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester.java
java -cp '.;../lib/javax.json-1.0.jar;../lib/javax.json-api-1.0.jar' TimeTester对于简单的相对路径,Windows将接受正斜杠,但如果您拥有绝对的Linux路径(即/cygdrive/c/...,或者将cygdrive路径设置为/,则路径设置为/c/user/...),则JVM将无法理解它们,因此需要使用cygpath进行转换。
发布于 2016-07-16 00:49:44
您的4个命令都不起作用:
java -jar ./lib/javax.json-1.0.jar无法工作,因为javax.json-1.0.jar不是可执行的jar文件。java -jar ./lib/javax.json-api-1.0.jar无法工作,因为javax.json-api-1.0.jar不是可执行的jar文件。javac ./src/TimeTester.java无法工作,因为您的类需要javax.json包中的类在类路径上,而且您还没有设置类路径。javax.json包中的类可以在javax.json-1.0.jar文件中找到。java TimeTester无法工作。要解决所有这些问题,请删除前两行,并在其他两行上指定类路径。
javac -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar ./src/TimeTester.java
java -cp ./lib/javax.json-1.0.jar:./lib/javax.json-api-1.0.jar:./src TimeTester注意,在执行程序时,还必须在类路径上列出./src。
https://stackoverflow.com/questions/38406197
复制相似问题