是什么导致“无法访问jarfile”错误?


135

我想在不使用IDE的情况下执行程序。我创建了一个jar文件和一个可执行的jar文件。当我双击exe jar文件时,什么也没有发生,当我尝试在cmd中使用命令时,它显示以下信息:

Error: Unable to access jarfile <path>

我使用以下命令: java -jar Calculator.jar

我如何创建罐子:

  1. 右键单击项目文件夹(计算器)
  2. 选择
  3. 单击Java文件夹并选择“可提取Jar文件”,然后选择下一步
  4. 启动配置:主要-计算器
  5. 创建导出目的地
  6. 点击“完成”并获利!好吧,不是真的。

1
听起来Jar某种程度上已损坏,可能缺少Manifest条目。
MadProgrammer

您应该显示如何创建JAR,它们中的内容以及如何尝试运行该程序。Java代码在这里无关紧要。
Jochen 2012年

您是否尝试过重新启动elcip和重新编译?有时Eclipse做了一些奇怪的事情,可以通过重新启动来避免。
MattS

我发现代码难以阅读和思考。将所有内容都放在静态main函数中并具有一个实例方法来清除控制台的意义何在?
戴夫牛顿

1
我没有问题的答案,我自己回答了,除了通过回复感谢他们之外,没有其他方法可以表达我的赞赏。请重新阅读您的评论。
约瑟夫·史密斯

Answers:


78

当我运行Jar文件时遇到了这个问题

java -jar TestJar

代替

java -jar TestJar.jar

缺少扩展名.jar也会导致此问题。


1
这是正确的答案。.jar扩展名必须附加到jar文件名中。
Abhijay Kumar

10
它并不总是正确的答案,我将其附加了,但它不起作用。
艾伦B

就我而言,我认为它是文件,而它是控制台上的文件夹。jar文件位于具有相同名称的文件夹中。
威利·麦肯

58

固定

我只是将其放置在其他文件夹中而已。


62
有人可以解释为什么会这样吗?
Anastasios Andronidis 2014年

7
听起来可能是文件权限问题,但总的猜测是这样。
艾登·弗莱

2
使用cygwin,我在Windows上也遇到了类似的问题。因此cygwin使用的路径不同于Windows,/cygdrive/c/C:\ 我使用来解决此问题。realpath --relative-to=$(pwd) path/to/jarfile因此,它将始终使用以下方式强制执行相对路径iso/cygdrive/c/.../path/to/jarfile
Rik

1
我也遇到了同样的问题,我的罐子也一样,我不小心输入了罐子的路径
Ori Wiesel

1
@Rik您的评论很有用,尽管在dos路径和cygwin路径中的java文件中不起作用。解决方案是java -jar $(cygpath -a -d `realpath --relative-to=$(pwd) $HOME/opt/javafile.jar`)
cy8g3n

31

[可能仅适用于Windows]

即使路径在当前工作目录中,也要注意路径中的空格。例如,对我来说,这是失败的:

java -jar myjar.jar

我可以通过给出罐子的完整引用路径来解决此问题:

java -jar "%~dp0\myjar.jar" 

归功于此答案,它使我走上了正确的道路。


谢谢你 如果尝试从其他目录运行,则还需要在Linux中提供完整路径。
Pubudu

该答案部分重复于该问题的已有答案。这是使用相同方法的较早答案:全引号路径。15年9月6日,@ benez
sophievda

18

我在Windows的CygWin下遇到此问题。我在其他地方已经读到Java不能理解CygWin路径(/cygdrive/c/some/dir而不是C:\some\dir),因此我使用了相对路径:../../some/dir/sbt-launch.jar


我在CygWin中遇到了这个确切的问题!永远谢谢你!
Rhyuk

1
如果需要cygwin使用Windows格式化的路径而不是cygwin路径,则可以使用cygpath -w / path / here命令将路径转换为Windows等效路径。
杰森·斯洛伯茨基

@JasonSlobotski感谢您的提示,我认为您的评论应该是一个答案。
罗伯托·邦瓦莱特

14

尝试启动jar文件时遇到了相同的问题。路径中包含一个空格,因此我必须在周围加上引号。代替:

