- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从 .sh shell 脚本文件为我的 java 代码运行 .jar 文件。 jar 文件名包含“.”这使得 Cygwin 终端认为它是一个目录。这是命令和结果:
java -jar ./lib/javax.json-1.0.jar
结果:
no main manifest attribute, in lib\javax.json-1.0.jar
然后:
error: package javax.json does not exist
import 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: error: package javax.json does not exist
import javax.json.Json; (With this ^ below the '.')
AND:
.\src\TimeTester.java:159: error: cannot find symbol
private static 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: error: package javax.json does not exist
import 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) 不起作用,它给出以下错误:
Error: Could not find or load main class TimeTester
非常感谢您的帮助!
最终编辑:
感谢 Jim,shell 脚本现在可以运行了。现在我得到一个 java 执行错误:
java.io.FileNotFoundException: .\in_input\in.txt (The system cannot find the path specified)
谢谢
最佳答案
TL;DR 由于 bash
之间的命令行 shell 约定冲突,将 Cygwin 与为 Windows 编写的程序一起使用是一件痛苦的事情和 cmd.exe
。要编译和运行 Java 程序,最好使用 Eclipse 或 Netbeans 等 IDE。
但是,如果你必须...
这些都不起作用,因为您正试图将 Linux 风格的路径传递给 Windows JVM。但是你似乎有一个更基本的误解:
# !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 不包含主类
您应该做的是将这两个库路径作为参数提供给 javac
命令的 -cp
选项。
这是非常棘手的地方,因为您要将 Linux 风格的 shell 模拟器与 Windows JVM 混合使用。用于 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 JVM 将接受正斜杠,但如果您有绝对的 Linux 路径(即 /cygdrive/c/...
,或者将 cygdrive 路径设置为 /
,像 /c/user/...
这样的路径 JVM 将无法理解它们,它们将需要使用 cygpath
进行转换。
关于java - 由于 jar 文件,Cygwin 终端在运行 .sh 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38406197/
假设我有一个在 cygwin 下编译的应用程序,并且我想在不让用户安装 cygwin 的情况下分发该应用程序。打包可执行文件和 cygwin DLL 就足够了吗? 最佳答案 事情发生了变化。 Cygw
我从一个镜像站点下载了 cygwin,几个月后,当我尝试更新时,我收到一条消息:“当前 ini 文件来自较新版本的 setup-x86_64.exe” 如果我下载了新的 ini 文件,是否也意味着必须
有什么办法可以回去安装旧版本的 Cygwin? 说我想要 1.7.9 版本,但是 setup.exe在 Cygwin 网站上总是指向最新版本? 最佳答案 http://www.cygwin.com/s
我试图从我的C++代码运行这两个.data文件进行分配。我已经获得了所有文件,并且仅打算为程序实现一些功能(所有内容都应能够运行make命令进行编译)。 我曾经运行过MAC,只是刚开始使用Window
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
当我尝试对CVS管理的文件使用Emacs 23.2.1下的ediff-revision时,在*ediff-errors*框架中收到以下错误,而不是直接开始到ediff结果: cygwin warnin
我一直在用 Cygwin (许久)。具体来说,我在Win7上使用它(包括gcc/g++)进行开发工作。我最近才注意到现在存在一个 64-bit version . 我没有特定的需求要求我过渡到 64
我从安装程序 2.905 安装了 cygwin 3.1.7 64 位,如果我不使用 grep --color=always 我在终端中看不到彩色输出,即 grep - -color=auto 在我的终
如何使用 cygwin 挂载软盘镜像文件。我想挂载镜像,将文件复制到挂载的驱动器,然后从命令行卸载它。 我知道你可以使用 Virtual Floppy Drive在 Windows 中,但有没有办法在
这个question说明cygwin的软链接(soft link)和ntfs的junctions有些不同。我希望 cygwin 创建一个真正的连接点。我想过运行mklink但是,见鬼,没有mklink
我想设置一组最小的 cygwin 应用程序(ls、diff、path、find、grep),以便它们在没有完整 cygwin 安装的机器上运行。 我假设我需要的只是相关的 *.exe 文件和 *.dl
我的机器设置可以运行 cmake 和 gcc,我想在构建机器上安装具有完全相同的包和参数集的 cygwin,也可能在其他开发机器上。有没有一种方法可以做到这一点,而不必使用提供的 Setup.exe
我正在尝试使用 Cygwin 运行 Nutch。我在设置 JAVA_HOME 时遇到问题。 $ export JAVA_HOME='/cygdrive/f/program files/java/jd
如果您尝试“全局”安装 Composer,则它无法在 Cygwin 中正确运行。 将 composer.phar 放入/usr/local/bin/composer 中,然后尝试运行它会导致错误: C
要为 Cygwin 安装其他软件包,我是否只需要运行 setup.exe再次从包列表中选择? 此外,就安装 2 个 Cygwin 实例或此类问题而言,这样做不会损害我的计算机(我对这些事情有点菜鸟)。
我刚刚安装了 Cygwin,bash 提示符中的主目录看起来位于我的 Z: 驱动器上。这不是我想要的。 如何更改此设置? 最佳答案 Starting with Cygwin 1.7.34 ,建议的方法
cygwin 上的当前目录是 home/myuser。我导航到 cygwin,发现它有一个名为 home/myuser 的目录,我不知道如何导航到桌面。我不想在那里添加桌面目录,而且我无法在根文件夹
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我使用当前版本的 Cygwin,1.7.9-1。 当我输入“$ which python”时,Cygwin 输出“/usr/bin/python”。 为了确认根目录是我的 Windows 7 文件系统
我想在 Windows 中使用 cmd 做类似的事情: start dir c:\ 应打开一个新控制台,并显示 dir c: 的输出。 对于 Cygwin 我尝试了这个: cmd /c start b
我是一名优秀的程序员,十分优秀!