终端中的 Java:“无法访问 jarfile Example.jar”

终端中的 Java:“无法访问 jarfile Example.jar”

我是 Linux 上使用 Java 的新手。我克隆了一个我感兴趣的存储库,但似乎无法从我的机器上运行代码。我尝试的命令是:

java -Djava.library.path=/home/myname/path/to/project -jar example.jar 

我收到的错误是:

Error: Unable to access jarfile example.jar

一开始我以为是权限问题,所以我尝试使用 sudo 运行命令(出现同样的错误),我还看到一个带有引号的文件路径的示例,所以我尝试了一下,但也出现了同样的错误。

我查看了项目文件,发现实际上没有名为“example.jar”的文件。我是否应该先运行某个命令来生成它?

在此先感谢您的帮助!

答案1

是的,要运行 jar,它必须存在。

在创建它时,您必须将目录结构与包结构相匹配。

例如,您的目录可能是:

/home/ellen/proj/java/foo/example/src/example/Foo.java 
/home/ellen/proj/java/foo/example/src/example/util/MyList.java 

对于源文件和类文件:

/home/ellen/proj/java/foo/example/classes/example/Foo.class
/home/ellen/proj/java/foo/example/classes/example/util/MyList.class

(通常你会发现类在 ../bin/.. 而不是 ../classes/.. 命名的文件夹中,或者源文件和类文件混合在同一个目录中)

对应包结构:

package example
package example.util

然后你应该移动到层次结构的基目录:

cd /home/ellen/proj/java/foo/example/classes

或者用参数 -C 来设置,jar -C /home/ellen/proj/java/foo/example/classes ... 或者从主目录jar -C proj/java/foo/example/classes ...作为相对路径。

例如,您可以使用以下命令创建 jar 文件:

jar -cf example.jar *.class

并使用以下方式检查:

jar -tf example.jar 

请注意,有一个清单文件,它是自动生成并有用的,可作为模板,您可以在其中添加主类的信息(如果有的话),但对于语法(大写/小写、换行符)的要求非常严格。

Manifest-Version: 1.0
Created-By: 9-internal (Oracle Corporation)    
Main-Class: example.Main

如果您想在不指定主类的情况下运行它,则必须添加这样的主类条目:

java -jar example.jar 

否则你必须使用:

java -cp example.jar example.Main

本质上,jar 文件是一个 zip 存档,可以使用这些工具进行处理。

当您拥有多个类并且可能具有深层数据包结构时,干净地分离 src/ 和 bin/ 文件很有用。

 jar -cf example.jar -C classes . 

然后将从目录 classes/ 开始包含您通常需要的所有内容。(例如/类,示例/util/.class,示例/net/*class...)

 jar --help 

告知您有关语法的信息。

相关内容