java -jar C:\Path to File\myJar.jar

我不得不写

java -jar "C:\Path to File\myJar.jar"

报价对我来说很成功,因为我之间也有空格。然后,我尝试了在路径中没有空格且没有引号的情况下进行尝试,然后它也起作用了
Timothy

Anno 2019:此解决方案对我有用,带引号!没有引号和空格就我而言是行不通的。
sophievda

11

刚遇到同样的问题,试图制作一个坏的USB ...

我试图在admin cmd中运行此命令

java -jar c:\fw\ducky\duckencode.jar -I c:\fw\ducky\HelloWorld.txt  -o c:\fw\ducky\inject.bin

但是得到了这个错误:

Error: unable to access jarfile c:\fw\ducky\duckencode.jar

第一步

右键单击有问题的jarfile。单击属性。点击右下角的取消阻止标签。该文件已被阻止,因为它已下载但未在我的PC上创建。

第二步

在cmd中,我将目录更改为jar文件所在的目录。

cd C:\fw\ducky\

然后我键入dir并看到文件被命名为duckencode.jar.jar

所以在cmd中,我更改了原始命令以引用文件 .jar.jar

java -jar c:\fw\ducky\duckencode.jar.jar -I c:\fw\ducky\HelloWorld.txt  -o c:\fw\ducky\inject.bin

该命令执行时没有错误消息,而我试图创建的inject.bin现在位于目录中。

希望这可以帮助。


谢谢,我的名字也被命名为apktool.jar.jar
Mayank Kumar

8

我遇到了类似的问题,甚至尝试使用管理员权限运行CMD,但并没有解决问题。

基本的一点是,一定要改变目录在CMD到当前目录中您的jar文件。

请执行以下步骤:

1.将jar文件复制到桌面。

  1. 运行CMD

  2. 键入命令 cd desktp

  3. 然后输入 java -jar filename.jar

这应该工作。


编辑:从JDK-11开始(JEP 330:启动单文件源代码程序)

从Java 11开始,java命令行工具已经能够直接运行单个文件的源代码。例如

java filename.java


5

如果使用的是OSX,下载的文件将带有安全标记,以防止未签名的应用程序运行。

要检查这一点,您可以查看文件的扩展属性

$ ls -l@
-rw-r--r--@ 1 dave  staff  17663235 13 Oct 11:08 server-0.28.2-java8.jar
com.apple.metadata:kMDItemWhereFroms         619
com.apple.quarantine          68

然后,您可以使用清除属性

xattr -c file.jar


3

如果您没有正确提供参数列表,也会发生这种情况。这是我在做什么:

java -jar test@gmail.com testing_subject file.txt test_send_emails.jar

而不是正确的版本:

java -jar test_send_emails.jar test@gmail.com testing_subject file.txt

3

有时,当您尝试通过在Android Studio中右键单击/ libs文件夹下的.jar文件时,会发生这种情况。您可以选择android stuio顶部的下拉列表并将其更改为app。这会起作用

在此处输入图片说明


2

对我来说,如果您在PATH中的foldername中使用本机波兰语字符,就会发生这种情况。因此,也许使用非典型字符是问题的原因。


2

引起我的特殊问题是因为我正在使用涉及符号链接(快捷方式)的目录。因此,尝试java -jar ../../myJar.jar没有用,因为我不在我想的地方。

不考虑相对文件路径,可以立即将其修复。


2

就我而言,建议使用的文件名jarFile*.jar在命令行中。该文件夹中的文件为jarFile-1.2.3.jar。因此,我将文件重命名为jarFile。然后我用jarFile.jar代替,jarFile*.jar然后问题得到解决


完成此操作后,我无法访问jar文件的问题已解决。
Developine

2

如果文件夹名称中有空格,则可能在Windows计算机上发生。解决方案是输入“”之间的路径。例如:

java -jar c:\my folder\x.jar    --> 
java -jar "c:\my folder\x.jar"

2
这不能回答问题,您应该使用注释来寻求更多信息。
AWD

2

为避免任何权限问题,请尝试以管理员身份运行它。这在Win10上对我有用。


Mac呢?
GvSharma

