如何修复 JAVAC 无效标志错误?

How can I fix a JAVAC Invalid flag error?

我正在尝试用 javac 编译一个 shell 脚本,但它一直向我返回这个错误:

$ bash run_RGE.sh

javac: invalid flag: Element.java
Usage: javac <options> <source files>
use -help for a list of possible options
javac: invalid flag: RGE.java
Usage: javac <options> <source files>
use -help for a list of possible options
javac: invalid flag: -Xms1024m
Usage: javac <options> <source files>
use -help for a list of possible options
sleep: missing operand
Try "sleep --help" for more information.

我的 shell 脚本如下所示:

#!/bin/bash
# -*- coding: utf-8 -*-
export LIB=C:/home/b04280/Transfert/Libs/
CLASSPATH=$(echo "$LIB"/*.jar | tr ' ' ':')
export ficIn=C:/home/b04280/Transfert/rgeII.xlsx/
export repIn=C:/home/b04280/Transfert/rgeII/
export repOut=C:/home/b04280/Transfert/rgeIIcible/
javac -cp $CLASSPATH Element.java
javac -cp $CLASSPATH RGE.java
javac -Xms1024m -Xmx1024m -cp $CLASSPATH  RGE $ficIn $repIn $repOut > docx.txt
sleep 

我想知道这个错误是从哪里来的,我在这里查看了关于同一主题的其他问题,但他们的解决方案似乎不适合我的具体情况。

有什么帮助吗?提前致谢。

PS。我也有睡眠错误(我从批处理中“翻译”了这个脚本 --> shell 并且“睡眠”是我找到的“暂停”的替代品)

我相信这应该更接近您的需要:

#!/bin/bash
# -*- coding: utf-8 -*-
lib=/home/b04280/Transfert/Libs
classpath=$(echo "$lib"/*.jar | tr ' ' ':')
fic_in=/home/b04280/Transfert/rgeII.xlsx/
rep_in=/home/b04280/Transfert/rgeII/
rep_out=/home/b04280/Transfert/rgeIIcible/
javac -cp "$classpath" Element.java
javac -cp "$classpath" RGE.java
java -Xms1024m -Xmx1024m -cp "$classpath" RGE "$fic_in" "$rep_in" "$rep_out" > docx.txt

特别是:

  • unix 路径
  • 带引号的变量,以避免它们在值包含空格时被解析为多个参数
  • 在最后一个命令中 RGE 是一个 class 名称而不是文件路径,您指定内存设置,加上命令产生有用的输出;在我看来它应该执行代码 (java) 而不是编译它 (javac)
  • 我不确定是否有必要,但是从 $LIB 的值中删除尾部斜线避免了 $CLASSPATH 中的双斜线,这可能会混淆 java[c]
  • 删除了无用的 exports(如果您调用其他 bash 脚本或依赖于设置的变量的二进制文件,它们会很有用,但您只是将它们作为参数传递)
  • 应用命名约定(避免大写变量,因为它们可能与环境变量冲突,使用 snake_case 而不是 camelCase)。

我不确定您是在执行 java[c] 二进制文件的 linux 版本还是 windows 二进制文件。如果它是 windows 一个,你需要用 tr ' ' ';' 替换 tr ' ' ':' 部分,因为 windows 上的 class 路径是 semi-colon 分开的比 colon-separated.