是什么原因导致"无法访问jar文件"错误?

Jos*_*ith 117 java jar executable-jar

我想在不使用IDE的情况下执行我的程序.我已经创建了一个jar文件和一个exectuable jar文件.当我双击exe jar文件时,没有任何反应,当我尝试在cmd中使用该命令时,它给了我:

Error: Unable to access jarfile <path>
Run Code Online (Sandbox Code Playgroud)

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

我是如何创建jar的:

  1. 右键单击项目文件夹(计算器)
  2. 选择
  3. 单击Java Folder并选择"Exectuable Jar File",然后选择next
  4. 启动配置:主要 - 计算器
  5. 创建导出目的地
  6. 点击"完成"并获利!好吧,不是真的.

Vin*_*agi 67

当我运行我的Jar文件时,我遇到过这个问题

java -jar TestJar

代替

java -jar TestJar.jar

  • 这并不总是正确的答案,我附加它但它不起作用。 (21认同)

Jos*_*ith 52

固定

我只是将它放在一个不同的文件夹中,它工作.

  • 有人可以解释为什么会这样吗? (58认同)
  • 听起来它可能是一个文件权限问题,但总猜测. (6认同)
  • 使用cygwin,我在Windows上也遇到了类似的问题。因此cygwin使用的路径与Windows`/ cygdrive / c /`以及`C:\`不同。我通过使用`realpath --relative-to = $(pwd)path / to / jarfile`来解决此问题,因此它将始终强制使用相对路径。使用`/ cygdrive / c /.../ path / to / jarfile`的路径iso (2认同)

Rob*_*own 29

[可能只有Windows]

请注意路径中的空格,即使您的jar位于当前工作目录中也是如此.例如,对我来说这是失败的:

java -jar myjar.jar
Run Code Online (Sandbox Code Playgroud)

我能够通过givng指向jar的完整引用路径来解决这个问题:

java -jar "%~dp0\myjar.jar" 
Run Code Online (Sandbox Code Playgroud)

归功于这个答案,让我走上了正确的道路......


rad*_*scu 15

我在Windows下的CygWin下遇到了这个问题.我在别处读过Java不了解CygWin路径(/cygdrive/c/some/dir而不是C:\some\dir) - 所以我使用了相对路径:../../some/dir/sbt-launch.jar.


小智 11

刚刚遇到同样的问题试图制造一个糟糕的USB ...

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

java -jar c:\fw\ducky\duckencode.jar -I c:\fw\ducky\HelloWorld.txt  -o c:\fw\ducky\inject.bin
Run Code Online (Sandbox Code Playgroud)

但得到了这个错误:

Error: unable to access jarfile c:\fw\ducky\duckencode.jar
Run Code Online (Sandbox Code Playgroud)

第一步

右键单击有问题的jar文件.单击属性.单击右下角的取消阻止选项卡.该文件被阻止,因为它已下载而未在我的PC上创建.

第二步

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

cd C:\fw\ducky\
Run Code Online (Sandbox Code Playgroud)

然后我输入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
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.


twh*_*whb 11

所提供的答案都不适合我在 macOS 11 Big Sur 上的情况。问题原来是程序需要特殊权限才能访问桌面、文档和下载文件夹,而 Java 打破了直接打开文件的例外和权限请求弹出窗口。

\n

修复:

\n
    \n
  • 将 .jar 移至“文档”、“桌面”或“下载”下的 \xe2\x80\x99t(及其下的 \xe2\x80\x99t)文件夹中。
  • \n
  • 手动授予权限。转到系统偏好设置 \xe2\x86\x92 安全和隐私 \xe2\x86\x92 隐私 \xe2\x86\x92 文件和文件夹 \xe2\x86\x92 java,然后检查相应的文件夹。
  • \n
\n


ben*_*nez 10

我在尝试启动jar文件时遇到了同样的问题.路径包含一个空格,所以我不得不在周围放置引号.代替:

java -jar C:\Path to File\myJar.jar
Run Code Online (Sandbox Code Playgroud)

我不得不写

java -jar "C:\Path to File\myJar.jar"
Run Code Online (Sandbox Code Playgroud)


小智 6

这对我有用 java -jar "filename.jar"

  • 这并没有提供问题的答案.一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你就可以[评论任何帖子](http://stackoverflow.com/help/privileges/comment); 相反,[提供不需要提问者澄清的答案](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替). - [来自评论](/ review/low-quality-posts/15429087) (3认同)

nic*_*fox 6

如果您使用的是 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
Run Code Online (Sandbox Code Playgroud)

然后,您可以清除属性

xattr -c file.jar
Run Code Online (Sandbox Code Playgroud)


Vis*_*tna 6

我遇到了类似的问题,甚至尝试使用管理员权限运行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
Run Code Online (Sandbox Code Playgroud)


Buf*_*alo 5

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

java -jar test@gmail.com testing_subject file.txt test_send_emails.jar
Run Code Online (Sandbox Code Playgroud)

而不是正确的版本:

java -jar test_send_emails.jar test@gmail.com testing_subject file.txt
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我有用。

cd /path/to/the/jar/

java -jar ./Calculator.jar
Run Code Online (Sandbox Code Playgroud)