2

我知道该线程是几年前的,问题也已修复。但是,我希望以后对其他人有帮助,因为在我尝试安装安装程序.jar格式的Oracle WebLogic 12c和Oracle OFR时遇到了类似的问题。在我的情况下,要么没有将JDK目录包装在引号中,要么只是错字。

Command Prompt以管理员身份运行并以这种格式执行命令。仔细检查句子是否有错字。

"C:\Program Files\Java\jdk1.xxxxx\bin\java" -jar C:\Users\xxx\Downloads\xxx.jar

如果显示JRE 1.xxx is not a valid JDK Java Home,则请确保JAVA_HOME环境变量中的系统变量指向正确的JDK目录。建议使用JDK 1.8或更高版本(2018)。

您可以在这里参考一个有用的线程:为什么在安装weblogic服务器时显示JDK c:program files \ java \ jre7不是有效的JDK?


1

我有一个类似的问题,其中TextMate或其他东西用Unicode双引号代替了双引号。

SELENIUM_SERVER_JAR从Unicode双引号更改为常规双引号,这解决了我的问题。


1

这是因为您正在寻找错误路径中的文件1.寻找您放置文件的文件夹的路径2.在cmd中更改目录cd使用正确的路径


1

我使用NetBeans并遇到相同的问题。在运行构建和清理项目后,我的程序是可执行的。Java文档说build / clean命令用于基本上从头开始重建项目并删除任何过去的编译。我希望这有帮助。另外,我会阅读文档。Oracle具有NetBeans和Java学习资源。很有帮助。祝好运!



1

最后,我将jar文件粘贴到了与JDK相同的文件夹中,因此不必包含路径。我还必须以管理员身份打开命令提示符。

  1. 右键单击“命令提示符”,然后单击“以管理员身份运行”
  2. 导航到将jdk保存到的目录
  3. 在命令提示符下,键入: java.exe -jar <jar file name>.jar


0

您是否尝试过在管理员特权下运行它?意思是,在“运行方式”中运行命令,然后选择具有适当管理员凭据的管理员

为我工作


0

我正在尝试这个:

给文件读,写后,执行特权:

chmod 777 java-repl.jar

alias jr="java -jar $HOME/Dev/java-repl/java-repl.jar"

无法访问bla bla ...,但这是在Mac OS上

所以我尝试了这个:

alias jr="cd $HOME/Dev/java-repl/ && java -jar java-repl.jar"


0

这不起作用“无法访问jarfile”

"C:\Program Files\java\jdk-13+33-jre\bin\javaw.exe" -jar "C:\Program Files\Maxim Integrated Products\1-Wire Drivers x64\ OneWireViewer.jar"

这确实有效

"C:\Program Files\java\jdk-13+33-jre\bin\javaw.exe" -jar "C:\Program Files\Maxim Integrated Products\1-Wire Drivers x64\OneWireViewer.jar"

区别在于OneWireViewer.jar前面的单个空格,尽管它被引号引起来,甚至还有其他空格。


0

对我来说,发生这种情况是因为我使用默认的Java版本(7)而不是用于创建此jar的已编译Java版本(8)来运行它。

所以我用了:

%Java8_64%\bin\java -jar myjar.jar

代替Java 7版本:

java -jar myjar.jar

0

如果您使用的是WSL,并遵循一条指导说明如下:

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

即使您已在java.library.path零件中提供了完整路径,您实际上仍需要指定其完整路径。

java -Djava.library.path=/mnt/c/dynamodb_local/DynamoDBLocal_lib -jar /mnt/c/dynamodb_local/DynamoDBLocal.jar -sharedDb

-1

首先我创建了一个变量 %JAVA_HOME% :

下载文件时,请确保UNBLOCK TAB如上“ maartencls” post中所示签入文件属性。

c:\users\my user\downloads\location of the file\all> java -jar yourfilename.jar

希望这能解决问题:)


-1

第一次运行: java -version

然后运行: java -jar Calculator.jar

这对我有用。


不确定为什么 java -version这里需要?此外,正在运行的java -jar Calculator.jar是什么OP没有和没有工作....
ArielGro
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.