无法访问cygwin下的jarfile

时间:2013-05-19 11:33:21

标签: java cygwin

我知道这里有很多“无法访问jarfile”的问题,但我觉得这有点不同以保证自己的线程。

我正在编写演练,本演练的一部分涉及安装Cygwin并运行.jar文件。

问题是这个.jar文件需要从多个目录中调用,而不是让我的读者每次需要运行它时都必须输入.jar的完整路径,我希望它们只有在对Cygwin进行简单配置后输入.jar文件命令。

我尝试将PATH添加到〜/ .bashrc并尝试添加CLASSPATH,但没有成功。

每次调用java -jar file.jar时,我都会Error: Unable to access jarfile file.jar

我该怎么做才能解决这个问题?

[编辑]

我已经和我的婆婆说过了,他对Linux有一点了解,他建议我创建一个包装器来执行jar,我有一个快速搜索,但找不到任何简单的东西。

有什么建议吗?

3 个答案:

答案 0 :(得分:10)

Cygwin已经提供了一种在UNIX(POSIX)风格路径和Windows(MS-DOS)风格路径之间进行转换的方法,它被称为&#34; cygpath&#34;。< / p>

尝试:

java -jar `cygpath -w ./foo/bar/file.jar command file.1 file.2`

注意:这些是围绕cygpath调用的反引号。

使用cygpath消除了编写自己的bash脚本以传递内容的需要,并且jar文件可以位于计算机的任何位置。

例如,制作一个bash脚本,使用Google的Closure Compiler以与bash环境无关的方式缩小JavaScript代码:

#!/bin/bash

# Script directory
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Path to Closure Compiler
COMPILER=$HOME/archive/closure-javascript.jar

# Java requires converting paths from UNIX to Windows under Cygwin
case "$(uname -s)" in
  CYGWIN*) COMPILER=$(cygpath -w $COMPILER)
esac

# Java must be in the PATH
COMMAND="java -jar $COMPILER"

# Allow overriding default filename from the command line
cd $SCRIPT_DIR

rm *.min.js > /dev/null 2>&1

# Minify all files in the directory
for js in *.js; do
  $COMMAND --js=$js --js_output_file=$(basename $js .js).min.js
done

此脚本应在Cygwin和Linux下正确执行。

答案 1 :(得分:8)

java -jar file.jar仅在file.jar位于当前工作目录中时才有效。如果没有,则需要提供file.jar的路径。请注意,如果您使用的是Oracle Java,则需要注意它是一个本机Windows程序,并且不了解Cygwin的* NIX路径。

至于你的姐夫的建议,他说Java程序通常是通过* NIX平台上的包装脚本启动的。如果您使用的是Oracle Java,那将是:

#! /bin/sh
exec java -jar $(cygpath -w /path/to/file.jar) "$@"

答案 2 :(得分:1)

好的,现在已经解决了。

我设法创建了一个调用.jar及其参数的bash脚本,感谢Bernie Zimmerman's Blog我设法让它运行。

问题似乎是虽然Cygwin是一个使用Posix文件名的Linux环境,但Java仍然需要Windows文件名。

有问题的.jar有两个可能的命令,并在文件上制定这些命令并创建另一个文件。

所以我现在可以替换

java -jar ./foo/bar/file.jar command file.1 file.2

jar.sh command file.1 file.2

我创建的bash脚本是:

#!/bin/bash
java -jar "C:\foo\bar\file.jar" "$1" "$2" "$3"